import can import struct import time REG_READ = 0x7 DEVICE_ID = 0x00 # Старый ID устройства REG_POS = 0x72 # Предположим, что команда записи позиции — 0x2 CAN_INTERFACE = 'can0' def validate_crc16(data): """Функция расчета CRC16 (MODBUS)""" crc = 0xFFFF for byte in data: crc ^= byte for _ in range(8): if crc & 0x0001: crc = (crc >> 1) ^ 0xA001 else: crc >>= 1 return crc def process_can_message(bus): # ID и команда arbitration_id = (DEVICE_ID << 4) | REG_READ id_bytes = list(arbitration_id.to_bytes(2, byteorder='little')) # Команда и параметры data_read = [REG_POS] + list(struct.pack('