rozwiązywanie równań różniczkowych w czasie rzeczywistym

Tematy związane z LabVIEW pracującym w czasie rzeczywistym.
Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: Mikkaelo » 24 sie 2011 17:31

Witam!
Czy można zrealizować w LabVIEW rozwiązywanie równań różniczkowych drugiego rzędu w czasie rzeczywistym, a wyniki obliczeń wyrzucać na serwer DDE?
Mam 12 równań opisujących model górniczej maszyny wyciągowej - chciałbym je zaimplementować w LabVIEW ale nie wiem czy to w ogóle jest możliwe do zrealizowania.
Załączniki
równania dynamiki.doc
(293.5 KiB) Pobrany 272 razy

PiDi
Posty: 602
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2014
Lokalizacja: Katowice
Has thanked: 2 times
Been thanked: 1 time

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: PiDi » 25 sie 2011 23:10

Dla przeciętnego człowieka czas rozwiązania układu 12 równań różniczkowych dąży do nieskończoności, więc jeśli przyjmiemy takie odniesienie czasu rzeczywistego, to wszystko się da zrobić :D A tak poważnie - co dokładnie chcesz osiągnąć? Sądząc po braku odpowiedzi od wczoraj, to chyba nie tylko ja do końca nie zrozumiałem, do czego dążysz i w czym problem.
ObrazekObrazekObrazek

Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: Mikkaelo » 25 sie 2011 23:27

Dokładnie chce osiągnąć model maszyny wyciągowej na podstawie zaimplementowanych równań w LabVIEW. Sygnałem wymuszający ma być prędkość zadawana (za pomocą karty pomiarowej- obsługę karty w labview już zrealizowałem), a odpowiedzią układu takie dane jak: napięcie i prąd twornika, wzbudzenia, prędkość naczyń.. itd. (wysyłane dalej na serwer DDE)

Awatar użytkownika
smiga
Posty: 680
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Been thanked: 1 time
Kontakt:

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: smiga » 26 sie 2011 12:23

System czasu rzeczywistego może dawać wyniki raz na godzinę ... ale zawsze dokładnie w tym samym momencie masz obliczenia - dokładniej wszystko dzieje się w deterministycznie określonym czasie.
System czasu rzeczywistego nie musi być więc szybki, ważne jest jednak, żeby jego działania spełniały narzucone ograniczenia czasowe.

Jeżeli Tobie bardziej chodzi o szybkość to może implementacja rozwiązania takiego problemu na FPGA (oczywiście przy pomocy LabVIEW) będzie ciekawsza.
____ Arkadiusz Śmigielski ____
_____ tel. 662 01 01 74_____
_____ www.optinav.pl _____

Obrazek

Awatar użytkownika
wino
Posty: 548
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: wino » 28 sie 2011 19:07

Tu jakieś takie coś znalazłem

KLIK

Awatar użytkownika
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: vugie » 29 sie 2011 10:40

Skoro dane zbierasz z karty, to mniemam, że musisz najpierw zapisać sobie te równania w dziedzinie czasu. Układ równań drugiego rzędu zawsze można sprowadzi do układu równań pierwszego rzędu dopisując odpowiednią ilość równań (czysto mechaniczna czynność). Rozwiązywać układ równań pierwszego rzędu (nawet w czasie rzeczywistym, cokolwiek to znaczy) można we wszystkim co umie dodawać i mnożyć. LabVIEW ma całkiem rozbudowany klocek do tego (ODE Solver), nie jest jednak przeznaczony do działania w czasie rzeczywistym. Można to jednak obejść traktując wynik z ostatniego kroku jako warunki początkowe do obliczenia kroku następnego. Osobiście takiego zabiegu nie robiłem, nie wiem jak wyglądałaby wydajność (różne inicjalizacje które normalnie służą optymalizacji działałyby tu na naszą niekorzyść). Samo rozwiązywanie równań przy użyciu wbudowanych funkcji było niejednokrotnie wałkowane na tym forum (powtarzam, że przejście na pierwszy rząd równań jest czysto mechaniczne).
Można też pokusić się o zaimplementowanie jakiejś metody samemu - to naprawdę nie jest trudne - mnożenie i dodawanie wektorów.
Niezależnie jaką drogą pójdziemy kluczowy jest dobór metody, a przede wszystkim rzędu metody (nie mylić z rzędem układu równań) - im wyższy tym potencjalnie większa dokładność, mniejsza stabilność (w określonych warunkach), większe opóźnienie wyniku względem pierwszego pomiaru i dłuższy czas obliczeń jednego kroku (w zasadzie o rozwiązywaniu w czasie rzeczywistym możemy mówić wtedy gdy średni czas obliczania kolejnego kroku jest krótszy niż faktyczny czas tego kroku). Równie ważny jest dobór samej wielkości kroku. Na pewno nie może być krótszy niż czas próbkowania sygnału z karty, a im dłuższy tym mniejsza dokładność (ale jednocześnie większa szansa na zachowanie "rzeczywistości"). Najlepiej jeżeli obejmuje on kilka sampli sygnału, co pozwoli na jego odszumienie przez proste uśrednianie.

Awatar użytkownika
czepek
Posty: 27
Rejestracja: 02 cze 2010 22:21
Wersja środowiska: LabVIEW 2009

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: czepek » 30 sie 2011 01:28

