Wysyłanie danych po RS232 w określony sposób

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
siewnikdr
Posty: 43
Rejestracja: 15 lis 2008 12:37
Kontakt:

Wysyłanie danych po RS232 w określony sposób

Post autor: siewnikdr »

Witam
Mam za zadanie napisać program, który będzie sekwencyjnie wysyłał dane po RS232. Dane muszą być wysyłane w odpowiedni sposób. Program otwiera plik .txt, gdzie są zapisane wartości do przesłania:

Po uruchomieniu program wysyła 4 paczki danych

Pierwsza komenda (paczka danych):
<0x83><0x30 ><0x4D>
Druga komenda (paczka danych):
<0x84><0xE5><0x00><0x97>
Trzecia komenda (paczka danych):
<0x88><0x87><0x00><0x67><0x01><0x80><0x00><0x09>

Następnie po wpisaniu MSB, LSB i CS i wciśnięciu przycisku następuje zapisanie ostatniej paczki danych.

Czwarta komenda (paczka danych):
<0x88><0x87><0x00><0x67><0x01><MSB><LSB><CS>

Program kończy pracę. Chciałbym aby paczki danych były wysyłane w następujący sposób:

WriteBuf[0] =0x88;
WriteBuf[1]=0x87;
WriteBuf[2]=0x00;
WriteBuf[3]=0x67;
WriteBuf[4]=0x01;
WriteBuf[5]=0x80;
WriteBuf[6]=0x00;
WriteBuf[7]=0x09;

Nie wiem czy wysyłanie tego jako string będzie tak samo odbieranie jak powyższy kod. Też nie wiem jak obliczyć sume kontrolną. Aktualnie wysyłane dane przez mój program wyglądaja tak „8887006701800009” ale nie wiem czy jest to równoważne z tym co jest napisane w labwindows powyżej. Proszę o pomoc i sugestie, z góry dziękuję.

PS. Korzystam z LV 8.6
11.jpg
Załączniki
Powercal.zip
(17.08 KiB) Pobrany 271 razy
komendy(paczki danych).txt
(50 Bajtów) Pobrany 272 razy
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Wysyłanie danych po RS232 w określony sposób

Post autor: Pitol »

siewnikdr pisze: Nie wiem czy wysyłanie tego jako string będzie tak samo odbieranie jak powyższy kod.
Jeśli ta Twoja tablica (WriteBuf) była typu numerycznego i w takiej formie wrzucałeś to na port to jeśli teraz wyślesz tą samą liczbę 8887006701800009 jako string to... to nie zadziała.
String jest reprezentowany przez znaki ASCII więc Twoje 888cośtam będzie wyglądać tak:
RS_1.PNG
RS_1.PNG (1.6 KiB) Przejrzano 5796 razy
Trzeba przeprowadzić konwersję, tak, żeby string był prawidłowy:
RS_2.PNG
A co do sumy kontrolnej to zależy o jaką sumę kontrolną Ci chodzi. Jest parę sposobów obliczania sumy kontrolnej. W załączonym przykładzie zrobiłem proste dodawanie modulo 255? Chyba tak to się nazywa :)
Załączniki
StringConversion_LV86.vi
LabVIEW 8.6
(7.48 KiB) Pobrany 315 razy
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
siewnikdr
Posty: 43
Rejestracja: 15 lis 2008 12:37
Kontakt:

Wysyłanie danych po RS232 w określony sposób

Post autor: siewnikdr »

Pitol: Dzięki za kod. Muszę go przeanalizować. Czemu na output wychodzą takie jakieś krzaki (nie powinny być number-y) i czemu na output (hex) łączy po 2 bajty?
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Wysyłanie danych po RS232 w określony sposób

Post autor: Pitol »

siewnikdr pisze:Czemu na output wychodzą takie jakieś krzaki (nie powinny być number-y) i czemu na output (hex) łączy po 2 bajty?
Chodzi o to, że normalnie kontrolka string wyświetla znaki ASCII, dla których przyporządkowane są odpowiednie wartości ( przykład: A = 65 dec (41 hex) ). Więc jeśli chciałbyś wysłać na port wartość hex E1 ale jako string to tak naprawdę wyślesz 4531, co odpowiada właśnie literom E i 1. Aby poprawnie wysłać wartość E1 na port należy tak przygotować string, żeby te "krzaki" reprezentowały E1. Robi się to właśnie za pomocą Byte Array To String, który zamienia liczbę na odpowiadający jej znak. Działa on jedynie na bajtach więc musisz sobie albo przygotować tablicę bajtów i dopiero na niej użyć tej funkcji, albo robić to bajt po bajcie (tak jak w przykładzie).
1.PNG
1.PNG (15.7 KiB) Przejrzano 5775 razy
A co do drugiej części pytania to grupowanie to jest domyślne w przypadku wybrania Hex Display. Kliknij prawym przyciskiem myszy na kontrolce String i wybierz między Normal Display a pozostałymi trybami a zobaczysz różnice. Grupowanie dla Hex Display nie powoduje dodanie żadnych spacji. Tak po prostu wygodniej jest, widzieć wszystko w postaci dwóch bajtów.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
siewnikdr
Posty: 43
Rejestracja: 15 lis 2008 12:37
Kontakt:

Wysyłanie danych po RS232 w określony sposób

Post autor: siewnikdr »

Pitol: Jeszcze raz wielkie dzięki za pomoc. Teraz kumam ;-)
ODPOWIEDZ