Strona 1 z 1

Problem z maszyną stanów w szablonie Producer/Consumer

: 17 lis 2014 23:29
autor: czaro05
Witam,
jestem początkującym użytkownikiem Labview. Mam stworzyć program symulujący drukowanie. Chcę, żeby to działało tak, że po wybraniu liczby stron i jakości i zatwierdzeniu ich przyciskiem drukuj program wysłał do kolejki informację o ww, a następnie, żeby Consumer (maszyna stanu - czeka; przygotowuje do "drukowania"; "drukuje" - wyświetla numer strony w określonym tempie) "drukował". Program na razie nie jest gotowy, ale czy ktoś mógłby mi powiedzieć dlaczego maszyna stanu nie zawsze wraca do stanu Waiting (świeci się inna dioda) w przypadku braku oczekujących poleceń drukowania? Proszę szybko klikać przycisk drukuj, aby zdążyć dodać polecenia "drukowania". Przepraszam jeśli źle wybrałem dział.
Pozdrawiam

Problem z maszyną stanów w szablonie Producer/Consumer

: 18 lis 2014 22:17
autor: aaddaas
Cześć!
Odnosząc się do Twojego problemu: Masz przede wszystkim źle skonstruowaną strukturę w pętli consumer. Za każdym obiegiem pobierasz jeden "plik" z kolejki, czyli na inicjalizację odpada Ci jeden plik, na drukowanie trzeci, na czekanie czwarty, na inicjalizację piąty i tak w koło macieju. Zatem to, czy po skończeniu świeci się inna dioda niż drukowanie, to już zwykły przypadek;) Przyglądnij się jak jest skonstruowana struktura P-C w templejtach. W razie kolejnych pytań - pisz;)

Re: Problem z maszyną stanów w szablonie Producer/Consumer

: 18 lis 2014 22:36
autor: J.Sz
Dlaczego nie działa:
  1. 1 Pętla się nie kręci, bo masz ustawiony nieskończony timeout w dequeue element.
    2 Jak się coś pojawi dane idą w ...., bo jesteś w stanie waiting, a tam do kabla z danymi z klastra nie masz nic podpiętego.
    3 Nr stron się nie zmieniają, bo dałeś numeric 2 poza pętle, czyli dostaniesz tylko ostatnią wartość.
    4 czytałeś dane z kolejki a potem sprawdzałeś czy coś w niej jest
w załączniku masz to trochę poprawione. plik lv 2012
Hinty:

Używaj narzędzi debugowych jak żarówka (highlight execution).

Nie używaj 2 stopów w jednym vi zrób sobie np zmienną lokalną lub property node zwracający value do drugiej petli, możesz też dodać wartość stop do klastra z danymi

Podpisuj kontrolki w klastrze (prawy przycisk myszki label) w sumie to podpisuj wszystko, nie zostawiaj domyślnych nazw.

Z enumów zrób sobie type definition, jak będziesz miał coś zmienić/ dodać to nie będziesz musiał wszystkiego przeklikiwać.

Problem z maszyną stanów w szablonie Producer/Consumer

: 19 lis 2014 00:27
autor: czaro05
aaddaas, J.Sz,
Bardzo dziękuję za wyjaśnienia i rady oraz J.Sz, za poprawnie wykonany program.
Przeanalizowałem i rozumiem dlaczego nie działało i dlaczego działa. Do Hintów się zastosuję.
Pozdrawiam :)

Re: Problem z maszyną stanów w szablonie Producer/Consumer

: 19 lis 2014 23:46
autor: PawelR
Jeszcze jedna wskazówka: pilnuj porządku w kodzie! W LabVIEW to bardzo ważne, bo ułatwia (w skrajnym wypadku: umożliwia) ogarnięcie, co program robi.
Staraj się trzymać kolejność "z lewej na prawą" - w jednym miejscu dałeś z lewej strony wyświetlacz od bloczka umieszczonego z prawej strony (chyba klaster "Elements").
Unikaj długich kabli i raczej ich nie załamuj. Często czyść je (poleceniem "Clean up wire").
Pomocna bywa miotełka czyszcząca cały kod (lub zaznaczony fragment), ale po jej użyciu możesz nie poznać swojego programu :) Ja wolę sprzątać ręcznie, ale to tylko moje (nie najlepsze) przyzwyczajenie. Zresztą - zawsze jest ctrl+Z :)
Nie rozciągaj schematu nadmiernie! Maszyna stanów (czyli "konsument") bardzo to ułatwia. Ogólnie kod powinien mieścić się na ekranie. Jak Ci się coś nie mieści, zamknij w subVI'u.

I na koniec: wyobraź sobie, że wracasz do pisania programu po dwutygodniowym urlopie albo po pół roku, bo "coś źle działa". Nad pogmatwanym kodem możesz spędzić dobrą chwilę przypominając sobie, "co do czego".

Żeby nie być gołosłownym, posiedziałem chwilkę nad Twoim kodem i trochę uprzątnąłem. Dużo jeszcze można poprawić, ale już powinieneś widzieć różnicę.

Pozdrawiam
Paweł

Problem z maszyną stanów w szablonie Producer/Consumer

: 20 lis 2014 17:26
autor: czaro05
Dzięki za wskazówkę. Nie mogę otworzyć programu, masz nowszą wersję.
Pozdrawiam

Re: Problem z maszyną stanów w szablonie Producer/Consumer

: 20 lis 2014 17:53
autor: semper fidelis
Plik PawelR zapisany do 2012.