Minutnik

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
Soldier13
Posty: 15
Rejestracja: 13 lut 2013 07:44
Wersja środowiska: LabVIEW 2011
Lokalizacja: Czajków k.Kalisz

Minutnik

Post autor: Soldier13 »

ustawiłem plik wav w tym samym folderze co plik minutnik.vi

a co do tego uruchamiania tej muzyki to pojęcia nie mam

może weź mi w moim programie tak pozmieniaj abym zobaczył na własne oczy jak to się robi :)

pokaż najprostszą opcję, ew. 2 :)
ale jedna najprostsza wystarczy :)

zrobiłem sobie też taki cwany wyświetlacz z diod który odlicza co 1/4czasu i zapala się kolejna dioda :)
minutnik.vi
aktualny program :)
(14.25 KiB) Pobrany 456 razy
Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Re: Minutnik

Post autor: Góras »

Proszę bardzo :)

Nazwę musisz wpisać własną i powinno działać.
Załączniki
minutnik.vi
(9.45 KiB) Pobrany 412 razy
Awatar użytkownika
Soldier13
Posty: 15
Rejestracja: 13 lut 2013 07:44
Wersja środowiska: LabVIEW 2011
Lokalizacja: Czajków k.Kalisz

Minutnik

Post autor: Soldier13 »

Nie wiem czemu ale nie działa

albo może się od razu wyłącza?
grzebie grzebie i nic :(

plik wav jest w tym samym folderze co plik VI i nazywa się dawido.wav


i nie działa :(
albo nie działa bo zaczyna liczyć od nowa i się nie zdąży włączyć?
Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Re: Minutnik

Post autor: Góras »

Zniknęła mi gdzieś pętla While i poprawiłam Twoje diody :)

Działa?
Załączniki
minutnik.vi
(9.82 KiB) Pobrany 419 razy
Awatar użytkownika
Soldier13
Posty: 15
Rejestracja: 13 lut 2013 07:44
Wersja środowiska: LabVIEW 2011
Lokalizacja: Czajków k.Kalisz

Minutnik

Post autor: Soldier13 »

działa! działa! działa! :)
dziękuje!
Zdradzisz mi jak się ten sposób nazywa że to są jakby 2oddzielne programy i połączone działają ze sobą? poczytam sobie na ten temat :)
już jest prawie to o co mi chodziło :)
tylko chciałbym jeszcze żeby ten mój minutnik włączać i wyłączać przyciskiem, zrobiłem tak na szybko(łopatologicznie) działa co prawda włączanie, ale wyłączanie muzyki już nie :(


a ten mój knob miło by było żeby jak ustawie na 2minuty i zacznie już grać to gdy przełączę na 4minuty to przestanie grać i poczeka do 4minut
ale nie wiem czy z tym knobem to nie za dużo sobie utrudnię i już w ogóle nie zrozumiem tego programu :(

wrzucam z przyciskiem włącz/wyłącz
minutnik.vi
(14.58 KiB) Pobrany 422 razy
Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Minutnik

Post autor: Góras »

To jest struktura sekwencji, chociaż to nie jej zawdzięczasz to, że można kilka podprogramów uruchomić w jednym programie jednocześnie (równolegle lub jeden po drugim) - jest to raczej zasługa twórców LabVIEW - możesz o nich poczytać ;)

O strukturze sekwencji też możesz poczytać, chociaż będziesz musiał z niej zrezygnować, jeżeli minutnik ma mieć opcję włącz/wyłącz. No i teraz pytanie - wyłączanie działa, ale co miałoby się stać po ponownym włączeniu? Minutnik ma liczyć od zera czy kontynuować i co miałoby w takim razie zatrzymać program? Doliczenie do końca czy inny przycisk? Z zatrzymaniem odtwarzania dźwięku nie będzie problemu.

No i jak już będziesz czytał to poczytaj o maszynie stanów - będziesz mógł sobie z nią utrudniać do woli :)
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Minutnik

Post autor: smiga »

