Strona 1 z 1

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

: 15 lis 2010 14:18
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

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

: 15 lis 2010 16:24
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 5799 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 :)

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

: 15 lis 2010 16:58
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?

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

: 15 lis 2010 22:55
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 5778 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.

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

: 16 lis 2010 07:08
autor: siewnikdr
Pitol: Jeszcze raz wielkie dzięki za pomoc. Teraz kumam ;-)