Wykonywanie programu dokładnie co 5 sek.

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
xamrex
Posty: 30
Rejestracja: 21 paź 2013 18:54
Wersja środowiska: LabVIEW 8.5

Wykonywanie programu dokładnie co 5 sek.

Post autor: xamrex »

Witam.
Mam taką rzecz do opanowania.
Co 5 sekund pojawia mi się napięcie i utrzymuje się przez te 5 sekund (napięcie to jest podawane na przekaźnik, który załącza diodę) . natomiast potem przez 5 sekund nie ma napięcia.Czyli można to mniej więcej zobrazować tak:
0-5sek jest napięcie
5-10sek Nie ma napięcia
10-15 sek jest napięcie
15-20sek Nie ma napięcia

No i napisałem sobie program, (trochę źle go napisałem) który co (teoretycznie) 5 sekund robi pomiar napięcia (na diodzie)
Teraz jestem poza pracą więc nie bardzo pokażę mój schemat ale jest on troszkę błędny.

Mianowicie mam tam pętlę a w środku pętli opóźnienie wynoszące 5sekund oraz program, który mierzy napięcie i zapisuje je do tabicy.

W czym tkwi problem?
Ano w tym, że po kilku tysiącach pomiarach program cały czas pokazuje brak napięcia (dlatego, że tak jakby trochę się przesuwa i zamiast mierzyć w momentach,gdy załączona jest dioda on wykonuje pomiar, gdy dioda jest wyłączona).

No bo spójrzmy. Wszystko byłoby idealnie, gdyby mój program wykonywał się dokładnie co 5sekund a tak nie jest bo:
-Czas wykonywania się programu to : a)Opóźnienie delay wynoszące 5sekund + Faktyczny czas (Który jest bardzo krótki, ale jest) wykonania pomiaru).
I czas wykonania się całego programu to nie 5000ms a np. 5000.0001


Mam nadzieję że w miarę prosto opisałem w czym tkwi mój problem ;)
Czy da się coś na to zaradzić??
de80
Posty: 90
Rejestracja: 02 sty 2011 22:46
Wersja środowiska: LabVIEW 2014
Lokalizacja: KRK

Re: Wykonywanie programu dokładnie co 5 sek.

Post autor: de80 »

Witam,
odnośnie dokładnego wykonywania się programu to na PC będzie bradzo trudno... Jaki jest cel działania programu co 5 sek? może problem da się rozwiązać w inny sposób? Pomiar nie może być wyzwalany zboczem narastającym na wejściu pomiarowym?

Pozdrawiam
B.
Obrazek
xamrex
Posty: 30
Rejestracja: 21 paź 2013 18:54
Wersja środowiska: LabVIEW 8.5

Re: Wykonywanie programu dokładnie co 5 sek.

Post autor: xamrex »

de80 pisze:Pomiar nie może być wyzwalany zboczem narastającym na wejściu pomiarowym?
Nie bardzo.

Może spróbuję jeszcze dokładniej opisać..
Mam testować przekaźniki.

Generalnie wygląda to tak. Mam dwa VI(jeden do generowania sygnału prostokątnego -czyli właśnie nim co 5 sekund na 5 sekund podaję napięcie na przekaźnik;; oraz drugi do mierzenia napięcia na układzie wykonawczym - diodzie)

Czyli teraz miałem to ustawione tak, że najpierw odpalam jedno VI i ustalam w nim częstotliwość przebiegu tak, żeby co 5 sekund się zmieniało napięcie.

Następnie uruchamiam drugi VI(do mierzenia napięcia) w tym momencie, gdy świeci mi się dioda...

No i teraz ten pierwszy program co generuje ten sygnał prostokątny dobrze utrzymuje te 5sekund.
Natomiast ten 2gi program, w którym mam delaya 5000ms to tak naprawdę wykonuje się ciut dłużej i po którymś tam tysięcznym pomiarze to mi się rozjeżdża i zamiast mierzyć mi w momencie gdy dioda jest załączona mierzy mi w momencie gdy dioda jest wyłączona.

Musiałbym w jakiś sposób pożenić te 2 programy tyko nie mam pojęcia jak :((
Dam może jutro schemat jak to wygląda, to może uda wam się coś mi pomóc :))
de80
Posty: 90
Rejestracja: 02 sty 2011 22:46
Wersja środowiska: LabVIEW 2014
Lokalizacja: KRK

Wykonywanie programu dokładnie co 5 sek.

Post autor: de80 »

przydałby się kod z jakim masz problem, chyba powoli rozumiem o co chodzi;) a nie możesz tego w jednej aplikacji zrobić?:) sterować przekaźnikiem i mierzyć na nim napięcie? są różnego typu techniki synchronizacji działania aplikacji, możesz poczytać: http://www.viewpointusa.com/newsletter/ ... pring1.php

Pozdrawiam
Obrazek
milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Wykonywanie programu dokładnie co 5 sek.

Post autor: milten »

Jako, że działasz na Windowsie, to możesz możesz sprawdzać czas najczęściej co 1 ms. W twoim przypadku czas wykonania jednej iteracji pętli masz 5000 ms + czas na pomiary, obliczenia i zapis danych. Aby dokonywać jak najmniej modyfikacji zmień delay na 1 ms i w każdej iteracji sprawdzaj, czy upłyneło już to 5 sekund. Jeżeli upłyneło, to wykonujesz pomiar itd.
Nie będzie to na pewno dokładnie co 5 sekund, bo Windows Ci na to nie pozwala.
Jeżeli to by było możliwe, to lepszym wyjściem było by rozpoczynanie serii pomiarów na przykład w 4750 ms i kończenie go w 5250 ms. Będziesz miał całą końcówkę i na tej podstawie wybierzesz odpowiedni pomiar i dodatrkowo będziesz mógł się synchronizować do następnego pomiaru.
Obrazek
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Wykonywanie programu dokładnie co 5 sek.

Post autor: Jamal79 »

Napisz jakiego sprzetu uzywasz i jak jest mozliwosc dolacz VI'aje. Jest kilka mozliwosci na rozwiazanie twojego problemu.
TMa
Posty: 203
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017

Re: Wykonywanie programu dokładnie co 5 sek.

Post autor: TMa »

Nie wchodząc w szczegóły twojego problemu, przypomnę tzw. pętlę time'owaną (Timed Loop). Jest to wersja rozbudowana pętli While, która pozwala na m.in. dokładną kontrolę kolejnych wywołań w czasie (za pomocą Left Data Node).
xamrex
Posty: 30
Rejestracja: 21 paź 2013 18:54
Wersja środowiska: LabVIEW 8.5

Re: Wykonywanie programu dokładnie co 5 sek.

Post autor: xamrex »

Ok.
Tak więc mam 2 VI
-Jeden generuje tylko przebieg prostokątny, który zmienia się co 5 sek(Artur)
-Drugi wykonuje pomiary co 10 sekund (Untitled) [Zapomniałem dodać jest wykonywanych 8 pomiarów napięcia metodą różnicową)
Załączniki
2.PNG
1.PNG
Untitled_1.vi
(864.32 KiB) Pobrany 386 razy
artur.vi
(118.24 KiB) Pobrany 358 razy
ODPOWIEDZ