import sys sys.path.append('../') sys.path.append('../../') sys.path.append('../../../') from protocol.ModBus.rtuslave_example import RTUSlave import modbus_tk.defines as cst class FFSimulate(object): def __init__(self): self.rtuSlave = RTUSlave(port = 'COM12', baudrate = 9600, bytesize = 8, parity = 'N', stopbits = 1, xonxoff = 0) self.AIAddr = [x for x in range(4100, 4107) if x % 2 == 0] self.AOAddr = [x for x in range(4200, 4207) if x % 2 == 0] self.DIAddr = [x for x in range(4300, 4304)] self.DOAddr = [x for x in range(4400, 4404)] self.writeList = self.AIAddr + self.DIAddr self.readList = self.writeList + self.AOAddr + self.DOAddr def start(self): self.rtuSlave.start() try: self.addSlave() except: pass def stop(self): self.rtuSlave.server.stop() def addSlave(self): self.rtuSlave.server.add_slave(1) slave = self.rtuSlave.server.get_slave(1) slave.add_block('4', cst.HOLDING_REGISTERS, 4000, 5000) def readValue(self): valueList = [] for index, address in enumerate(self.readList): if index < 4 or 7 < index < 12: order = 'ABCD' else: order = 'int' value = self.rtuSlave.readValue(1, '4', address, order = order) valueList.append(value) return valueList def writeValue(self, index, value): index = int(index) if index < 4: value = float(value) order = 'ABCD' else: value = int(value) order = 'int' self.rtuSlave.setValue(1, '4', self.writeList[index], value, order = order) if __name__ == '__main__': a = FFSimulate() a.start() # a.addSlave() a.writeValue(1, 16.5) a.writeValue(7, 1) print(a.readValue()) print(a.writeList)