Od siebie dodam że istnieje mozliwośc symulacji przy wykorzystaniu schematu blokowego i Control Design & Simulation Toolbox chyba najbardziej rozbudowany toolbox, symulowany obiekt można tez umieszczać poza pętlą symulacji np w Timed Loop która pozwala na przydzielanie priorytetów,zmiane kroku itd.

Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: Mikkaelo » 31 sie 2011 19:12

W LV ver8.5 nie jest możliwe umieszczanie obiektów symulacji (bloczków) poza pętlą symulacji. Próbowałem z Timed Loop.. nic z tego.
Próbuję podejść do zagadnienia w sposób jaki podał vugie. Po kolei zapisuje równania w dziedzinie czasu i próbuje je implementować w pętli While Loop podobnie jak w simulinku.

Nie wiem tylko czy mój sposób podejścia do sprawy jest dobry.
Załączniki
Uw_rownanie.vi
przykład drugiego równania
(12.59 KiB) Pobrany 227 razy

Awatar użytkownika
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: vugie » 01 wrz 2011 10:07

Tylko gdzie tam jest czas? Musisz najpierw sprowadzić wszystkie równania do postaci xi'(t)=f(x1(t),x2(t),...,xN(t),t) (i=1..N) i potem całkować wszystkie. I najlepeij "ręcznie" a nie bloczkiem typu point-by-point, bo (z racji że są "reentrantne") będzie trzeba użyć tylu ich instancji ile jest równań (każdy bloczek pamięta swój poprzedni wynik, więc nie można pętlą przelecieć przez wszystkie równania) - a nie będzie to zbyt eleganckie, a już na pewno nie wybroni się jako uznana metoda rozwiązywania równań różniczkowych. Polecam metodę RK4 (http://pl.wikipedia.org/wiki/Algorytm_Rungego-Kutty) - bardzo dokładna i jednocześnie wystarczająco szybka dla tak małego (tak!) układu jak Twój.

Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: Mikkaelo » 01 wrz 2011 11:54

Dzięki za odpowiedź! Ze sprowadzeniem równań do postaci czasowej mam mały problem, bo o ile równanie 2 i 4 bez najmniejszego problemu udało mi się przekształcić to 1 i 3 już nie. Pojawiają się w nich iloczyny zmiennych operatorowych jak np. w 3 równaniu: Iw(s)* Ia(s) - nie wiem z czego w tym wypadku skorzystać do przekształcenia tych równań.
2 równanie sprowadziłem do postaci:
Uw (t)=Rw Iw (t)+Rw Tw ∙ dIw(t))/dt
i jego rozwiązanie jest w załączniku w poście powyżej.
Wszystkie te równania są częścią modelu, którego realizację w simulinku dodaje w załączniku
Załączniki
DSC01228.JPG

Awatar użytkownika
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: vugie » 01 wrz 2011 12:31

Mikkaelo pisze:Dzięki za odpowiedź! Ze sprowadzeniem równań do postaci czasowej mam mały problem, bo o ile równanie 2 i 4 bez najmniejszego problemu udało mi się przekształcić to 1 i 3 już nie. Pojawiają się w nich iloczyny zmiennych operatorowych jak np. w 3 równaniu: Iw(s)* Ia(s) - nie wiem z czego w tym wypadku skorzystać do przekształcenia tych równań.
Mnożenie funkcji operatorowych przekształca się na splot funkcji czasowych (http://pl.wikipedia.org/wiki/Transformata_Laplace%27a). Uwaga, gwiazdka nie oznacza tam mnożenia!

Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: Mikkaelo » 01 wrz 2011 15:17

Bardzo delikatnie rzecz ujmując równania (o ile dobrze zastosowałem tw Borela i całkę Duhamela) dość mocno się skomplikowały... Trudno będzie je zaimplementować w LabVIEW... metoda R-K raczej odpada
Załączniki
równania d.doc
(123.5 KiB) Pobrany 208 razy

Awatar użytkownika
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: vugie » 01 wrz 2011 16:07

Zapisz wszystko w postaci którą podałem wcześniej i da się zrobić. Metody numerycznę mają tę przewagę, że całek nie trzeba rozwiązywać analitycznie :)
W każdym kroku czasowym i będziesz przeciesz znał przebiegi wszystkich funkcji od czasu 0 do i-1. To wystarczy do policzenia tego pod całką. Pewnych trików może wymagać tylko zrobienie tego optymalnie (cachowanie pewnych wyników pośrednich), ale może nie trzeba będzie liczyć optymalnie.

Mikkaelo
Posty: 33
Rejestracja: 02 sie 2011 16:13
Wersja środowiska: LabVIEW 8.5

Re: rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: Mikkaelo » 01 wrz 2011 20:54

Zapisałem równania do postaci którą podałeś wcześniej, nie rozpisałem wszystkich równań opisujących dynamikę lin ale już..wygląda to przerażająco.. :) Rozpisanie prawych stron równań do metody R-K będzie wymagało sporo zabawy...
Załączniki
równania dy.doc
(154 KiB) Pobrany 213 razy

Awatar użytkownika
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

rozwiązywanie równań różniczkowych w czasie rzeczywistym

Post autor: vugie » 02 wrz 2011 09:54

Robisz błędy rachunkowe - znak w 2 równaniu, w 3 powinna pojawić się druga pochodna V10 (czyli trzeba zamienić je na 2), mnożenie stałej przez s powinno ją chyba likwidować w dziedzinie czasu (nie pamiętam jak powinno się to interpretować)... tylko pobieżnie sprawdziłem

ODPOWIEDZ