model z simulinka do LabView

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

model z simulinka do LabView

Post autor: Mikkaelo »

Witam!
Mam problem z odzwierciedleniem modelu (model jednego odcinka liny nośnej) stworzonego w simulinku w LabView. Postanowiłem rozłożyć model na czynniki pierwsze i poskładać go krok po kroku w LabView, porównując wyniki uzyskane z simulinkiem. Wyniki nieznacznie się różnią, dla 10s symulacji otrzymuje wartość prędkości w simulinku równą 2,86e+4 a w LabView 2,88e+4. Gdy chce dokończyć model stosując sprzężenie zwrotne zaczynają w Labview wychodzić zupełne głupoty i kosmiczne liczby. Próbowałem przez rejestry przesuwne, feedback node.. efekt ten sam... może ma ktoś pomysł jak to zrealizować, albo ja robię coś źle próbując zaimplementować ten model.
przesyłam w załączniku model z simulinka, oraz stworzone przeze mnie .vi
Załączniki
lina.vi
(13.96 KiB) Pobrany 287 razy
integrator.vi
(10.72 KiB) Pobrany 273 razy
lina.rar
(5.76 KiB) Pobrany 246 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: model z simulinka do LabView

Post autor: PiDi »

Małe porównanie - twój integrator z tego tematu i mój z poprzedniego tematu:
i_twoj.png
i_moj.png
W twoim przypadku przy pierwszym uruchomieniu VI zaczyna od zera, a przy kolejnym uruchomieniu zaczyna od tego, gdzie skończył poprzednio - dotyczy to sytuacji:
1) Włączyłem LV i załadowałem VI
2) Uruchomiłem VI (Run)
3) VI się wykonał, uruchomiłem go jeszcze raz (znów Run) -> zaczął liczyć od tego, gdzie wcześniej skończył.
Jeśli zamkniesz VI i załadujesz go jeszcze raz, znów będzie liczył od zera. Ale wolisz zapewne, żeby zawsze liczył od zera - i po to w moim integratorze jest First Call? To powinno załatwić sprawę.
ObrazekObrazekObrazekObrazek
Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: model z simulinka do LabView

Post autor: Mikkaelo »

Zrozumiałem działanie Twojego integratora z poprzedniego tematu, oraz po co została zastosowana funkcja first call. Ja jej nie zastosowałem, ale miałem świadomość tego że mój integrator po kolejnym odpaleniu vi docałkowuje do ostatniej wartości zachowanej w shift register. Nie tutaj tkwi problem, raczej w sprzężeniu zwrotnym, po którego zastosowaniu dostaje jakiś kosmos nie wiedzieć dlaczego.

Po zastosowaniu Twojego rozwiązaniu z first call w integratorze pierwszy przebieg pętli jest 'pusty' tzn na wyjściu integratora podawana jest wartość 0. Dodałem więc jeszcze jedną iterację w pętli for i wynik jest identyczny jak wcześniej.
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: model z simulinka do LabView

Post autor: PiDi »

A, już wiem. Ustaw sobie w simulinku (Simulation->Simulation Parameters->Solver) stały krok całkowania na 0.1 (Solver Options->Type->Fixed Step), czyli taki sam, jak sobie ustawiłeś w LV. Zobacz co się wydarzy, wyciągnij wnioski.
ObrazekObrazekObrazekObrazek
Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: model z simulinka do LabView

Post autor: Mikkaelo »

Ustawiłem parametry solver`a w simulinku, wybrałem metodę całkowania Euler`a, czyli taką samą jaką używam w LV, wszystko jest ok, wyniki się zgadzają do momentu zastosowania sprzężenie zwrotnego. Wychodzą zupełnie różniące się wyniki...
Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

model z simulinka do LabView

Post autor: Mikkaelo »

Ok, doszedłem do tego, w simulinku występuje przesunięcie między integratorami. W pierwszej iteracji całkuje tylko ten pierwszy, drugi wyrzuca wartość 0, w drugim kroku pierwszy całkuje nową wartość a drugi integrator tę wartość którą w poprzednim kroku wyrzucił pierwszy. Wyniki są identyczne wraz ze sprzężeniem zwrotnym. Nie mniej jednak PiDi wielkie dzięki za pomoc i wkład w temat :)
Załączniki
integrator.vi
(9.23 KiB) Pobrany 244 razy
lina.vi
(13.69 KiB) Pobrany 272 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: model z simulinka do LabView

Post autor: PiDi »

Moment, jeszcze raz: ustaw w simulinku krok całkowania na stały 0.1. Uruchom, zobacz wyniki (naprawdę nic Cię nie zaskoczyło?). Potem ustaw krok na 0.001. Uruchom, zobacz wynik, porównaj z pierwszym. Coś nie tak?

Ed. ok, wynik z LV i simulinka być może wychodzi Ci teraz taki sam, co nie oznacza, że jest to wynik dobry.
ObrazekObrazekObrazekObrazek
Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: model z simulinka do LabView

Post autor: Mikkaelo »

Ok, zmieniłem krok całkowania i wyniki różnią się.... im mniejszy krok całkowania tym dokładniejszy wynik... tylko nie bardzo wiem do czego zmierzasz...
A drugie moje pytanie to... który wynik w takim razie jest dobry?

Mój problem więc jest jeszcze inny, mam model w simulinku, którego model liny jest jedną ze składowych. W modelu tym całkowanie odbywa się przy ustawieniach Variable_step Solver:ode45 <- dzięki tej metodzie otrzymuje sensowne wyniki(zgodne z artykułem na którym się opieram). Chciałbym za pomocą LV otrzymać te same wyniki... czy to oznacza że muszę również zaimplementować metodę całkowania ode45? Logika podpowiada że tak, o ile jest to w ogóle możliwe.
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: model z simulinka do LabView

Post autor: PiDi »

A sprawdzałeś to dla pętli otwartej czy zamkniętej? Dla otwartej nie ma to większego znaczenia, a dla zamkniętej...
Dla stałego kroku 0.1 układ sobie oscyluje w nieskonczoność, po 10 sekundach V1 jest już rzędu 10^17.
Dla stałego kroku 0.0001 układ wygląda na stabilny, V1 oscyluje sobie powoli gdzieś między wartościami 0 a 2.
To wszystko dla takich parametrów k1,k2 i m1, jak masz wpisane w viju do symulacji, oba wejścia wartość 1, metoda Eulera, Matlab 2009b.
ObrazekObrazekObrazekObrazek
ODPOWIEDZ