from pymodbus.client import ModbusSerialClient from pymodbus.constants import Endian from pymodbus.payload import BinaryPayloadDecoder, BinaryPayloadBuilder import struct # Configuração do cliente Modbus client = ModbusSerialClient( method='rtu', port='COM3', # Substitua pelo seu porto serial baudrate=9600, stopbits=2, bytesize=8, parity='N', timeout=1 ) # Função para calcular CRC-16 def calculate_crc(data): crc = 0xFFFF for pos in data: crc ^= pos for _ in range(8): if (crc & 1) != 0: crc >>= 1 crc ^= 0xA001 else: crc >>= 1 return crc # Função para ler um registro def read_register(address, count=1): response = client.read_holding_registers(address, count, unit=1) if not response.isError(): decoder = BinaryPayloadDecoder.fromRegisters(response.registers, byteorder=Endian.BIG) return decoder.decode_16bit_uint() else: print("Erro na leitura do registro") return None # Função para escrever em um registro def write_register(address, value): builder = BinaryPayloadBuilder(byteorder=Endian.BIG) builder.add_16bit_uint(value) payload = builder.to_registers() response = client.write_registers(address, payload, unit=1) if response.isError(): print("Erro na escrita do registro") else: print("Escrita bem-sucedida") # Função para converter resposta em float def get_float(data): float_address = data[3:] temp = struct.unpack('>f', bytes(float_address))[0] return temp # Conectar ao cliente Modbus if client.connect(): print("Conectado ao driver BLD-300R") # Exemplo de leitura de velocidade do motor speed_address = 0x005F speed = read_register(speed_address) if speed is not None: print(f"Velocidade do motor: {speed} rpm") # Exemplo de leitura de código de alarme alarm_address = 0x0076 alarm_code = read_register(alarm_address) if alarm_code is not None: print(f"Código de alarme: {alarm_code}") # Exemplo de escrita de velocidade do motor set_speed_address = 0x0056 set_speed_value = 1100 # Velocidade desejada em rpm write_register(set_speed_address, set_speed_value) # Exemplo de habilitação do controle RS485 enable_address = 0x00B6 enable_value = 1 # Habilitar write_register(enable_address, enable_value) # Desconectar do cliente Modbus client.close() else: print("Falha na conexão com o driver BLD-300R")