|
|
|
@ -134,6 +134,8 @@ class DevicesManange():
|
|
|
|
|
self.paSlaveDevices = collections.OrderedDict()
|
|
|
|
|
self.dpSlaveModbus = TcpMaster(host = '192.168.2.10', port = 502)
|
|
|
|
|
self.paSlaveModbus = TcpMaster(host = '192.168.4.10', port = 502)
|
|
|
|
|
self.dpMasterModbus = TcpMaster(host = '192.168.1.10', port = 502)
|
|
|
|
|
self.paMasterModbus = TcpMaster(host = '192.168.3.10', port = 502)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -182,13 +184,14 @@ class DevicesManange():
|
|
|
|
|
for devicesDict in [self.paMasterDevices, self.paSlaveDevices, self.dpMasterDevices, self.dpSlaveDevices]:
|
|
|
|
|
if deviceName in devicesDict:
|
|
|
|
|
return devicesDict[deviceName]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def writeAreas(self, deviceName, values):
|
|
|
|
|
bytes = b""
|
|
|
|
|
device = self.getDevice(deviceName)
|
|
|
|
|
if device.type == "DP" and device.masterOrSlave == "主站":
|
|
|
|
|
curProDict = self.dpMasterDevices
|
|
|
|
|
areas = device.outputAreas
|
|
|
|
|
modbusM = self.dpMasterModbus
|
|
|
|
|
elif device.type == "DP" and device.masterOrSlave == "从站":
|
|
|
|
|
curProDict = self.dpSlaveDevices
|
|
|
|
|
areas = device.inputAreas
|
|
|
|
@ -196,6 +199,7 @@ class DevicesManange():
|
|
|
|
|
elif device.type == "PA" and device.masterOrSlave == "主站":
|
|
|
|
|
areas = device.outputAreas
|
|
|
|
|
curProDict = self.paMasterDevices
|
|
|
|
|
modbusM = self.paMasterModbus
|
|
|
|
|
elif device.type == "PA" and device.masterOrSlave == "从站":
|
|
|
|
|
areas = device.inputAreas
|
|
|
|
|
curProDict = self.paSlaveDevices
|
|
|
|
@ -220,6 +224,38 @@ class DevicesManange():
|
|
|
|
|
modbusM.writeMultipleRegister(slaveId = 1, address = 0, outputValue = values)
|
|
|
|
|
# print(struct.unpack('>f', struct.pack('!HH', *values[:2])))
|
|
|
|
|
|
|
|
|
|
def readAreas(self):
|
|
|
|
|
for index, curProDict enumerate(devicesDict) in [self.paMasterDevices, self.paSlaveDevices, self.dpMasterDevices, self.dpSlaveDevices]:
|
|
|
|
|
match index:
|
|
|
|
|
case 0:
|
|
|
|
|
areaType = 'output'
|
|
|
|
|
modbusM = self.paMasterModbus
|
|
|
|
|
case 1:
|
|
|
|
|
areaType = 'input'
|
|
|
|
|
modbusM = self.paSlaverModbus
|
|
|
|
|
case 2:
|
|
|
|
|
areaType = 'output'
|
|
|
|
|
modbusM = self.dpMasterModbus
|
|
|
|
|
case 3:
|
|
|
|
|
areaType = 'input'
|
|
|
|
|
modbusM = self.dpSlaverModbus
|
|
|
|
|
lastDevice = list(curProDict.values())[-1]
|
|
|
|
|
bytesNums = lastDevice.inputEndAddress if areaType == 'input' else lastDevice.outputEndAddress
|
|
|
|
|
intNums = int(bytesNums / 2) if bytesNums % 2 == 0 else int(bytesNums / 2) + 1
|
|
|
|
|
intValues = modbusM.readHoldingRegisters(slaveId = 1, startAddress = 0, intNums)
|
|
|
|
|
bytesValues = struct.pack(f"!{'H' * len(intValues)}")
|
|
|
|
|
for device in curProDict.values():
|
|
|
|
|
readAreas = device.inputAreas if areaType == 'input' else device.outputAreas
|
|
|
|
|
for area in readAreas:
|
|
|
|
|
bytes = bytesValues[area.startAddress, area.endAddress + 1]
|
|
|
|
|
if area.type in ['AI', 'AO']:
|
|
|
|
|
for i in range(0, len(bytes), 4):
|
|
|
|
|
byte = byte[i:i+4]
|
|
|
|
|
if len(byte) != 4:
|
|
|
|
|
return
|
|
|
|
|
area.currentValue[i] = struct.unpack('!f', reorderBytes(byte))
|
|
|
|
|
elif area.type in ['DI', 'DO']:
|
|
|
|
|
area.currentValue = bytesToCoils(byte)
|
|
|
|
|
@classmethod
|
|
|
|
|
def addAreas(self, type, order, bytes, deviceName):
|
|
|
|
|
if DeviceDB.getByName(deviceName=deviceName).areaJson is None:
|
|
|
|
|