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
Problem z maszyną stanów w szablonie Producer/Consumer
- Załączniki
-
- PKvidrukarka.vi
- (26.23 KiB) Pobrany 430 razy
Problem z maszyną stanów w szablonie Producer/Consumer
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;)
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
Dlaczego nie działa:
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ć.
- 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
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ć.
- Załączniki
-
- PKvidrukarka (1).vi
- (19.13 KiB) Pobrany 396 razy
Ja tu tylko wklejam linki ale i tak możesz kliknąć pochwal ;)
Problem z maszyną stanów w szablonie Producer/Consumer
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
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
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ł
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ł
- Załączniki
-
- PKvidrukarka_sprzatniete.vi
- (27.08 KiB) Pobrany 403 razy
Pomogłem? Kliknij "Pochwal"
Problem z maszyną stanów w szablonie Producer/Consumer
Dzięki za wskazówkę. Nie mogę otworzyć programu, masz nowszą wersję.
Pozdrawiam
Pozdrawiam
- semper fidelis
- Posty: 74
- Rejestracja: 28 paź 2014 20:45
- Wersja środowiska: LabVIEW 2013
Re: Problem z maszyną stanów w szablonie Producer/Consumer
Plik PawelR zapisany do 2012.
- Załączniki
-
- PKvidrukarka_sprzatniete.vi
- (18.88 KiB) Pobrany 381 razy
Gdy wszyscy wiedzą, że coś jest niemożliwe, przychodzi ktoś, kto o tym nie wie, i to robi...