У меня есть устройство, использующее модифицированный протокол Modbus. Устройство отправляет сообщения на последовательный порт RPi3. Сообщение имеет длину 14 байт и начинается с байта синхронизации, за которым следуют 11 байтов данных, а затем два байта modbusCRC-16.
Чтобы проверить достоверность сообщения (посредством CRC check), я могу отправить только 11 байтов данных в функцию проверки CRC. Проблема в том, что я просто не могу понять, как извлечь эти 11 байтов и поместить их в новый список байтов (??), приемлемый для функции CRC.
Программа показана ниже. и вывод под ним (показанная ошибка понятна, потому что
Код: Выделить всё
newData
Код: Выделить всё
import serial
from time import sleep
from modbus_crc import check_crc
ser = serial.Serial("/dev/ttyS0", 9600)
print("waiting for message from the serial port ......\n")
rxData = ser.read()
sleep(0.03)
data_left = ser.inWaiting()
rxData += ser.read(data_left)
print("Message has been received\n")
print("The 'rxData' type from ser.read() is ",type(rxData), " and length is ", len(rxData))
print("'rxData - ", [hex(i) for i in rxData], "\n")
print("Now show only bytes 1 to 11 of rxData\n")
x = range(1,12,1)
for i in x:
print((hex(rxData[i])), end=" ")
print("\n")
#####################
#### Missing code to make newData with only the bytes (1 to 11 in rxData
#####################
print("\nThe 'newData' type is ",type(newData), " and length is ", len(newData))
print("'newData' - ", [hex(i) for i in newData], "\n")
print("\n")
print("check if newData CRC is OK\n")
if not check_crc(newData):
print("CRC is NOT OK")
else:
print("CRC is OK!")
Код: Выделить всё
waiting for message from the serial port ......
Message has been received
The 'rxData' type from ser.read() is and length is 14
'rxData - ['0xff', '0xd', '0x77', '0x2', '0x1', '0x1', '0x12', '0x33', '0x30', '0x2e', '0x38', '0x39', '0xfd', '0x78']
Now show only bytes 1 to 11 of rxData
0xd 0x77 0x2 0x1 0x1 0x12 0x33 0x30 0x2e 0x38 0x39
Traceback (most recent call last):
File "/home/stevev/Projects/TKinter/20240309-operation on Bytes class.py", line 29, in
print("\nThe 'newData' type is ",type(newData), " and length is ", len(newData))
NameError: name 'newData' is not defined
Источник: https://stackoverflow.com/questions/781 ... into-a-new