Program do podnoszenia i obniżania temperatury

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Program do podnoszenia i obniżania temperatury

Post autor: smiga »

chyba nie moglem spać ... :)

Na dole Front Panelu'u jest Waveform Graph ... przykład, gdybyś potrzebował innego sposobu wyświetlania niż "na bieżąco"
Załączniki
przykłady.vi
(62.55 KiB) Pobrany 327 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
mareczek87
Posty: 17
Rejestracja: 04 maja 2010 00:02
Wersja środowiska: LabVIEW 8.5

Program do podnoszenia i obniżania temperatury

Post autor: mareczek87 »

Boski :)
Ale prosił bym o krótki opis jeżeli chce ci się, jak to działa ;)
Znaczy dlaczego tak zrobiłeś a nie inaczej, szczerze nie ogarniam trochę tego;/
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Program do podnoszenia i obniżania temperatury

Post autor: smiga »

Po kolei od lewej:
1) właściwość (Property Node) History Data służy do wyczyszczenia historii wykresu (tego górnego - Waveform Chart) ... dolny możesz wyczyścić podobnie

2) właściwość wskaźnika o nazwie Boolean (wskaźnik jest ukryty - możesz go znaleźć np. klikając 2 razy na jego ikonę na diagramie blokowym lub prawy myszy na wspomniane Property Node i Find/ Indicator) - Value ustawiam wstępnie na False ponieważ na True ustawiany jest na końcu programu. Wartość tego Indicatora przekazywana jest przez Local Variable do pętli dolnej (tej od wykresów) żeby ją na koniec zatrzymać.

3) 1 pętla While po prostu czeka tak długo aż naciśniesz "Rozpocznij proces" - kliknięcie na tą kontrolkę (True) zatrzyma pętlę i przekaże wartość true uruchamiając strukturę sekwencyjną, a w niej zapalając diodę, a także uruchamiając dolną pętlę od wykresów. Wypadało by jeszcze wstawić w tą pętlę jakieś opóźnienie czasowe (może być np. Wait=100ms) żeby nie zajmować całego czasu procesora (sorki za "zapomnienie" :) )

4) Przy wyjściu ze struktury sekwencyjnej (na końcu) wyłączamy dolną pętlę i gasimy diodę (Boolean i Property Node Value)

5) Dolna pętla pobiera dane przez Local Variable z Indicatora "Aktualna temperatura szyby" i wyrzuca na wykres. Opóźnienie tej pętli jest ustawione na tą samą wartość co opóźnienie pętli regulujących temperaturę (250ms) w celu ustawienia stałych "odcinków czasowych" osi x wykresu, tych samych co kroki zmiany temperatury. To niestety nie jest najbardziej profesjonalnie zrobione, ale jak widzisz przy opóźnieniach 1/4 s działa.
Precyzyjniej będzie gdy zamienisz wszystkie "zegarki" na Wait Until Next ms Multiple - daje to precyzyjniejszą kontrolę nad opóźnieniem każdej pętli. Teraz pętla wykonuje jakiś kod co zajmuje jakiś czas, następnie czeka 250ms i zaczyna nową iterację. Nie wiemy więc dokładnie ile czasu zabiera jedna iteracja pętli. Zastosowanie Wait Until Next ms Multiple spowoduje, że wykona się kod w pętli, a później pętla poczeka resztę brakującego do 250ms czasu. Każda iteracja trwać będzie więc 250ms.
Najbardziej profesjonalnie było by gdybyś zastosował strukturę producent-konsument z kolejką, gdzie pętla konsumenta (rysująca wykres) pobiera dane za każdym razem gdy pętla producenta (regulacja czy też próbkowanie temperatury) je aktualizuje / zmienia.... ale o tym poczytaj więcej bo nie chcę mieszać na razie Ci w głowie.

Wykresy rysowane są na dwa sposoby;
Waveform Chart (trzyma historię danych) rysowany jest przy każdej iteracji pętli dzięki temu, że w każdej iteracji dopisywana jest kolejna wartość do tablicy (Build Array).
Waveform Graph rysuje od razu cały wykres, więc należy mu podać komplet danych w postaci tablicy wyników, a tablica ta tworzona jest dzięki włączeniu indeksowania na wyjściu z pętli.

