Pobieranie danych z pętli na bieżąco

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
jeandebrem
Posty: 3
Rejestracja: 20 wrz 2021 13:39
Wersja środowiska: LabVIEW 2017

Pobieranie danych z pętli na bieżąco

Post autor: jeandebrem » 20 wrz 2021 13:51

Dzień dobry wszystkim,

piszę program sterujący serwomechanizmem. Ma być on zasilany sygnałem sinusoidalnym, zadaję amplitudę i okres, a funkcja w LabVIEW generuje odpowiednią prędkość.

Mam jednak problem z pobieraniem prędkości. Nie wiem, jak zrobić, żeby prędkość była wysyłana na bieżąco, po kolejnych iteracjach. W stworzonej przeze mnie pętli dopiero po jej zatrzymaniu wysyłana jest ostatnia prędkość przed zatrzymaniem - a ja chciałbym, żeby pętla wysyłała dane do urządzenia po iteracji i dokonywała kolejnej, z tej również wysyłała etc., bez zatrzymywania urządzenia.
skrin1.jpg

Awatar użytkownika
aaddaas
Posty: 196
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015
Has thanked: 1 time

Re: Pobieranie danych z pętli na bieżąco

Post autor: aaddaas » 20 wrz 2021 17:10

Niestety załączone zdjęcie nie pomaga w zrozumieniu problemu.
Pierwsza pętla generuje pewną wartość aż do przyciśnięcia przycisku stop. Wartość (ostatnia wygenerowana) jest przekazywana do komendy wysyłanej do Modbusa.
Następnie... Co się dzieje? Gdzie jest kod z rzeczonym fragmentem prędkości?
Obrazek

delicja
Posty: 1
Rejestracja: 21 wrz 2021 16:55
Wersja środowiska: LabVIEW 2019

Re: Pobieranie danych z pętli na bieżąco

Post autor: delicja » 21 wrz 2021 16:57

Możesz wyciągnąć indykator "wynik" poza pętlę i wpisywać do jego "local variable". Potem zrobić jego drugą "local variable" poza pętlą, do odczytywania wartości.

jeandebrem
Posty: 3
Rejestracja: 20 wrz 2021 13:39
Wersja środowiska: LabVIEW 2017

Re: Pobieranie danych z pętli na bieżąco

Post autor: jeandebrem » 22 wrz 2021 12:15

Jeszcze przed odczytaniem odpowiedzi zrobiłem dwie pętle ze zmiennymi lokalnymi (mój SubVI, zajmujący się wczytywaniem prędkości), a następnie umieściłem całość programu w pętli (mój VI). Efekt był ciekawy. Za pierwszym razem, gdy rano włączam silnik i załączam program, silnik działa poprawnie. Gdy coś zmienię w kodzie (np. wartości liczbowe funkcji), silnik już nie działa i blokuje się na przesłaniu danych z SubVI, co można prześledzić sobie poprzez highlight. I tak dwa dni z rzędu. Na pewno robię coś źle - tylko co?

Edit: czy dobrze myślę, że powinienem te pętle zakolejkować?

:-B Załączam skriny, mam nadzieję, że widoczne.
SubVI.jpg
VI.jpg

Awatar użytkownika
aaddaas
Posty: 196
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015
Has thanked: 1 time

Re: Pobieranie danych z pętli na bieżąco

Post autor: aaddaas » 22 wrz 2021 15:44

Wciąż nie jest to jasne. Pierwszy obrazek, z dwoma pętlami, ma dwa przyciski stop. Czy to te dwie pętle zamknięte są w subVI? Jeśli tak, to jak "wciskasz" stop?
Swoją drogą, druga pętla będzie miała wartość zmiennej lokalnej "wynik" równą wartości z poprzedniego uruchomienia. Jeśli chcesz na bieżąco wpisywać aktualną, wygenerowaną przez górną pętlę wartość, to musisz wrzucić local Variable do środka dolnej pętli.
Jesli możesz to załącz pliki, nie same screeny (jeśli będą w wersji 2017 to będę mógł Ci pomóc).
Obrazek

Awatar użytkownika
smiga
Administrator
Posty: 772
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 7 times
Been thanked: 14 times
Kontakt:

Re: Pobieranie danych z pętli na bieżąco

Post autor: smiga » 23 wrz 2021 01:36

Tak jak pisze aaddaas, wrzuć zmienną do środka pętli..., a najlepiej zrezygnuj ze zmiennych lokalnych i skorzystaj ze wspomnianych przez Ciebie kolejek lub notyfikatorów. Masz w LabVIEW gotowe template'y architektury producent/konsument lub master/slave - skorzystaj. Problem blokowania pętli slave ,przez brak danych w kolejce, możesz rozwiązać ustawiając time out dla kolejki.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek

ODPOWIEDZ