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.
Pobieranie danych z pętli na bieżąco
-
- Posty: 3
- Rejestracja: 20 wrz 2021 13:39
- Wersja środowiska: LabVIEW 2017
Re: Pobieranie danych z pętli na bieżąco
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?
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?
Re: Pobieranie danych z pętli na bieżąco
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.
-
- Posty: 3
- Rejestracja: 20 wrz 2021 13:39
- Wersja środowiska: LabVIEW 2017
Re: Pobieranie danych z pętli na bieżąco
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ć?
Załączam skriny, mam nadzieję, że widoczne.
Edit: czy dobrze myślę, że powinienem te pętle zakolejkować?
Załączam skriny, mam nadzieję, że widoczne.
Re: Pobieranie danych z pętli na bieżąco
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).
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).
- 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
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.