diff --git a/model/ProjectModel/AreaManage.py b/model/ProjectModel/AreaManage.py index d788e97..8bb3528 100644 --- a/model/ProjectModel/AreaManage.py +++ b/model/ProjectModel/AreaManage.py @@ -32,12 +32,12 @@ class Area(): bytes = None type = None addressList = [] + valueType = 'ABCD' def __init__(self): pass def writeValues(self): - self.masterWriteValues = TcpMaster('127.0.0.2', 502) self.slaveWriteValues = TcpMaster('127.0.0.1', 502) print(self.masterValues,'sssssss') diff --git a/model/ProjectModel/DeviceManage.py b/model/ProjectModel/DeviceManage.py index 5e5b7f5..0325743 100644 --- a/model/ProjectModel/DeviceManage.py +++ b/model/ProjectModel/DeviceManage.py @@ -6,7 +6,7 @@ from model.ProjectModel.AreaManage import Area class Device(): areas = [] - startAddress = None + startAddress = 0 endAddress = 0 protocolType = None masterOrSlave = None @@ -16,21 +16,42 @@ class Device(): def addArea(self, type, nums, bytes): area = Area() - area.startAddress = self.endAddress + area.type = type + area.startAddress = 0 if not self.startAddress else: self.endAddress + 1 + area.length = self.getLength(nums, bytes) + area.endAddress = startAddress + length + self.endAddress = area.endAddress + area.addressList = list(range(area.startAddress, area.endAddress + 1, bytes)) + areas.append(area) + + def delArea(self, index): + self.areas.pop(index) + self.recalculateAddress() + + def recalculateAddress(self): + for index, area in enumerate(self.areas): + area.startAddress = self.startAddress + area.endAddress = area.startAddress + area.length + area.addressList = list(range(area.startAddress, area.endAddress + 1, area.bytes)) + else: + self.endAddress = area.endAddress + + def editAreaType(self, index, type): + self.areas[index].type = type + + def editAreaValueType(self, index, varType): + self.areas[index].valueType = varType + + def getArea(self, index): + return self.areas[index] + + def getLength(self, nums, bytes): length = int(nums) * int(bytes) if length % 2 != 0: length = (length + 1) // 2 else: length = length / 2 - area.endAddress = startAddress + length - self.endAddress = area.endAddress - for index, address in range(area.startAddress, area.endAddress): - if index % bytes == 0 and self.protocolType == 'DP': - area. - - def getValueLength(self): - pass def writeAreas(self): @@ -38,7 +59,6 @@ class Device(): @classmethod def delAreas(self, deviceName, ids): - jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) for id in ids: jsonCon.pop(id - 1) @@ -64,6 +84,8 @@ class Device(): jsonCons = json.loads(jsonConsStr) return jsonCons + + class DevicesManange(): def __init__(self): self.dpMasterDevices = collections.OrderedDict() @@ -94,6 +116,28 @@ class DevicesManange(): device.startAddress = curProDict.values[-1].endAddress + 1 curProDict[deviceName] = device + def initDevices(self): + pass + + def delDevice(self): + for devicesDict in [self.paMasterDevices, self.paSlaveDevices, self.dpMasterDevices, self.dpSlaveDevices]: + if deviceName in devicesDict: + del deviceDict[deviceName] + self.recalculateAddress() + + def recalculateAddress(self, deviceDict): + for devicesDict in [self.paMasterDevices, self.paSlaveDevices, self.dpMasterDevices, self.dpSlaveDevices]: + for index, (deviceName, device) in enumerate(ordered_dict.items()): + device.startAddress = 0 in index = 0 else: device = previousDevice.endAddress + 1 + device.recalculateAddress() + previousDevice = device + + + def getDevice(self, deviceName): + for devicesDict in [self.paMasterDevices, self.paSlaveDevices, self.dpMasterDevices, self.dpSlaveDevices]: + if deviceName in devicesDict: + return devicesDict[deviceName] + @classmethod def addAreas(self, type, nums, bytes, deviceName): if DeviceDB.getByName(deviceName=deviceName).areaJson is None: diff --git a/protocol/ModBus/TCPMaster.py b/protocol/ModBus/TCPMaster.py index f4f8e1e..dbcbbd5 100644 --- a/protocol/ModBus/TCPMaster.py +++ b/protocol/ModBus/TCPMaster.py @@ -39,13 +39,7 @@ class TcpMaster(): address = address + 2 except Exception as e: return 'error' - # def writeSingleCoil(self, slaveId, address, outputValue): - # try: - # outputValue = int(outputValue) - # if outputValue in [0, 1]: - # self.master.execute(slaveId, cst.WRITE_SINGLE_COIL, address, output_value = outputValue) - # except Exception as e: - # return 'error' + def readHoldingRegisters(self, slaveId, startAddress, varNums, order = 'ABCD'): try: