synchronizacja timed loop

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.

synchronizacja timed loop

Postprzez mikema72 » 04 lut 2010 23:26

Mam pytanie jak to zsynchronizować?
timed.jpg

A dokładniej... W górnej pętli jest zawarty pomiar kartą z większą prędkością niż w dolnej. Tzn jak zrobić żeby nie tyle były cały czas zsynchronizowane ale wystartowały idealnie razem a potem już "żyły własnym życiem" czyli górna pętla wykonuje się szybciej niż dolna. Proszę o wszelkie pomysły. Niestety pętle muszą być w osobnych wątkach...
mikema72
 
Posty: 42
Dołączył(a): 09 sty 2006 01:00
Lokalizacja: Gliwice
Pochwały: 2
Wersja środowiska: LabVIEW 8.6

synchronizacja timed loop

Postprzez bogdani » 05 lut 2010 09:47

Witaj

Jest przykład razem z LV

C:\Program Files\National Instruments\LabVIEW 2009\examples\general\timedloop.llb\Synchronizing the start of timed loops.vi

bogdani
Certified LabVIEW Developer, Certified Professional Instructor, LabVIEW Champion
Polskie Centrum LabVIEW - www.labview.pl
Avatar użytkownika
bogdani
Administrator
 
Posty: 1048
Dołączył(a): 30 lip 2003 00:00
Lokalizacja: Ruda Śląska
Pochwały: 14
Wersja środowiska: LabVIEW 2010

Re: synchronizacja timed loop

Postprzez mikema72 » 05 lut 2010 11:09

Dzięki za odpowiedź. Widziałem ten przykład ale wydawało mi się że on synchronizuje start cały czas tzn. druga pętla czeka na pierwszą ale po przećwiczeniu na "goło" tzn tylko przykład wszystko działa OK. Mam nadzieję że po zaimplementowaniu tego sposobu do mojego przykładu też wszystko zadziała. Będę próbował. Dziękuję
mikema72
 
Posty: 42
Dołączył(a): 09 sty 2006 01:00
Lokalizacja: Gliwice
Pochwały: 2
Wersja środowiska: LabVIEW 8.6

Re: synchronizacja timed loop

Postprzez mikema72 » 11 lut 2010 13:48

Ponawiam moją prośbę. Siedzę już parę dni i nie mam pojęcia jak to zastosować do mojego przykładu. Zawsze tutaj dostałem jakąś odpowiedź więc piszę... Chciałem zsynchronizować dwie osobne pętle (tylko ich czas startu). Ten czas powinien być zastosowany tylko raz przy pierwszym wykonaniu obu pętli a następnie synchronizacja powinna być zakończona (ze względu na różnice w działaniu urządzeń - karty AC i kamery Firewire). Dodałem przykład w którym zawarłem małą symulację pracy urządzeń. Oba urządzenia działają standardowo w trybie "podglądu" (tryb offline- bez synchronizacji ) a po naciśnięciu przycisku pomiar włącza się startowa synchronizacja i następnie po pierwszym przejściu pętli kamera wyłącza (kamera wykonuje się szybciej!). Zależy mi najbardziej na identycznym, zsynchronizowanym starcie obu pętli. Proszę o pomoc bo już nie mam pojęcia jak do tego podejść. Skończyły mi się pomysły... Pracuję na wersji 8.6 ale przykład jest w wersji niższej
Synchronizing the start.vi
(205.06 KiB) Pobrane 26 razy
mikema72
 
Posty: 42
Dołączył(a): 09 sty 2006 01:00
Lokalizacja: Gliwice
Pochwały: 2
Wersja środowiska: LabVIEW 8.6

Re: synchronizacja timed loop

Postprzez mikema72 » 11 lut 2010 23:31

