from pymodbus3.client.sync import ModbusTcpClient from pymodbus3.client.sync import ModbusSerialClient client = ModbusSerialClient(method='rtu',port='/dev/ttyUSB0',parity='N',stopbits=1,bytesize=8,baudrate=9600,timeout=3) result = client.read_holding_registers(1,2,unit=1) client.close()
SLAVE_UNIT = 0x1 client = ModbusClient("rtu", port="COM9", stopbits=2, bytesize=8, baudrate=9600, timeout=10) connected = client.connect() if connected: print("Tristar Morningstar 1 connected!") else: print("Something went wrong.") exit(1) start = time.time() rr = client.read_holding_registers(0xE000, 1, unit=0) assert (rr.function_code < 0x80) print(rr) #data = client.read_coils(READ_COILS_PDU_Addr_Test_1, 1) stop = time.time() if data: succ = "was successful" else: succ = "failed" print("read %s, time spent reading: %fs" % (succ, stop - start)) print("Data read:") print(data) client.close() try: data = client.read_coils(READ_COILS_PDU_Addr_Test_1, 1)
class Modbus(): # Init modbus device def __init__(self): self._client = ModbusClient(method='rtu', port = PORT, bytesize = BITS, parity = PARITY, baudrate = BAUDRATE, timeout = 1) if self._client.connect() == False: logger_modbus.error(bcolors.FAIL + "*******************************" + bcolors.ENDC) logger_modbus.error(bcolors.FAIL + "*** ERROR, DEVICE NOT FOUND ***" + bcolors.ENDC) logger_modbus.error(bcolors.FAIL + "*******************************" + bcolors.ENDC) time.sleep(1) return # Delete modbus device def __del__(self): logger_modbus.info("Delete modbus device") self.close_connection() return # Toggle relay def toggle_relay(self, channel, address): try: ret = self._client.write_register(channel, 0x0300, unit=address) except: logger_modbus.error(bcolors.FAIL + "Error, slave %s not responde!" + bcolors.ENDC, address) return -1 logger_modbus.info("Toggle relay %s" %ret) return ret # Read status relay def read_status_relay(self, channel, address): try: ret = self._client.read_holding_registers(channel, unit=address) except: logger_modbus.error(bcolors.FAIL + "Error, slave %s not responde!" + bcolors.ENDC, address) return -1 logger_modbus.info("Status relay channel %d: %s" % (channel, int(ret.registers[0]))) return int(ret.registers[0]) # Close device def close_connection(self): logger_modbus.info("Close connection!") self._client.close() return 0