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 »

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: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

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

Post autor: aaddaas »

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 »

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 »

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: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

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

Post autor: aaddaas »

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: 817
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

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

Post autor: smiga »

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
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
ODPOWIEDZ