Ponieważ jestem totalnym antyfanem struktury filmowej (czytaj sekwencyjnej), więc pozwoliłem sobie wtrącić się w temat.
Dużo bardziej elegancko, bo bez dodatkowych "klatek filmu", a co najważniejsze znacznie precyzyjniej, jeżeli chodzi nam o odliczanie czasu, było by, gdybyśmy podłączyli wejście klastra błędu Play Sound File.vi do tunelu wychodzącego z pierwszej pętli (w środku pętli do tego tunelu podłączona stała klastra błędu) .
W wersji z "klatkami filmu", zanim zagra dźwięk, po odliczeniu czasu, czyli opuszczeniu pierwszej pętli, musi wykonać się zbudowanie ścieżki do pliki z dźwiękiem, czyli 3 wcześniejsze bloczki, co zajmuje dodatkowy ułamek sekundy.
W wersji z podłączonym klastrem błędu do wyjścia z pierwszej pętli, zbudowanie tej ścieżki wykona się w tzw. międzyczasie.
Żeby jeszcze bardziej precyzyjnie odliczyć czas odliczania pierwszej pętli, zamieniłbym zegarek Wait na Wait Until Next ..., co da nam gwarancję wykonania się każdego cyklu pętli w 1000ms (w wersji z Wait każda iteracja wykonuje się na pewno dłużej niż 1000ms ... 1000ms + czas na wykonanie operacji w środku pętli, czyli dodawanie, mnożenie, porównanie itd.). Oczywiście możemy jeszcze bardziej zwiększyć precyzję odliczania czasu kożystając z odliczania tick'ów (Tick Count) lub Timed Loop.

Dodam jeszcze, że takie wstawienie przycisku włącz/wyłącz nie spełni swojego zadania - w opcji wyłącz liczy czas "w kółko", a w opcji włącz zagra po ok 1s. Jeżeli chcesz zachować konwencję szeregowego wykonywania się kroków programu, dodaj jeszcze jedną pętlę wait (pierwszą), która będzie tylko czekała na przycisk start, i podłącz ją do drugiej (teraz pierwszej).

Rysunek poniżej pokazuje powyższe zmiany. Błąd opóźnienia startu odliczania czasu jest w tym przypadku max. 10ms (zegarek w pierwszej pętli).
Załączniki
minutnik.png
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Minutnik

Post autor: Góras »

Śmiga pozwoliłam sobie sprawdzić ile trwa ów dodatkowy ułamek sekundy - dokładnie 0,001046 ms, ale mam dosyć szybki komputer ;)

Co do dodatkowej pętli z przyciskiem Włącz/Wyłącz - włączenie może zadziała, ale jak miałoby zadziałać wyłączenie? Upierałabym się nadal przy maszynie stanów.
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Minutnik

Post autor: smiga »

:-)
Absolutnie zgadzam się, że zmiana architektury jest konieczna do zapewnienia pełnej funkcjonalności - ja tylko komentowałem istniejącą.
Wspomniałem też, że sugerowana przez mnie zmiana poprawi dokładność odmierzania czasu o ułamek sekundy ... i właśnie taki ułamek Ci wyszedł Góras :-)
Co jednak będzie gdy trochę więcej rzeczy będzie się musiało wykonać przed podobną funkcją, jak puszczanie "muzyczki", w przyszłym kodzie, a podejdziemy w ten sam sposób ...

Mnie chodzi o zasady i dobre nawyki.
Struktura "filmowa" powinna być usunięta z LabVIEW, bo uczy złych nawyków... no może niech zostanie głęboko ukryta dla tych, którzy używają jej w ostateczności i wiedzą dlaczego.
Jedyne wytłumaczenie jej stosowania, to wstępna inicjalizacja właściwości kontrolek itp. Może też przydać się czasami przy FPGA, choć mam nadzieję, że ktoś w NI kiedyś wpadnie na lepszy pomysł. Flat Sequence Structure bardzo zaśmieca kod i wcale nie poprawia jego logicznej analizy (moim zdaniem wręcz przeciwnie ... i nie rozumiem dlaczego większość wykładowców uczelnianych tego uczy, co widać po kodach studentów, bo sami na pewno na to nie wpadają), a już totalną porażką jest Stacked Sequence Structure - analizowanie kodu z jego użyciem to czysta "przyjemność". Niech potwierdzeniem moich słów będzie podejście NI w szkoleniach LabVIEW Core 1 i Core 2, gdzie wspomina się tylko o Flat Sequence Structure i to tylko na dwóch slajdach w 8 lekcji Core 1 (od razu pokazując w kolejnym slajdzie najlepsze podejście bez struktury, czyli z podpiętymi klastrami błędów) oraz w 1 slajdzie 7 lekcji Core 2 (jako przykład złego programowania połączonego jeszcze ze zmiennymi lokalnymi) - wiem bo sam prowadziłem.

