import serial import struct # Подключение к виртуальному порту (например, /dev/pts/6) ser = serial.Serial('/dev/pts/6', 9600, timeout=1) # Пример запроса Modbus (функция 0x04, чтение регистра 0x0001) request = bytes([1, 4, 0x00, 0x01, 0x00, 0x01, 0x31, 0xCA]) # Отправка запроса ser.write(request) # Чтение ответа (Минимум 7 байт: 1 байт адрес, 1 байт код функции, 1 байт количество данных, 4 байта данных, 2 байта CRC) response = ser.read(9) # Ожидаем 9 байт (учитывая длину данных) if len(response) >= 9: print(f'Response (hex): {response.hex()}') # Распарсим ответ slave_address = response[0] # Адрес устройства function_code = response[1] # Код функции byte_count = response[2] # Количество байт данных # Получаем 4 байта данных (float в IEEE 754) data_bytes = response[3:3+4] crc_received = struct.unpack('f', data_bytes)[0] # Вывод распарсенной информации print(f"Slave Address: {slave_address}") print(f"Function Code: {function_code}") print(f"Byte Count: {byte_count}") print(f"Distance Value (meters): {distance_value:.2f}") print(f"CRC Received: {hex(crc_received)}") else: print("Incomplete response received") ser.close()