Sprawdzenie statusu za pomocą tablicy boolowskiej

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Majkee
Posty: 3
Rejestracja: 24 lut 2012 22:06
Wersja środowiska: LabVIEW 2011

Sprawdzenie statusu za pomocą tablicy boolowskiej

Post autor: Majkee »

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
Załączniki
terminal ver 1.1.vi
(21.81 KiB) Pobrany 227 razy
Awatar użytkownika
n_dakota
Posty: 58
Rejestracja: 23 sty 2011 13:32
Wersja środowiska: LabVIEW 2018
Lokalizacja: Budapeszt

Sprawdzenie statusu za pomocą tablicy boolowskiej

Post autor: n_dakota »

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
Majkee
Posty: 3
Rejestracja: 24 lut 2012 22:06
Wersja środowiska: LabVIEW 2011

Post autor: Majkee »

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ć.
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Sprawdzenie statusu za pomocą tablicy boolowskiej

Post autor: PiDi »

Wyczuwam, że o to chodzi?
Załączniki
num2bits.png
num2bits.png (17.8 KiB) Przejrzano 5333 razy
ObrazekObrazekObrazekObrazek
Awatar użytkownika
skrzatswat
Posty: 21
Rejestracja: 13 lut 2012 16:26
Wersja środowiska: LabVIEW 2011

Sprawdzenie statusu za pomocą tablicy boolowskiej

Post autor: skrzatswat »

ja mogę zasugerować coś takiego :)
bity.png
Obrazek
Majkee
Posty: 3
Rejestracja: 24 lut 2012 22:06
Wersja środowiska: LabVIEW 2011

Sprawdzenie statusu za pomocą tablicy boolowskiej

Post autor: Majkee »

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ę.
ODPOWIEDZ