... mam nadzieję, że zrozumiale to napisałem i teraz wszystko jest dla Ciebie jasne - jeżeli nie pytaj :)
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
mareczek87
Posty: 17
Rejestracja: 04 maja 2010 00:02
Wersja środowiska: LabVIEW 8.5

Re: Program do podnoszenia i obniżania temperatury

Post autor: mareczek87 »

Nie mam dziś dużo czasu jutro o więcej zapytam. Ale chce tak "krok po kroku".
Zaczynam od tego:
Obrazek
To jest pętla while która mówi dopóki. I co program jak by zaczyna się w niej bo wykonuje się od lewej do prawej. I dopóki nie przełączymy przycisku który jest dołączony do "stopa" do sygnał będzie tam stał i nic nie robił bo nie ma co. Potem dopiero przejdzie dalej do sekwencji zaczynając liczyć i zapalając lampkę. Dobre rozumowanie?

Obrazek
I końcówka. Do przycisku jest dołączone True, dlaczego? Chodzi o to że jak kończy pętle to sekwencja staje się True i jak by załącza jeszcze raz przycisk wyłączając go? Tej drugiej części nie rozumiem, myślę że odnosi się do lampki? Dlaczego False i w ogóle co to za bloczek podpisane Value?


Kosmetyczna jeszcze zmiana, co zrobić, żeby nie musieć przed kolejnym uruchomieniem programu wyłączać przycisku, tylko żeby sam po skończeniu "restartował się"
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Program do podnoszenia i obniżania temperatury

Post autor: Pitol »

do tej pętelki z przyciskiem Włącz proces proponuję włożyć bloczek Wait z podpiętym choćby 10ms opóźnieniem, bo po co ta pętelka ma zarzynać 99% zasobów.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Program do podnoszenia i obniżania temperatury

Post autor: smiga »

mareczek87 pisze: To jest pętla while która mówi dopóki. I co program jak by zaczyna się w niej bo wykonuje się od lewej do prawej. I dopóki nie przełączymy przycisku który jest dołączony do "stopa" do sygnał będzie tam stał i nic nie robił bo nie ma co. Potem dopiero przejdzie dalej do sekwencji zaczynając liczyć i zapalając lampkę. Dobre rozumowanie?
Bardzo dobre :)
Dokładnie będzie wciąż wykonywał pętle While, a w niej czytał stan przycisku Stop. Wstaw tam opóźnienie Wait jak wcześniej pisałem.
mareczek87 pisze: I końcówka. Do przycisku jest dołączone True, dlaczego? Chodzi o to że jak kończy pętle to sekwencja staje się True i jak by załącza jeszcze raz przycisk wyłączając go? Tej drugiej części nie rozumiem, myślę że odnosi się do lampki? Dlaczego False i w ogóle co to za bloczek podpisane Value?
Żeby program się mógł zakończyć trzeba zatrzymać dolną pętle rysującą wykresy. Do tego służy podłączenie zmiennej lokalnej o nazwie Boolean, która przypisana jest do wskaźnika Boolean. Wskaźnik ma od początku wpisaną wartość False, aż do samego końca działania struktury sekwencyjnej, gdzie wpisujemy True.
Property Node Value to jak sama nazwa wskazuje właściwość kontrolki lub wskaźnika (indicatora) służąca do zmiany wartości. W tym przypadku zmieniamy na True lub False. W programowaniu mamy pewne obiekty (wskaźniki, kontrolki), które mają swoje właściwości (wartość, kolor, rozmiar, font, ukryty, zablokowany itd.), które to możesz odczytywać lub zapisywać - kliknij prawym myszy na kontrolce i Create/Property Node ... tam je zobaczysz. Mają też metody Invoke Node, które można na nich wykonać. Polecam poczytać troszkę o tym.

