import collections import json from utils.DBModels.DeviceModels import DeviceDB class Device(): areas = [] startAddress = None endAddress = None protocolType = None masterOrSlave = None def __init__(self): pass def addAreas(self, type, nums, bytes, deviceName): if DeviceDB.getByName(deviceName=deviceName).areaJson is None: jsonCon = ([{ "id": 1, "type": type, "nums": nums, "bytes": bytes, }]) else: jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) id = jsonCon[-1]["id"] + 1 jsonCon.append({ "id": id, "type": type, "nums": nums, "bytes": bytes, }) areaJson = json.dumps(jsonCon) DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() def getValueLength(self): pass def writeAreas(self): pass def delAreas(self, deviceNames, ids): for id in ids: deviceName = deviceNames jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) print(jsonCon[id - 1]) jsonCon.remove(jsonCon[id - 1]) if jsonCon == []: areaJson = None DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() else: i = 1 for areajsonId in jsonCon: areajsonId["id"] = i i += 1 areaJson = json.dumps(jsonCon) DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() def getAreaID(self, deviceNames): deviceName = deviceNames jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson if jsonConsStr is None: return else: jsonCons = json.loads(jsonConsStr) id = [] for jsonCon in jsonCons: id.append(jsonCon["id"]) return id def getAreaJson(self, deviceNames): deviceName = deviceNames jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson if jsonConsStr is None: return else: jsonCons = json.loads(jsonConsStr) return jsonCons 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每个设备的字节的总长度 @classmethod def getChannelLength(self, deviceName): number = 0 if DeviceDB.getByName(deviceName=deviceName).areaJson is None: return number else: numbers = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) for i in numbers: number += int(i['nums']) return number 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每个字节长度的起始值 def getAllDevice(self): # 查询所有设备 devices = DeviceDB.get_all() if devices is 'error': return l = [] for x in devices: l.append([x.deviceName, x.proType, x.masterSlaveModel, x.areaJson]) return l