import serial import struct import time def calcula_crc(data): """Calcula o 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 struct.pack('BBHH', endereco, funcao, endereco_reg, quantidade) comando += calcula_crc(comando) ser.write(comando) time.sleep(0.1) # Aguarda resposta resposta = ser.read(7 + 2 * quantidade) # Espera pelo menos 7 bytes + dados return resposta # Configurar porta serial porta_serial = "COM112" # Substitua pelo nome correto da porta (ex: COM3 no Windows ou /dev/ttyUSB0 no Linux) baudrate = 115200 ser = serial.Serial(porta_serial, baudrate=baudrate, bytesize=8, parity='N', stopbits=1, timeout=1) # Endereço do driver (geralmente 1) endereco_dispositivo = 1 # Código de função Modbus RTU (0x03 = Ler registradores) codigo_funcao = 0x03 # Registrador de velocidade do motor (exemplo: 0x0001) endereco_registrador = 0x0001 # Quantidade de registradores a ler (exemplo: 2) quantidade_registros = 2 # Enviar comando e exibir resposta resposta = enviar_comando(ser, endereco_dispositivo, codigo_funcao, endereco_registrador, quantidade_registros) if resposta: print("Resposta Hex:", resposta.hex()) else: print("Nenhuma resposta recebida.") ser.close()