Właściwie można to zrobić korzystając ze zmiennych lokalnych (Local Variable) zamiast Property Node Value - w tym przypadku zadziała identycznie.
mareczek87 pisze: Kosmetyczna jeszcze zmiana, co zrobić, żeby nie musieć przed kolejnym uruchomieniem programu wyłączać przycisku, tylko żeby sam po skończeniu "restartował się"
Prawym myszy na przycisku Mechanical Action/Latch (wybież jeden z 3 który bardziej Ci odpowiada ... w tym przypadku chyba najodpowiedniejszy będzie Latch When Pressed
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
mareczek87
Posty: 17
Rejestracja: 04 maja 2010 00:02
Wersja środowiska: LabVIEW 8.5

Re: Program do podnoszenia i obniżania temperatury

Post autor: mareczek87 »

Kurde te wykresy trudne muszę nad tym w weekend posiedzieć, jakieś kontroli Value czyszczenie wykresu, masakra :P

Chce na razie program bez wykresu ale z włącznikiem i wyłączająca się kontrolką. Włącznik już zrobiłem, tylko jeszcze nie chce mi zgasnąć diodka. W programie było na końcu obok wyłącznika (ukrytego) jeszcze jakieś Value czy to się odnosi do diody?
Załączniki
analogowe i cyfrowe_temperatura.vi
(27.15 KiB) Pobrany 266 razy
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Program do podnoszenia i obniżania temperatury

Post autor: smiga »

Wersja bez "trudnych" Value :) i bez czyszczenia wykresu - zawsze możesz kliknąć na wykres i go wyczyścić
Załączniki
analogowe i cyfrowe_temperatura.vi
(18.51 KiB) Pobrany 294 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
mareczek87
Posty: 17
Rejestracja: 04 maja 2010 00:02
Wersja środowiska: LabVIEW 8.5

Program do podnoszenia i obniżania temperatury

Post autor: mareczek87 »

mam 8.5 wersje i nie działa :(
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Program do podnoszenia i obniżania temperatury

Post autor: smiga »

załączam 8.5
Załączniki
analogowe i cyfrowe_temperatura-2.vi
(29.8 KiB) Pobrany 266 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
mareczek87
Posty: 17
Rejestracja: 04 maja 2010 00:02
Wersja środowiska: LabVIEW 8.5

Program do podnoszenia i obniżania temperatury

Post autor: mareczek87 »

a dlaczego w pętle wrzuciłeś inne czasy, czym one się różnią?
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Program do podnoszenia i obniżania temperatury

Post autor: smiga »

smiga pisze:Po kolei od lewej:


5) Dolna pętla pobiera dane przez Local Variable z Indicatora "Aktualna temperatura szyby" i wyrzuca na wykres. Opóźnienie tej pętli jest ustawione na tą samą wartość co opóźnienie pętli regulujących temperaturę (250ms) w celu ustawienia stałych "odcinków czasowych" osi x wykresu, tych samych co kroki zmiany temperatury. To niestety nie jest najbardziej profesjonalnie zrobione, ale jak widzisz przy opóźnieniach 1/4 s działa.
Precyzyjniej będzie gdy zamienisz wszystkie "zegarki" na Wait Until Next ms Multiple - daje to precyzyjniejszą kontrolę nad opóźnieniem każdej pętli. Teraz pętla wykonuje jakiś kod co zajmuje jakiś czas, następnie czeka 250ms i zaczyna nową iterację. Nie wiemy więc dokładnie ile czasu zabiera jedna iteracja pętli. Zastosowanie Wait Until Next ms Multiple spowoduje, że wykona się kod w pętli, a później pętla poczeka resztę brakującego do 250ms czasu. Każda iteracja trwać będzie więc 250ms.
Najbardziej profesjonalnie było by gdybyś zastosował strukturę producent-konsument z kolejką, gdzie pętla konsumenta (rysująca wykres) pobiera dane za każdym razem gdy pętla producenta (regulacja czy też próbkowanie temperatury) je aktualizuje / zmienia.... ale o tym poczytaj więcej bo nie chcę mieszać na razie Ci w głowie.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
ODPOWIEDZ