Struktura prod-con

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Struktura prod-con

Post autor: Harnas »

Witam,

po wczorajszych testach okazalo sie, ze przy probkowaniu z czestotliwoscia 5 kHz, petla konsumenta nie nadaza z jednaczesnym zapisywanie i pokazywaniem pomiarow.
Dzis sprobowalem usunac wszystkie niepotrzebne bloczki, zostawilem tylko zapis do pliku po nacisnieciu przycisku. Wszystkie elementy, ktore mialy pokazywac jak zmieniaja sie wartosci zostaly usuniete. Mimo wszystko po nacisnieciu na "Zapis", dalej w Queue gromadza sie elementy i program nie nadaza ich zapisywac. W zaczalonym programie podlaczone sa tylko 4 kanaly, a docelowo ma byc ich 20.
Czy zostaje mi tylko zejsc w dol z czestotliwoscia, czy gdzies jest poprostu lipnie pomyslane polaczenie bloczkow i to spowalnia petle konsumenta ?

Zalaczam program, ktorym testowalem sobie.
Załączniki
Archivieren_hohe_Frequenzen_alle_Kanaele.vi
VI zapisujacy pomiary z 4 kanalow do pliku txt
(60.84 KiB) Pobrany 368 razy
Awatar użytkownika
Krzysztof Szewczyk
Posty: 37
Rejestracja: 19 maja 2011 02:48
Wersja środowiska: LabVIEW 2017
Lokalizacja: Koszyce
Kontakt:

Struktura prod-con

Post autor: Krzysztof Szewczyk »

no tak ale odczytujesz producenta bez ograniczenia czasowego po 1 sekundie masz juz 420 000 odczytow, musisz tam wsadzic wait jak mi sie dobrze wydaje?
Obrazek
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Struktura prod-con

Post autor: Harnas »

Interacje petli producenta sa ustalone przez bloczek DAQmx Timing. Jak sobie tam ustawie czestotliwosci na 1Hz, to producent tez ma ograniczenie na 1 sekunde.
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Struktura prod-con

Post autor: MicMac89 »

Przyznam szczerze, że ciężko odnaleźć się w tak napisanym programie. Analiza programu będzie łatwiejsza zarówno dla nas jak i dla Ciebie jak uporządkujesz kod i go opiszesz.
Wracając do tematu wydaje mi się, że wygodniej będzie zapisywać takie ilości danych do pliku TDMS, nie rozumiem skąd ta konwersja do string'a przed zapisem.
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Re: Struktura prod-con

Post autor: Harnas »

Wszystko postaralem sie opisac wewnatrz programu.
Wydaje mi sie, ze konsument po wlaczeniu zapisu przebiega wolniej, bo przy kazdej interacji petli ten sam plik txt jest otwierany, dopisywane sa do niego wartosci i jest zamykany.
Załączniki
Archivieren_hohe_Frequenzen_alle_Kanaele_pl.vi
Wersja opisana co gdzie sie dzieje
(60.13 KiB) Pobrany 350 razy
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Struktura prod-con

Post autor: MicMac89 »

Nie wiem czy konieczne jest tutaj konwertowanie danych pomiarowych do stringa. Wydaje mi się, że zastosowanie plików TDMS było by tutaj dobrym rozwiązaniem, więcej na: http://zone.ni.com/devzone/cda/tut/p/id/3727 .
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Re: Struktura prod-con

Post autor: Harnas »

Dzieki za pomoc ;) W ktorym tutku bylo zastosowane rozwiazanie jak u mnie na screenie. Teraz musze troche nad nim popracowac troche.

Wychodzi, ze chyba mylilem pliki binarne z plikami w formacie tdms L-) i nie wiedzialem jakie bloczki mam w LV.
Załączniki
Unbenannt1.PNG
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Struktura prod-con

Post autor: MicMac89 »

Grunt, że problem został rozwiązany. W pracy inżynierskiej wykorzystywałem ten format plików właśnie i dało to dobre rezultaty. W razie jakichkolwiek dodatkowych problemów pisz śmiało, zaproponowane przez Ciebie rozwiązanie wygląda rozsądnie.
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Re: Struktura prod-con

Post autor: Harnas »

Stwierdzilem, ze chcialbym jednak w przyszlosci program rozbudowac ustalac, ktore wartosci i z jaka czestotliwoscia powinne byc zapisywane (a to wszystko gdy program jest wlaczony).Sprobowalem przeniesc zapisywanie do konsumenta. Przy ustawieniu probkowania na 2kHz i czytaniu 20 kanalow petla konsumenta zaczyna przebiegac wolniej jak producent. Czyzby komputer zbyt wolny? A moze cos zle zrobilem?
Załączniki
Unbenannt.PNG
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Struktura prod-con

Post autor: MicMac89 »

Przekazywanie między pętlami oraz zapis takich ilości danych może w istocie spowolnić wykonywanie programu. Poprzednie rozwiązanie było dobre, bo było proste. Nie do końca rozumiem cel obecnej modyfikacji i struktury Case w pętli konsumenta.
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Struktura prod-con

