Int.to_bytes для целого числа 288 не работаетPython

Программы на Python
Ответить
Anonymous
 Int.to_bytes для целого числа 288 не работает

Сообщение Anonymous »

Цель — создать массив байтов, который будет использоваться для отправки команд ModBus. Исходный массив заполняется значениями 0x05 0x04 (адрес устройства пять, чтение), и далее мы вычисляем адрес.

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

async def requestErrorLogNumber(blueClient, errorLogNum):
global requestedState

# Create the ModBus write message
# We will write to device one, address zero and then add the cycle number we want to write
modbusBytes = READ_DEVICE_5
address = 256 + (errorLogNum*32)

# Convert the number into bytes to add to the byte array
byte_address = address.to_bytes(length=2, byteorder='big')
modbusBytes += byte_address

size = 8
readSize = size.to_bytes(length=2, byteorder='big')
modbusBytes += readSize

# Calculate the CRC for this ModBus packet
headerCRC = crccheck.crc.Crc16Modbus()
headerCRC.process(modbusBytes)
tempCrc = headerCRC.final()
Адрес рассчитывается со значением 288, но адрес.to_bytes дает единственное значение байта 0x01 (вместо правильного значения 0x01 0x20). Следующее использование to_bytes (где мы устанавливаем длину чтения ModBus 8) работает правильно, возвращая 0x00 0x08. Даже использование (288).to_bytes(length=2, byteorder='big') возвращает однобайтовое значение 0x01. Есть идеи, что не так?
Изображение


Подробнее здесь: https://stackoverflow.com/questions/792 ... s-not-work
Ответить

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

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

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

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

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