import collections class Device(): areas = [] startAddress = None endAddress = None protocolType = None masterOrSlave = None def __init__(self): pass def addAreas(self): areas.append(Area()) def getValueLength(self): pass def writeAreas(self): pass class DevicesManange(): def __init__(self): self.masterDevices = collections.OrderedDict() self.slaveDevices = collections.OrderedDict() # 有序字典 (OrderedDict) self.initDevices() def initDevices(self): devices = DeviceDB.get_all() if devices is 'error': return for x in devices: masterSlaveModel = x.masterSlaveModel if masterSlaveModel == '主站': devices = x.deviceName masterByteLong = 0 if x.areaJson is not None: for y in json.loads(x.areaJson): numbers = y['nums'] bytes = int(y['bytes']) if bytes % 2 == 0: byte = bytes // 2 else: byte = (bytes + 1) // 2 masterByteLong += int(numbers) * int(byte) self.masterDevices[devices] = masterByteLong elif masterSlaveModel == '从站': devices = x.deviceName salveByteLong = 0 if x.areaJson is not None: for y in json.loads(x.areaJson): numbers = y['nums'] bytes = int(y['bytes']) if bytes % 2 == 0: byte = bytes // 2 else: byte = (bytes + 1) // 2 salveByteLong += int(numbers) * (byte) self.slaveDevices[devices] = salveByteLong print(self.masterDevices,self.slaveDevices,'分别返回PA和DP度') def addDevice(self, deviceName,channelNums, channelBytes): channelBytes = int(channelBytes) if channelBytes % 2 == 0: channelBytes = channelBytes // 2 else: channelBytes = (channelBytes + 1) // 2 if deviceName in self.masterDevices: self.masterDevices[deviceName] = self.masterDevices[deviceName] + int(channelNums) * int(channelBytes) elif deviceName in self.slaveDevices: self.slaveDevices[deviceName] = self.slaveDevices[deviceName] + int(channelNums) * int(channelBytes) elif '主站' in deviceName: self.masterDevices[deviceName] = int(channelNums) * int(channelBytes) elif '从站' in deviceName: self.slaveDevices[deviceName] = int(channelNums) * int(channelBytes) # print(self.masterDevices,self.slaveDevices,'分别返回PA和DP每个主站寄存器地址的总长度') return self.masterDevices, self.slaveDevices #分别返回PA和DP每个设备的字节的总长度 def editDevies(self): pass def getByteLengthStart(self): masterAddress = 0 slaveAddress = 0 masterAddressList = {} slaveAddressList = {} for key in self.masterDevices: masterAddressList[key] = int(masterAddress) masterAddress = int(self.masterDevices[key]) + masterAddress print(self.masterDevices[key],'dddd') for key in self.slaveDevices: slaveAddressList[key] = int(slaveAddress) slaveAddress = int(self.slaveDevices[key]) + slaveAddress print(masterAddressList, '主站', slaveAddressList, '从站') return masterAddressList, slaveAddressList #返回PA和DP每个字节长度的起始值