Producent/Konsument - ciężkie początki :)

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

Producent/Konsument - ciężkie początki :)

Post autor: Agrest »

Witam, zmienił się trochę temat moich pytań, więc zakładam nowy wątek:
Pitol pisze:(a w tym przypadku przydałaby się jakaś architektura typu Producer-Consument...)
Pewnie masz rację, bo już przestaję panować nad kodem. Czas na pierwszą w życiu architekturę Producent-Konsument. Poczytałem "Chruściela", ale nic mi nie rozjaśnił. Lubię tą książkę, ale rozdział Producent-Konsument jest napisany tak, jak kiedyś pisał książki J. Doliński. Jak człowiek nie znał tematu przed kupieniem książki, to się w trakcie czytania nie dowiedział, bo nie rozumiał tego języka. Ale do rzeczy:

Na wejściu do Obtain Queue może być dowolny typ danych, ale tylko jeden? Na moim panelu użytkownika jest tablica 2x7 i kilka przycisków typu boolean. Jak do Obtain Queue podłączę pustą tablicę 2x7, to już nie będę mógł podłączyć boolean do Enqueue Element. I odwrotnie - jak na początku dam boolean, to później nie podłączę array. Jak to ugryźć na początek?

PozdrA


P.S.
A może przy pomocy kolejki obsługiwać tylko przyciski boolean, a tablicę obsłużyć tradycyjnie w strukturze Event? Wtedy wykres z tej tablicy bym narysował w całości w pętli producenta. Dobry pomysł przed pójściem spać?

P.S. 2
A może być więcej pętli konsumenta, kręcących się z różnymi prędkościami? Jak wtedy zdejmować zadania z kolejki?
Załączniki
Panel.png
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Producent/Konsument - ciężkie początki :)

Post autor: jogurt_owocowy »

Jak do Obtain Queue podłączę pustą tablicę 2x7, to już nie będę mógł podłączyć boolean do Enqueue Element. I odwrotnie - jak na początku dam boolean, to później nie podłączę array. Jak to ugryźć na początek?
Możesz tablicę i przyciski wziąć po prostu w klaster albo możesz zrobić kolejkę przenoszącą varianty.
Variant to specjalny typ danych, który może, niejako, zawierać w sobie dowolny inny typ. Za pomocą funkcji To Variant zamieniasz dowolny typ danych na variant, wysyłasz kolejką, a w miejscu odbioru konwertujesz variant z powrotem do pierwotnej postaci za pomocą funkcji Variant To Data.
A może przy pomocy kolejki obsługiwać tylko przyciski boolean, a tablicę obsłużyć tradycyjnie w strukturze Event? Wtedy wykres z tej tablicy bym narysował w całości w pętli producenta. Dobry pomysł przed pójściem spać?
Niedobry. Albo po bożemu wysyłasz dane do konsumenta, albo uznajesz, że przetwarzanie jest na tyle szybkie, że w ogóle konsumenta nie potrzebujesz i robisz wszystko w wątku z eventem.
A może być więcej pętli konsumenta, kręcących się z różnymi prędkościami? Jak wtedy zdejmować zadania z kolejki?
Może być. Do każdego konsumenta podłączasz referencję kolejki, a w środku wyjmujesz z niej elementy dokładnie tak samo, jak w przypadku pojedynczego konsumenta. Dalej wszystko już zależy od tego, co dokładnie te wątki miałyby robić.
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

Re: Producent/Konsument - ciężkie początki :)

Post autor: Agrest »

Na razie rozumiem i dziękuję jogurt_owocowy. Teraz zróbmy krok dalej. W tym wątku Śmiga (pozdrawiam Słupsk) załączył mi wykres zmieniany myszka.vi a w nim struktura event obsługuje zdarzenia "Pane": Mouse Down i "Pane": Mouse Up. Jak te zdarzenia wsadzić do kolejki i rozlokować w pętlach?

PozdrA
Awatar użytkownika
smiga
Administrator
Posty: 817
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Producent/Konsument - ciężkie początki :)

Post autor: smiga »

:) Dziękuję za pozdrowienia.

Nie wiem czy o to Ci chodziło, ale zerknij na załączony plik ... tablica wejściowa i wykres przestały być aktualizowane przez zmienne lokalne - teraz zostały wrzucone do kolejki

łączę pozdrawiania dla Szczecina ... i oczywiście Krakowa, bo też zagościł w wątku ;)
Załączniki
wykres zmieniany myszka.vi
(18.48 KiB) Pobrany 314 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

Re: Producent/Konsument - ciężkie początki :)

Post autor: Agrest »