Post autor: Harnas »

Case jest po to, zeby zapisywanie odbywalo sie wtedy, gdy jest jeden i wiecej elementow w kolejce.
Poprzednie rozwiazanie oczywiscie, ze bylo latwiejsze. Problem w tym, ze z tego co rozumiem, to zapis znajduje sie przed petla producenta, a to stwarza mi pare problemow:

1. Tworzenie duzych plikow.
Na po ok. 10 min, czestotliwosci 1,2kHz i 20 kanalach powstal TDMS o wadze cos kolo 50mb. Otwarcie go za pomoca bloczka "file viewer" i pokazanie na wykresie wszystkich probek z jednego kanalu troszke mi zmulilo komputer.
Nie wiem czy sensowniejszym nie byloby sprawdzanie wielkosci pliku i tworzenie nowego, gdy ustalona wartosc bedzie przekroczona. Problemem nie wielkosc mojego dysku twardego, tylko pozniejsza praca z zebranymi pomiarami.
2. Zmiana czestotliwosci z jaka chce zapisywac.
Do poniedzialku najwazniejsze jest poprostu zapisywanie. Jednak zalozmy, ze program bedzie chodzil 2-3 dni i chce zapisywac pomiar co 10sekund, a gdy wartosc graniczna dla ktoregos z kanalow jest przekroczona to wtedy pomiar danego kanalu jest zapisywany tak szybko jak szybko przebiega probkowanie. Gdy wartosc wroci do normy, znowu zapis odbywa sie z poprzednia czestotliwoscia.
3. Ustalanie za pomoca buttona kiedy probki maja byc zapisywane a kiedy nie (w koncu czasem mozemy chciec wlaczyc program tylko, zeby poogladac sobie wartosci)
4. Mozliwosc zmiany czestotliwosci probkowania takze w trakcie pracy programu
5. Struktura prod-con powinna zostac, bo wartosci docelowo musza byc nie tylko sensownie zapisywane ale i pokazywane (np. srednia z ilus tam pomiarow)

W pierwszym wariancie prawie wszystkie bloczki DAQ, a przede zapis do TDMSa, znajduja sie poza petla while, czyli mam na nie wplyw tylko przed uruchomieniem programu. =((
Nie jestem pewien, czy powinienem je wszystkie dac w petle producenta i czy bedzie ona wtedy przebiegala z wlasciwa czestotliwoscia interacji. Czy jest to wyjscie rozwiazujace w/w problemy.
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Struktura prod-con

Post autor: MicMac89 »

Teraz problem jest dużo szerszy i rozwiązanie nie będzie oczywiste i podane wprost. Może warto rozbić pętlę konsumenta na ilość równą liczbie kanałów i tam wykonywać poszczególne akcje, zapis po wybraniu danego kanału, zapis co jakiś czas lub zapis po przekroczeniu poziomu. Schemat blokowy dla tak rozbudowanego programu może pomóc.
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Struktura prod-con

Post autor: Harnas »

Czyli proponujesz zamiast jednej petli konsumenta, zrobic ich 20 (badz przykladowo po pare kanalow na jedna petle, zeby bylo ich mniej) ?
Pomyslalem, o zastosowaniu bloczka "stacked sequence" i robieniu wszystkiego w jednym konsumencie z rozdzialem kanalow na poszczegolne sekwencje. Pytanie czy wtedy jedna interacja petli while konsumenta bedzie szybsza, niz gdy wszystko robimy za jednym zamachem.

Co masz namysli piszac, ze schemat blokowy moze pomoc?
MicMac89
Posty: 122
Rejestracja: 05 wrz 2011 20:40
Wersja środowiska: LabVIEW 2011

Struktura prod-con

Post autor: MicMac89 »

Generalnie, jeśli zrobisz to w jednej pętli, wówczas będzie ona wykonywana w jednym wątku, więc procesor przydzieli jej czas jednokrotnie przy czym będzie musiała wykonać wszystkie operacje. Rozdzielenie zadania pomiędzy kilka pętli spowoduje, że każda z będzie osobnym wątkiem w systemie, co będzie dużo efektywniejsze.

Twój program się rozrasta, schemat blokowy przedstawiający wykonywanie programu może tutaj być przydatny do analizy. Sam od tego zaczynam realizację zadania ;)
Ostatnio zmieniony 14 mar 2012 14:45 przez MicMac89, łącznie zmieniany 1 raz.
Certified LabVIEW Associate Developer
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Struktura prod-con

Post autor: Harnas »

Dorzucenie drugiej petli while spowolnilo mi petle producenta. Wydawalo mi sie, ze czestotliwosc petli producenta jest narzucona przez bloczek DAQ, a petle konsumenta sie dostosowuja z interacja zaleznie od tego na ile pozwala im jeszcze komputer.

EDIT:
Byl blad w ustawieniu blocz DAQmx Timing
ODPOWIEDZ