synchronizacja timed loop

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

synchronizacja timed loop

Post autor: mikema72 »

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...
CLAD, LabVIEW 6.0 -> LabVIEW 2013
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

synchronizacja timed loop

Post autor: bogdani »

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
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: synchronizacja timed loop

Post autor: mikema72 »

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ę
CLAD, LabVIEW 6.0 -> LabVIEW 2013
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: synchronizacja timed loop

Post autor: mikema72 »

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) Pobrany 381 razy
CLAD, LabVIEW 6.0 -> LabVIEW 2013
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: synchronizacja timed loop

Post autor: mikema72 »

Nikt nie ma pomysłu? A może jakieś inne rozwiązanie żeby wystartować razem dwie pętle? :( :-\
CLAD, LabVIEW 6.0 -> LabVIEW 2013
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

synchronizacja timed loop

Post autor: bogdani »

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

Trzeba to dobrze zrozumieć i ogarnąć żeby coś sensownego zaproponować.
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: synchronizacja timed loop

Post autor: mikema72 »

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...
CLAD, LabVIEW 6.0 -> LabVIEW 2013
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: synchronizacja timed loop

Post autor: mikema72 »

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?
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
smiga
Administrator
Posty: 850
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: synchronizacja timed loop

Post autor: smiga »

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:
Załączniki
spotkanie.jpg
petla.jpg
petla.jpg (9.21 KiB) Przejrzano 10568 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: synchronizacja timed loop

Post autor: mikema72 »

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.
CLAD, LabVIEW 6.0 -> LabVIEW 2013
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

Re: synchronizacja timed loop

Post autor: bogdani »

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
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
ODPOWIEDZ