W 99,99% ... jeżeli nie w 100% przypadków, klaster błędu zapewni odpowiedni data flow. Widziałem bardzo fajnie działające kody, bardzo dobrych programistów, którzy nadużywali struktury filmowej, zapominając o klastrze błędów i jego odpowiednim przekazywaniu z SubVI'a do SubVI'a, co przy wystąpieniu rzeczywistego błędu kończyło się tragicznie, czyli zmarnowanymi godzinami na szukanie miejsca gdzie naprawdę wystąpił błąd.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
Soldier13
Posty: 15
Rejestracja: 13 lut 2013 07:44
Wersja środowiska: LabVIEW 2011
Lokalizacja: Czajków k.Kalisz

Minutnik

Post autor: Soldier13 »

Jeśli chodzi o to włąćz/wył to miałem na myśli że zacznie odliczać gdy się kliknie wł a skończy gdy wył. Następne włączenie nastąpi po ponownym przycisku włącz. Knob zaś niezależnie można ustawiać, a sczytuje wartość gdy jest wł. oczywiście :)


dzięki smiga że zainteresowałeś się moim tematem :)
chciałem zrobić tak jak Ty radziłeś ale przyznam szczerze że pierwszy raz w życiu widzę te bloczki w tej pętli właściwiej i nie wiem jak one się nazywają :(
zaznaczyłem strzałką na obrazku w załączniku :)
nie mogę ich dodać :(
jestem dopiero początkujący :(

a jeszcze jedno takie pytanie, czy ta linia przerywana ma jakieś znaczenie która jest wokół całego programu?
czy to tylko w Twoim LV 2012 tak wygląda?
minutnik.vi
(10.57 KiB) Pobrany 419 razy
Obrazek
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Minutnik

Post autor: smiga »

Soldier13 pisze:... pierwszy raz w życiu widzę te bloczki w tej pętli właściwiej i nie wiem jak one się nazywają :(
zaznaczyłem strzałką na obrazku w załączniku :)
nie mogę ich dodać :(
jestem dopiero początkujący :(
Kliknij prawym myszy na wejście klastra błędu Play Sound File.vi (po lewej na dole), a następnie Create/Constatnt
Soldier13 pisze: ...a jeszcze jedno takie pytanie, czy ta linia przerywana ma jakieś znaczenie która jest wokół całego programu?
czy to tylko w Twoim LV 2012 tak wygląda?
Ta linia pokazuje, że jest to tak zwany snippet - kliknij w menu Edit/Create VI snippet from selection ... oczywiście wcześniej zaznaczając jakiś kawałek kodu. Utworzy się plik png, który możesz przeciągnąć i wrzucić na diagram blokowy, dzięki czemu skopiuje się kod, a nie tylko obrazek. Podobnie, gdybyś miał LabVIEW2012, mógłbyś mój obrazek z forum zapisać sobie na dysku, a później wrzucić na diagram i mieć gotowy kod.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
Soldier13
Posty: 15
Rejestracja: 13 lut 2013 07:44
Wersja środowiska: LabVIEW 2011
Lokalizacja: Czajków k.Kalisz

Minutnik

Post autor: Soldier13 »

Działa :)
Coś czuję że ten snippet może mi się przydać.
Program labview za każdym razem mnie zaskakuje a jednocześnie przeraża ogromem ;)

przycisk włącz działa, ale nie działa wyłącz żeby zatrzymać muzykę :(
trzeba tym przyciskiem z górnego menu :(

da radę to jakoś zaradzić?
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Minutnik

Post autor: smiga »

Zerknij na załączony kod i pobaw się nim, pozmieniaj tak jak Ci pasuje. To jest architektura producent/konsument + event zrobiona z gotowca - klikasz w menu na File/New... a następnie From Template/Producer/Consumer Design Pattern (Events).
Wrzuciłem do środka kawałek Twojego kodu i dostosowałem kilka ustawień, żeby zadziałało. Nie gra muzyczki tylko zapala diodę, ale muzyczkę sam sobie dodasz bez problemu. Włącz sobie żarówkę i przeanalizuj jak działa taki kod.
Załączniki
minutnik-2.vi
v2011
(13.87 KiB) Pobrany 397 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
Soldier13
Posty: 15
Rejestracja: 13 lut 2013 07:44
Wersja środowiska: LabVIEW 2011
Lokalizacja: Czajków k.Kalisz

Minutnik

Post autor: Soldier13 »

jak dla mnie ten program to już wyższa technologia :)

nie da rady wyłączyć i włączyć tego stopera prościej? :)
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Minutnik

Post autor: smiga »

Na pewno da radę :-)
Najprościej to zamknij ten cały aktualny program w pętli While i zobacz jak wtedy działa.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
ODPOWIEDZ