Dziękuje Śmiga :)
Nie chcę wyjść na niewdzięcznika, ale w twoim przykładzie całe liczenie "Pane": Mouse up dzieje się w Evencie, zamiast w Konsumencie. Czyli jak napisał jogurt_owocowy "nie po bożemu". Ja mam w swoim "Pane": Mouse up trochę więcej liczenia, bo sprawdzam warunek żeby mi się wykres "nie cofał" jak go myszka "cofnie", poza tym przeliczam współrzędne na osi X, bo Array pracuje na czasie relatywnym (tak wygodniej wpisywać operatorowi), a XY Graph na absolutnym (czas każdej współrzędnej musi być podany od początku wykresu). I to wszystko w strukturze Event, która ma tylko przechwytywać zdarzenia i przesyłać je do Konsumenta.
Przychodzi mi do głowy tylko wstawić drugą strukturę Event do Konsumenta i właśnie tam obsłużyć zdarzenie "Pane": Mouse up.
Nie rozumiem jeszcze kilku rzeczy, np. po co pociągnąłeś cluster sprzed Obtain Queue do Bundle w środku Eventa. Ale generalnie wiem jak ma to działać i w którą stronę mam sterować, a właśnie po to jest to Forum :) A teraz do dzieła, do świtu jeszcze trochę czasu.
PozdrA
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Producent/Konsument - ciężkie początki :)

Post autor: jogurt_owocowy »

Nie chcę wyjść na niewdzięcznika, ale w twoim przykładzie całe liczenie "Pane": Mouse up dzieje się w Evencie, zamiast w Konsumencie. Czyli jak napisał jogurt_owocowy "nie po bożemu".
Trochę się zrozumieliśmy. W pierwszym poście napisałeś tak:
Jak do Obtain Queue podłączę pustą tablicę 2x7, to już nie będę mógł podłączyć boolean do Enqueue Element. I odwrotnie - jak na początku dam boolean, to później nie podłączę array.
(...)
A może przy pomocy kolejki obsługiwać tylko przyciski boolean, a tablicę obsłużyć tradycyjnie w strukturze Event?
Nie dołączyłeś VIaja, więc opierając się tylko na kontekście wypowiedzi zrozumiałem to tak, że chcesz rozbijać przetwarzanie tylko z tego powodu, że nie umiesz przesłać kolejką jednocześnie tablicy i wartości boolean.
Przykład od smiga jest dobry (z wyjątkiem tego, że zamiast eventów "Pane": Mouse Down/Up lepiej użyć "XY Graph": Mouse Down/Up). Producent ma przesłać do konsumenta pewną logiczną paczkę danych i tutaj tak właśnie jest. Natomiast jest oczywiste, że paczka musi być najpierw wyprodukowana, a od tego jest producent właśnie.
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

Re: Producent/Konsument - ciężkie początki :)

Post autor: Agrest »

W takim razie jeszcze nie czuję o co naprawdę chodzi w tej architekturze. Mam z 10 pytań, ale najpierw przejrzę więcej przykładów, to mi się niektóre sprawy same rozjaśnią. Póki co, dziękuję Kolegom za drogowskazy.

Smiga, w pierwszej wersji wpisywałeś dane do Array za pomocą Local Variable, a teraz przez Property. Jaka jest różnica? Tak musi być przy Producent/Konsument?

PozdrA
oczekp
Posty: 161
Rejestracja: 22 lis 2009 15:12
Wersja środowiska: LabVIEW 2010

Re: Producent/Konsument - ciężkie początki :)

Post autor: oczekp »

zerknij sobie na tą stronkę, fajnie jest wszystko opisane, tylko, że po angielsku:
http://expressionflow.com/2007/10/01/la ... hitecture/
Awatar użytkownika
smiga
Administrator
Posty: 817
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Producent/Konsument - ciężkie początki :)

Post autor: smiga »

Agrest pisze:"...Local Variable, a ... Property. Jaka jest różnica?"
Wątki traktujące o temacie:
http://www.labview.pl/viewtopic.php?f=11&t=2695

http://labview.pl/viewtopic.php?f=12&t= ... ocal#p2396

... i oczywiście nie "musi być przy Producent/Konsument" - Ty decydujesz :)
Agrest pisze:Dziękuje Śmiga :)
... po co pociągnąłeś cluster sprzed Obtain Queue do Bundle w środku Eventa.
Też nie jest to konieczne - cel edukacyjny, czyli chciałem pokazać zależność.

W załączniku kod bez powyższego "celu edukacyjnego" , z poprawionym event'em "XY Graph": Mouse Down/Up (co słusznie zauważył Kolega Jogurt_owocowy) i z notyfikatorami zamiast kolejek ( kolejny cel edukacyjny :) ) + dodatkowa pętla, w której coś się jeszcze dodatkowo liczy ... żeby podkreślić, że konsument liczyć potrafi i powinien :)

Ważne jest to zdanie:
jogurt_owocowy pisze:Producent ma przesłać do konsumenta pewną logiczną paczkę danych ... Natomiast jest oczywiste, że paczka musi być najpierw wyprodukowana, a od tego jest producent właśnie.
Załączniki
wykres zmieniany myszka1.vi
(22.86 KiB) Pobrany 348 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
ODPOWIEDZ