Strona 1 z 1

pomiar i sterowanie równoległe

: 24 sie 2016 10:40
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ć.

Re: pomiar i sterowanie równoległe

: 24 sie 2016 12:13
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

Re: pomiar i sterowanie równoległe

: 24 sie 2016 12:39
autor: mwojcie3
Dzięki
Można prosić w wersji dla LV 2013.

pomiar i sterowanie równoległe

: 24 sie 2016 13:37
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.

Re: pomiar i sterowanie równoległe

: 24 sie 2016 16:06
autor: dajpanspokój
w LV2010

Re: pomiar i sterowanie równoległe

: 16 wrz 2016 08:03
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

Re: pomiar i sterowanie równoległe

: 17 wrz 2016 23:05
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.

Re: pomiar i sterowanie równoległe

: 26 wrz 2016 11:11
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

Re: pomiar i sterowanie równoległe

: 26 wrz 2016 21:01
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).

Re: pomiar i sterowanie równoległe

: 04 kwie 2017 14:20
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.