Strona 1 z 2

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

: 24 sie 2011 17:31
autor: Mikkaelo
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.

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

: 25 sie 2011 23:10
autor: PiDi
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.

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

: 25 sie 2011 23:27
autor: Mikkaelo
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)

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

: 26 sie 2011 12:23
autor: smiga
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.

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

: 28 sie 2011 19:07
autor: wino
Tu jakieś takie coś znalazłem

KLIK

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

: 29 sie 2011 10:40
autor: vugie
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.

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

: 30 sie 2011 01:28
autor: czepek
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.

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

: 31 sie 2011 19:12
autor: Mikkaelo
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.

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

: 01 wrz 2011 10:07
autor: vugie
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.

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

: 01 wrz 2011 11:54
autor: Mikkaelo
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

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

: 01 wrz 2011 12:31
autor: vugie
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!

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

: 01 wrz 2011 15:17
autor: Mikkaelo
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

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

: 01 wrz 2011 16:07
autor: vugie
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.

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

: 01 wrz 2011 20:54
autor: Mikkaelo
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...

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

: 02 wrz 2011 09:54
autor: vugie
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