model z simulinka do LabView
model z simulinka do LabView
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
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
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: model z simulinka do LabView
Małe porównanie - twój integrator z tego tematu i mój z poprzedniego tematu:
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ę.
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ę.
Re: model z simulinka do LabView
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.
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.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: model z simulinka do LabView
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.
Re: model z simulinka do LabView
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...
model z simulinka do LabView
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
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: model z simulinka do LabView
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.
Ed. ok, wynik z LV i simulinka być może wychodzi Ci teraz taki sam, co nie oznacza, że jest to wynik dobry.
Re: model z simulinka do LabView
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.
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.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: model z simulinka do LabView
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.
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.