You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.6 KiB
Python

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)