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.

181 lines
6.4 KiB
Python

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