pomiar i sterowanie równoległe

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
mwojcie3
Posty: 27
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

pomiar i sterowanie równoległe

Post autor: mwojcie3 »

Cześć

Mam taki oto problem. Jak zrobić takie coś. W załączniku rysunek działania programu i stworzone VI.

Opis problemu.
Chciałem najpierw wywołać procedurę "Pomiar rezystnacji" W zależności od wyników uruchomiany jest sterowanie dwoma przekaźnikami. Jak jeden jest włączony to drugi w tym czasie jest wyłączony i tak na zmianę. Po uruchomieniu sterowania przekaźnikami uruchamiane są pomiary na 10 kanałach. W trakcie tych operacji sprawdzana jest jeszcze raz rezystancja po 0.5s Czas od uruchomienia pomiarów na 10 kanałach do końca programu ma wynosić 20s.

Wiem że będę musiał użyć pętli równoległych. Mam osobno zaprojektowane VI do sterowania przekaźnikami, pomiaru rezystancji i pomiaru na wielu kanałach. Nie za bardzo wiem jak to do kupy zgrać.
Załączniki
meas_multi_channell.vi
(104.08 KiB) Pobrany 440 razy
resMeas.vi
(163.62 KiB) Pobrany 448 razy
calcRes.vi
(13.14 KiB) Pobrany 437 razy
testPrz.vi
(82.24 KiB) Pobrany 451 razy
problem.png
problem.png (7.27 KiB) Przejrzano 13206 razy
Awatar użytkownika
dajpanspokój
Posty: 145
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2016

Re: pomiar i sterowanie równoległe

Post autor: dajpanspokój »

Hej

To jest przyklad rozwiazania tego problemu. Ma duzo dziur i musisz go dokonczyc, ale rzecz obraca sie wokol wysylania sobie wiadomosci przez kolejki pomiedzy roznymi petlami.
Kazda petla jest odpowiedzialna za osobny pomiar.

1. Wszystkie enumy i wszystkie klastery powinny byc typedefami, wiec pozmieniaj.
2. Dodaj petle 10 pomiarow
3. Jesli ten program bedzie sie powiekszal, to rozdziel te petle pomiedzy roznymi modulami aplikacji
Załączniki
Main command typedef.ctl
(4.28 KiB) Pobrany 459 razy
Main.vi
(20.81 KiB) Pobrany 468 razy
Obrazek
mwojcie3
Posty: 27
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 »

Dzięki
Można prosić w wersji dla LV 2013.
Awatar użytkownika
micard
Posty: 207
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Kontakt:

pomiar i sterowanie równoległe

Post autor: micard »

spróbuj popatrzeć na framework DQMH:
http://sine.ni.com/nips/cds/view/p/lang/da/nid/213286

pozwala on na proste i przyjazne użytkownikowi sterowanie niezależnymi procesami, oraz na komunikację między nimi.
Awatar użytkownika
dajpanspokój
Posty: 145
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2016

Re: pomiar i sterowanie równoległe

Post autor: dajpanspokój »

w LV2010
Załączniki
Main command typedef.ctl
(3.72 KiB) Pobrany 450 razy
Main.vi
(17.52 KiB) Pobrany 442 razy
Obrazek
mwojcie3
Posty: 27
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 »

Jeszcze mam pytanie dotyczące akwizycji danych.

Mianowice w pętli for zrobiłem pomiar jednego kanału. Parametry próbkowania widoczne w kodzie.
Kilkukrotnie wykonuje pomiar żeby uzyskać wymagany czas pomiaru i wszystkie wyniki zapisuje w pliku.
Pod odczytaniu wyników z pliku pojawiają się przesunięcia sygnałów, to wygląda tak jakby pojawiało się jakieś opóźnienie między kolejnymi przebiegami pętli i dlatego pojawia się akwizycja tego sygnału w różnych miejscach. Maksymalny czas pomiaru sygnału ma wynosić 20s, więc przy wykonaniu większej ilości pętli będzie więcej tego typu przesunięć i sygnał mierzony nie będzie odpowiadał rzeczywistemu.

Czy należy zablokować w jakiś sposób resztę programu żeby nie pojawiały się opóźnienia czy rozwiązać to w jakiś inny sposób?

Wygląd sygnału po złożeniu i przebiegu z jednej pętli i kod źródłowy poniżej
Załączniki
wczytane_pomiary.png
akwizycja_1petla.png
kod_programu.png
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: pomiar i sterowanie równoległe

Post autor: smiga »

Wszystkiemu winny ten zapis do pliku - zwalnia akwizycję. Wyrzuć go do innego wątku. Akwizycja powinna być sama w osobnym wątku, z którego przekażesz dane kolejką do obróbki (np.zapisu) w innym wątku.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
mwojcie3
Posty: 27
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 »

Witam, przerzuciłem zapis do pliku do głównej kolejka, ale niestety nic nie pomaga.

Może to dlatego że równolegle działają jeszcze 4 pętle: UI, petla maszyny stanow, petla ktore caly czas sterujace przekaznikami i sporadycznie uruchamiana pętla, do otwierania/ zamykanie zaworow i pomiaru rezystancji i oczywiscie petla pomiarowa.

A może trzeba pozbyć się tego Daq Assistant oraz konwersji z Dynamic na double i zastąpić jest Daq mx?

ZAPIS_W_INNEJ KOLEJCE.png
ZAPIS_BD.png
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: pomiar i sterowanie równoległe

Post autor: smiga »

Sugerowałbym raczej wysyłanie na bieżąco wszystkiego co "wypluje" DAQ Assistant. Aktualnie składasz sobie paczkę 10 próbek (pętla for), które następnie wysyłasz kolejką. Składaj tę paczkę w innej pętli While (w innym wątku).
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
mwojcie3
Posty: 27
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 »

Ok. Już mam poprawioną aplikację. I teraz mam problem z DAQmx Read. Na podstawie przykładowego projektu z biblioteki Labview stworzyłem akwizycję i logowanie do pliku. Pomiar dotyczy 11 kanałów. Zrobiłem konfigurację kanału i potem z użyciem kolejek robię akwizycję danych.
Pojawia mi się błąd -200279. Nie wiem czym jest to spowodowane. Korzystam aktualnie z symulowanego urządzenie PCIe-6361.

Gdy nie ustawiam w DAQmx Sample clocka i uruchamiam DAQmx Read z domyślną liczbą próbek -1, wszystko jest ok, ale nie mam kontroli nad częstotliwością próbkowania.
Załączniki
akwizycja.png
ODPOWIEDZ