Как извлечь количество байтов из списка «байтов» и поместить в новый список «байтов»Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Как извлечь количество байтов из списка «байтов» и поместить в новый список «байтов»

Сообщение Гость »


У меня есть устройство, использующее модифицированный протокол Modbus. Устройство отправляет сообщения на последовательный порт RPi3. Сообщение имеет длину 14 байт и начинается с байта синхронизации, за которым следуют 11 байтов данных, а затем два байта modbusCRC-16.
Чтобы проверить достоверность сообщения (посредством CRC check), я могу отправить только 11 байтов данных в функцию проверки CRC. Проблема в том, что я просто не могу понять, как извлечь эти 11 байтов и поместить их в новый список байтов (??), приемлемый для функции CRC.
Программа показана ниже. и вывод под ним (показанная ошибка понятна, потому что list has not been created - that's what I'd like some help with).

Код: Выделить всё

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!")
Output after running the program:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»