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
Wysyłanie danych po RS232 w określony sposób
Wysyłanie danych po RS232 w określony sposób
- Załączniki
-
- Powercal.zip
- (17.08 KiB) Pobrany 271 razy
-
- komendy(paczki danych).txt
- (50 Bajtów) Pobrany 272 razy
- 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
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.siewnikdr pisze: Nie wiem czy wysyłanie tego jako string będzie tak samo odbieranie jak powyższy kod.
String jest reprezentowany przez znaki ASCII więc Twoje 888cośtam będzie wyglądać tak: Trzeba przeprowadzić konwersję, tak, żeby string był prawidłowy: 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
Wysyłanie danych po RS232 w określony sposób
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?
- 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
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). 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.siewnikdr pisze:Czemu na output wychodzą takie jakieś krzaki (nie powinny być number-y) i czemu na output (hex) łączy po 2 bajty?
Wysyłanie danych po RS232 w określony sposób
Pitol: Jeszcze raz wielkie dzięki za pomoc. Teraz kumam ;-)