pomiar i sterowanie równoległe
pomiar i sterowanie równoległe
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ć.
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 492 razy
-
- resMeas.vi
- (163.62 KiB) Pobrany 503 razy
-
- calcRes.vi
- (13.14 KiB) Pobrany 489 razy
-
- testPrz.vi
- (82.24 KiB) Pobrany 481 razy
-
- problem.png (7.27 KiB) Przejrzano 14556 razy
- dajpanspokój
- Posty: 145
- Rejestracja: 05 lis 2015 08:15
- Wersja środowiska: LabVIEW 2016
Re: pomiar i sterowanie równoległe
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
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 533 razy
-
- Main.vi
- (20.81 KiB) Pobrany 519 razy
Re: pomiar i sterowanie równoległe
Dzięki
Można prosić w wersji dla LV 2013.
Można prosić w wersji dla LV 2013.
pomiar i sterowanie równoległe
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.
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.
- dajpanspokój
- Posty: 145
- Rejestracja: 05 lis 2015 08:15
- Wersja środowiska: LabVIEW 2016
Re: pomiar i sterowanie równoległe
w LV2010
- Załączniki
-
- Main command typedef.ctl
- (3.72 KiB) Pobrany 510 razy
-
- Main.vi
- (17.52 KiB) Pobrany 506 razy
Re: pomiar i sterowanie równoległe
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
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
- smiga
- Administrator
- Posty: 823
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: pomiar i sterowanie równoległe
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
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?
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?
- smiga
- Administrator
- Posty: 823
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: pomiar i sterowanie równoległe
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
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.
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.