Nikt nie ma pomysłu? A może jakieś inne rozwiązanie żeby wystartować razem dwie pętle? :( :-\
mikema72
 
Posty: 42
Dołączył(a): 09 sty 2006 01:00
Lokalizacja: Gliwice
Pochwały: 2
Wersja środowiska: LabVIEW 8.6

synchronizacja timed loop

Postprzez bogdani » 12 lut 2010 00:52

Wyjaśnij czemu te pętle są w innych osobnych pętlach ?

Trzeba to dobrze zrozumieć i ogarnąć żeby coś sensownego zaproponować.
Certified LabVIEW Developer, Certified Professional Instructor, LabVIEW Champion
Polskie Centrum LabVIEW - www.labview.pl
Avatar użytkownika
bogdani
Administrator
 
Posty: 1048
Dołączył(a): 30 lip 2003 00:00
Lokalizacja: Ruda Śląska
Pochwały: 14
Wersja środowiska: LabVIEW 2010

Re: synchronizacja timed loop

Postprzez mikema72 » 12 lut 2010 10:25

To może upraszczając. Jak zrobić wspólny start dwóch pętli timed loop działających w osobnych wątkach (zwykle niezależnie od siebie). Ten wspólny start jest tylko wtedy kiedy nacisnę przycisk POMIAR i jest on tylko na pierwsze (jednorazowe) wykonanie obu pętli. Narzucone jest to tym że karta (urządzenie 1) wykonuje tą pętlę (timed loop) tylko 1 raz, za to kamera (urządzenie 2) wykonuje pętlę kilkaset razy tzn. tyle ile jest rejestrowanych klatek). Zwykle działania obu pętli w trakcie pomiaru trwają mniej więcej tyle samo (tzn czas 1 raz karta = np. 100 razy kamera) ale w trybie podglądu już nie. W trybie tzw. "Live mode" (u mnie podgląd) kamery, pętla timed loop kamery nie wykonuje się w ogóle, za to pętla karty wykonuje się raz na 1sek. Trochę to zawiłe ale ten układ diagramu niestety już musi zostać (trochę narzucone z "góry"). Wspólny ma być jedynie start przy pomiarze! I z tym mam problem. Może to załatwić zwykłymi pętlami while i jakąś inną synchronizacją (saemaforami czy occurance) ale nie wiem jak? Pomocy...
mikema72
 
Posty: 42
Dołączył(a): 09 sty 2006 01:00
Lokalizacja: Gliwice
Pochwały: 2
Wersja środowiska: LabVIEW 8.6

Re: synchronizacja timed loop

Postprzez mikema72 » 14 lut 2010 16:42

Widzę że chyba duży problem lub weekend lub nikomu się nie chce pomóc... Mija kolejny dzień i nie mogę sobie z tym poradzić. Może już bardzo upraszczając sprawę jak wystartować dwie pętle przedstawione na rysunku w pierwszej wiadomości ale TYLKO WYSTARTOWAĆ RAZEM a potem niech już działają każda wg swojego timingu?
mikema72
 
Posty: 42
Dołączył(a): 09 sty 2006 01:00
Lokalizacja: Gliwice
Pochwały: 2
Wersja środowiska: LabVIEW 8.6

Re: synchronizacja timed loop

Postprzez smiga » 14 lut 2010 22:30

Nie wiem czemu pętla "tajmowana" jest w pętli while ... ale pewnie masz jakiś powód. Nie wiem też, która z nich ze swoją "parą" ma być wystartowana razem.

Rendezvous jest całkiem eleganckie:

A najprostszy sposób wystartowania dwóch pętli masz na dole:


Autor postu otrzymał pochwałę
Załączniki
spotkanie.jpg
petla.jpg
petla.jpg (9.21 KiB) Przeglądane 252 razy
Arkadiusz Śmigielski
Podążaj za marzeniami
...
www.optinav.pl
...
Avatar użytkownika
smiga
 
Posty: 167
Dołączył(a): 04 paź 2009 12:41
Lokalizacja: Słupsk ... często Warszawa
Pochwały: 24
Wersja środowiska: LabVIEW 2010

Re: synchronizacja timed loop

Postprzez mikema72 » 15 lut 2010 00:19

Właśnie od popołudnia siedzę i nad tym myślę. Randevous to coś dla mojego rozwiązania. Pomogło. Dzięki wielkie za pomoc.
mikema72
 
Posty: 42
Dołączył(a): 09 sty 2006 01:00
Lokalizacja: Gliwice
Pochwały: 2
Wersja środowiska: LabVIEW 8.6

Re: synchronizacja timed loop

Postprzez bogdani » 15 lut 2010 23:29

Można to jeszcze zrobić jak poniżej

SyncStart_Timed_Loop.png


ale skoro już ci działa :-)

Ps. Jeszcze taka drobna uwaga. Jak już musisz coś takiego robić w ten sposób to proponuje nie używać Property Noda do zmiany i odczytu wartości - lepiej już użyć zmiennej lokalnej - ma wyższy priorytet.

bogdani
Certified LabVIEW Developer, Certified Professional Instructor, LabVIEW Champion
Polskie Centrum LabVIEW - www.labview.pl
Avatar użytkownika
bogdani
Administrator
 
Posty: 1048
Dołączył(a): 30 lip 2003 00:00
Lokalizacja: Ruda Śląska
Pochwały: 14
Wersja środowiska: LabVIEW 2010


Powrót do Budowa struktury aplikacji

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość