problem z odczytem atrybutów waveforma

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
MK_Zuk
Posty: 83
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014

problem z odczytem atrybutów waveforma

Post autor: MK_Zuk »

Witam.
Mam problem następujący
w aplikacji kilkupętlowej jedna pętla obsługuje kartę
akwizycji, sygnał wychodzi w postaci waveformu
węzłem Set Attributes dodaję/zmieniam atrybuty np. nazwa, typ przebiegu
oraz dodatkowe informacje zależnie od typu danych.
Przebiegi są zapisane w tablicach dla każdego typu (tablica przebiegów analogowych, cyfrowych, enkoderowych)
i wszystkie razem są zamknięte w klastrze.
Są dalej przesyłane do pętli przetwarzania za pomocą kolejki.
Przetworzone dane (zgrupowane w przebiegi trwające 10 sek)
są przesyłane za pomocą FGV do pętli obsługującej wskaźniki GUI panelu.
I do tej pory wszystko działa, jest ok, w podglądzie (probe) widzę dane razem z opisami.
W pętli GUI wyciągam atrybuty, żeby przeskalować wykres, nadać nazwy przebiegom i osiom Y
Tutaj okazuje się, że kilka przebiegów nie zwraca swoich atrybutuów za pomocą Get Attributes
dostaję informację Not Found (mimo, iż widzę w probie, że te atrybuty tam są!)
Raz na kilka uruchomień wszystko działa OK ale w mniej więcej 7 na 8 przypadków nie odczytuje atrybutów.
Taki odwrotny efekt wyścigu (działa ale tylko czasami trudno to zdebugować).
Co dokładnie dzieje się - przebiegi, które "gubią" atrybuty są rejestrowane z dużo mniejszą cześtotliwością
(przebiegi analogowe mają okna 20ms a enkodery 0,5s) i to atrybuty przebiegów enkoderowych gubią się...

Pozdrawiam
Zuk
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: problem z odczytem atrybutów waveforma

Post autor: skoziate »

Czo możesz wrzucić swój kod, który wykazuje opisane przez Ciebie symptomy? Nie musi to być cały projekt, ale esencjonalny przykład, który maksymalnie zawęzi kod do Twojego problemu.
Pozdrawiam,
Sebastian
MK_Zuk
Posty: 83
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014

Re: problem z odczytem atrybutów waveforma

Post autor: MK_Zuk »

Witam.
Wreszcie mam możliwość wrzucenia fragmentów kodu.
Opisuję w kolejności wykonywania:
- Akwizycja Petla
Akwizycja Petla.png
- pętla pobierająca dane z karty DAQ, co 20 ms pobiera wartości z kanałów analogowych za pomocą ACQ analog read values
z GUI za pomocą Przenies enkodery FVG zostają przekazane parametry konfiguracyjne enkoderów m.in. okres co jaki czas mają być odczytywane (domyślnie co 0,5s) - wartość zadawane przez użytkownika, w ostatium subVI obliczenia enkoderow.vi
obliczenia enkoderow.png
liczone są pochodne (prędkość i przyspieszenie) i zadawane są nazwy i atrybuty do przebiegów
pozostałe subVI głownie skalują i przetwarzają kanały analogowe, progują kanały cyfrowe, przypisują atrybuty,
- dane trafiają do jednej z dwóch pętli przetwarzania za pomocą kolejek - tam atrybuty waveformów przechodzą razem z sygnałami
- docelowo trafiają do pętli wyświetlania wyswietlanie petla
Wyswietlanie petla.png
Wyswietlanie petla.png (411.43 KiB) Przejrzano 6554 razy
w którym są wyświetlane na wykresie, zanim to nastąpi wykres jest skalowany, wykres posiada 6 osi Y, w Przypisanie osi
Przypisanie osi.png
następuje przypisanie sygnałów do osi i (automatyczne) skalowanie

generalnie idea prosta
jednak pierwsze 3 sygnały (te z enkodera zwracają wartość false przy odczycie atrybutów,
sprawdzałem i kopiowałem nazwy atrybutów, chwilowo pomogło zapętlenie 10 odczytu ale po kilku uruchomieniach wróciło do normy czyli nie czyta tych atrybutów.

Pozdrawiam
Zuk
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

problem z odczytem atrybutów waveforma

Post autor: skoziate »

Jestem skłonny zdebuggować Twój kod, ale niestety te 4 wycinki to za mało, żebym mógł to zrobić :-s Niemniej moje podejście byłoby mniej więcej takie:
1. Włącz w każdym VI opcję Retain Wire Values http://www.ni.com/cms/images/devzone/pu ... age003.png
2. Ustaw Conditional Breakpoint tam, gdzie wyświetlasz wiadomość Błąd odczytu parametrów
3. Gdy wystąpi błąd, prześledź całą ścieżkę wstecz i zobacz przy pomocy Probe gdzie parametry występują, a gdzie nie występują. To pozwoli zawęzić problem do mniejszego kodu.

Podobny conditional breakpoint możesz sobie ustawić również w innych miejscach kodu i podobnie przejżeć wartości przewodów w kodzie i szukać obecność lub brak atrybutów.
Pozdrawiam,
Sebastian
MK_Zuk
Posty: 83
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014

problem z odczytem atrybutów waveforma

Post autor: MK_Zuk »

Dzięki skoziate za chęć pomocy.
Po kilku dniach "oddechu" wpadł mi do głowy pomysł, który nie dość,
że wygląda na to, że rozwiązał problem to jeszcze rozwiązał drugi problem,
który zauważyłem, że istnieje jak zacząłem analizować nowe rozwiązanie.

Poszukiwanym rozwiązaniem jest zsynchronizowanie wyzwalania kolejek
z odczytem enkoderów wtedy:
- mam pewność, że pierwsze dane zawierają wszystko co potrzeba
- mam pewność, że dane z enkoderów są zsynchronizowane z pozostałymi kanałami.

Pozdrawiam
Zuk
ODPOWIEDZ