Jestem studentem. Tworzę aplikację testową, która wykorzystując sterownik VISA komunikuje się z terminalem wyposażonym w LCD, klawiaturę oraz czytnik kart zbliżeniowych. Terminal jest SLAVE'em w komunikacji, wykonuje komendy wg protokołu ale pozostawia kwestie logiki aplikacji nadzorującej.
Ramka wygląda w ten sposób
STX (0x55) | ADDR ( 0x30-0x3f ) | DATA LENGHT (0x01 - 0x20) | CMD (np. 0x81) | DATA ( np. 80) | CRC (xor poprzedzających znaków) | ETX (0xAA)
Terminal odpowiada na każdą zrozumianą i prawidłową komendę. Dla uproszczenia do tej pory tworzyłem gotowe komendy i analizowałem statusy na podstawie porównania stringów. Teraz buduje aplikację od nowa i chciałbym uprościć sposób sprawdzania statusu i reagowania na jego zmiany. Status to 1 bajtowy ciąg w którym każdy bit jest powiązany ze stanem w jakim jest urządzenie. Np 0x80 (1000 0000). Na najstarsze 4 bity nie muszę reagować, są potrzebne tylko do wyświetlenia informacji. Najmłodsze 4 bity informują mnie czy coś jest w buforach i w takim wypadku muszę wysłać komendę pobrania tych danych i wyczyszczenia ich. Do tej pory robiłem tak, że wybrane bajty komendy i danych separowałem i porównywałem ze stałymi stringami w hexie. Jest to mało wygodny sposób. Wiem, że mogę zamienić stringa na byte array, ale jak zrobić by każdy bit był rozpatrywany oddzielnie i aby reakcja na jego stan wywoływał jakiś skutek. Potrzebowałbym jakiś wskazówek, jak zrobić to dobrze.
Mam taką logikę:
SEND STATUS_REQUEST -> READ STATUS_ANSWER -> IF DATA np. = 0x80 -> SEND LIGHT_LCD ->READ STATUS -> IF KEY_IN_BUFFER -> READ_KEY -> FLUSH KEY -> READ STATUS ITD.
W Załączniku przesyłam część odpowiedzialną za czytanie statusu.
Pozdrawiam
Sprawdzenie statusu za pomocą tablicy boolowskiej
Sprawdzenie statusu za pomocą tablicy boolowskiej
- Załączniki
-
- terminal ver 1.1.vi
- (21.81 KiB) Pobrany 227 razy
- n_dakota
- Posty: 58
- Rejestracja: 23 sty 2011 13:32
- Wersja środowiska: LabVIEW 2018
- Lokalizacja: Budapeszt
Sprawdzenie statusu za pomocą tablicy boolowskiej
Ale po co tak komplikujesz? Nie możesz napisać zwykłego case'a, do którego podpinasz drut z komunikatem od urządzenia i na tej podstawie reagujesz tworząc w nim przypadki?
Polecam materiały zamieszczone tutaj:
http://www.kmeif.pwr.wroc.pl/elektron/i ... ib.htm#052
Analogię do Twojego problemu możesz znaleźć w pkt. 7., gdzie podobnie reaguje się na STB urządzenia.
http://www.kmeif.pwr.wroc.pl/elektron/i ... pib.htm#07
Tutaj masz takiego case'a http://www.kmeif.pwr.wroc.pl/elektron/i ... /rys23.jpg
Polecam materiały zamieszczone tutaj:
http://www.kmeif.pwr.wroc.pl/elektron/i ... ib.htm#052
Analogię do Twojego problemu możesz znaleźć w pkt. 7., gdzie podobnie reaguje się na STB urządzenia.
http://www.kmeif.pwr.wroc.pl/elektron/i ... pib.htm#07
Tutaj masz takiego case'a http://www.kmeif.pwr.wroc.pl/elektron/i ... /rys23.jpg
nie za bardzo widzę czym miałbym zmieniać stan tego case'a w moim przypadku? W podanym przez Ciebie przypadku jest wykonywana pętla, gdzie sprawdzany jest status za pomocą STB obsługiwany przez VISA. Ja nie mogę tego wykorzystać, więc musiałbym stworzyć tyle casów ile mam przypadków i do każdego podłączyć operator boolowski, a tego właśnie chce uniknąć. Bo łatwiej mi rozpatrywac 8 przypadków po prostu sprawdzając 8 bitów. Dlatego potrzebuje wskazówki jak podzielić U8 array na osiem 1bitowych. Gdzię każdą mógłbym połączyć z odpowiadającym casem. Jest split ale nie do końca umiem się nim obsługiwać.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Sprawdzenie statusu za pomocą tablicy boolowskiej
Wyczuwam, że o to chodzi?
- Załączniki
-
- num2bits.png (17.8 KiB) Przejrzano 5331 razy
- skrzatswat
- Posty: 21
- Rejestracja: 13 lut 2012 16:26
- Wersja środowiska: LabVIEW 2011
Sprawdzenie statusu za pomocą tablicy boolowskiej
super, oba rozwiązania wyglądają obiecująco, jutro wszystko dokładnie sprawdzę i przedstawię co uda mi się osiągnąć. Rozwiązanie PiDiego jest dokładnie tym czego szukałem ale skrzatswat'a też daje radę.