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: 19
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

pomiar i sterowanie równoległe

Post autor: mwojcie3 » 24 sie 2016 10:40

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 65 razy
resMeas.vi
(163.62 KiB) Pobrany 58 razy
calcRes.vi
(13.14 KiB) Pobrany 52 razy
testPrz.vi
(82.24 KiB) Pobrany 64 razy
problem.png
problem.png (7.27 KiB) Przejrzano 2510 razy

Awatar użytkownika
dajpanspokój
Posty: 109
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2014
Has thanked: 2 times

Re: pomiar i sterowanie równoległe

Post autor: dajpanspokój » 24 sie 2016 12:13

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 65 razy
Main.vi
(20.81 KiB) Pobrany 73 razy

mwojcie3
Posty: 19
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 » 24 sie 2016 12:39

Dzięki
Można prosić w wersji dla LV 2013.

Awatar użytkownika
micard
Posty: 124
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2016
Has thanked: 4 times
Been thanked: 2 times
Kontakt:

pomiar i sterowanie równoległe

Post autor: micard » 24 sie 2016 13:37

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: 109
Rejestracja: 05 lis 2015 08:15
Wersja środowiska: LabVIEW 2014
Has thanked: 2 times

Re: pomiar i sterowanie równoległe

Post autor: dajpanspokój » 24 sie 2016 16:06

w LV2010
Załączniki
Main command typedef.ctl
(3.72 KiB) Pobrany 59 razy
Main.vi
(17.52 KiB) Pobrany 65 razy

mwojcie3
Posty: 19
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 » 16 wrz 2016 08:03

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
Posty: 678
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Been thanked: 1 time
Kontakt:

Re: pomiar i sterowanie równoległe

Post autor: smiga » 17 wrz 2016 23:05

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 ____
_ Certified LabVIEW Developer _
Certified Professional Instructor
_____ tel. 662 01 01 74_____
_____ www.optinav.pl _____

_______Obrazek_______

mwojcie3
Posty: 19
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 » 26 wrz 2016 11:11

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
Posty: 678
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Been thanked: 1 time
Kontakt:

Re: pomiar i sterowanie równoległe

Post autor: smiga » 26 wrz 2016 21:01

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 ____
_ Certified LabVIEW Developer _
Certified Professional Instructor
_____ tel. 662 01 01 74_____
_____ www.optinav.pl _____

_______Obrazek_______

mwojcie3
Posty: 19
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: pomiar i sterowanie równoległe

Post autor: mwojcie3 » 04 kwie 2017 14:20

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