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
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) |