0906更新

main
zcwBit 2 years ago
parent 7e79b14533
commit 32f576d927

@ -21,7 +21,7 @@ class DelAreaWidget(QDialog):
def initUI(self): def initUI(self):
vorlayout = QVBoxLayout() #主布局 vorlayout = QVBoxLayout() #主布局
# layout = QGridLayout() # layout = QGridLayout()
jsonCons = Device().getAreaJson(self.deviceName) jsonCons = Device.getAreaJson(self.deviceName)
row = 1 row = 1
if jsonCons is None: if jsonCons is None:

@ -37,6 +37,7 @@ class MainWindow(QMainWindow):
self.widgetList= [] self.widgetList= []
self.initUI() self.initUI()
self.initAreaWidget() self.initAreaWidget()
self.projectManage = DevicesManange()
def initUI(self): def initUI(self):
@ -103,7 +104,7 @@ class MainWindow(QMainWindow):
horizontalLayout.addWidget(newbtn) horizontalLayout.addWidget(newbtn)
horizontalLayout.addItem(self.horizontalSpacer) horizontalLayout.addItem(self.horizontalSpacer)
# horizontalLayout.addWidget(delbth) horizontalLayout.addWidget(delbth)
newbtn.clicked.connect(lambda: self.newAreaWidget(sub_window)) newbtn.clicked.connect(lambda: self.newAreaWidget(sub_window))
delbth.clicked.connect(lambda: self.delAreaWidget(sub_window)) delbth.clicked.connect(lambda: self.delAreaWidget(sub_window))
@ -135,7 +136,7 @@ class MainWindow(QMainWindow):
pass pass
def initAreaWidget(self): def initAreaWidget(self):
alldevices = DevicesManange().getAllDevice() alldevices = DevicesManange.getAllDevice()
for devices in alldevices: for devices in alldevices:
layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout() layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout()
@ -181,8 +182,8 @@ class MainWindow(QMainWindow):
if dialog.exec_() == QDialog.Accepted: if dialog.exec_() == QDialog.Accepted:
varType, channelNums, channelBytes = dialog.getParameters() varType, channelNums, channelBytes = dialog.getParameters()
number = DevicesManange.getChannelLength(deviceName) number = DevicesManange.getChannelLength(deviceName)
Device().addAreas(varType, channelNums, channelBytes, deviceName) DevicesManange.addAreas(varType, channelNums, channelBytes, deviceName)
areaId = Device().getAreaID(deviceName)[-1] areaId = DevicesManange.getAreaID(deviceName)[-1]
else: else:
return return
@ -270,12 +271,12 @@ class MainWindow(QMainWindow):
areas = devicelist[deviceName][:] areas = devicelist[deviceName][:]
area = areas[areaId - 1] area = areas[areaId - 1]
for are in area: for are in area:
for widget in range(2, 6): for widget in range(2, 7):
areaLayout.removeWidget(are[widget]) areaLayout.removeWidget(are[widget])
are[widget].deleteLater() are[widget].deleteLater()
devicelist[deviceName].remove(area) devicelist[deviceName].remove(area)
Device().delAreas(deviceName,rowAndColumn) Device.delAreas(deviceName,rowAndColumn)
# self.updateLayout(areaLayout) # self.updateLayout(areaLayout)
else: else:

@ -8,7 +8,7 @@ import sys
if __name__ == '__main__': if __name__ == '__main__':
app = QApplication(sys.argv) app = QApplication(sys.argv)
# app.setStyle(QStyleFactory.create('Fusion')) app.setStyle(QStyleFactory.create('Fusion'))
app.setStyleSheet(CommonHelper.readQss('static/main.qss')) app.setStyleSheet(CommonHelper.readQss('static/main.qss'))
Client.initDB() Client.initDB()
window = MainWindow() window = MainWindow()

@ -27,99 +27,13 @@ jsonCon = json.dumps([{
class Area(): class Area():
startAddress = DevicesManange().getAddress() startAddress = None
endAddress = None endAddress = None
bytes = None bytes = None
type = None
addressList = []
def __init__(self): def __init__(self):
pass
self.masterRealtimeValue = []
self.slaveRealtimeValue = []
self.masterForceValue = []
self.slaveForceValue = []
self.masterValues = []
self.slaveValues = []
# self.id = areaJson["id"]
# self.type = areaJson["type"]
# self.nums = areaJson["nums"]
# self.bytes = areaJson["bytes"]
# self.values = [0] * self.nums
# self.writeValues = [0] * self.nums
# def getallAreaAddress(self):
# self.masterRegisterAddress = []
# self.slaveRegisterAddress = []
# self.masterDevicesAddressStart, self.SlaveDevicesAddressStart = DevicesManange().getByteLengthStart()
# print(self.masterDevicesAddressStart, self.SlaveDevicesAddressStart, 'ssss')
# for key in self.masterDevicesAddressStart:
# if DeviceDB.getByName(deviceName=key).areaJson is not None:
# registerAddress = 0
# jsonCon = json.loads(DeviceDB.getByName(deviceName=key).areaJson)
# for jsonKey in jsonCon:
# nums = int(jsonKey["nums"])
# bytes = int(jsonKey["bytes"])
# for i in range(nums):
# if bytes % 2 == 0:
# byte = bytes // 2
# else:
# byte = (bytes+1) // 2
# registerAddress = registerAddress + byte
# self.masterRegisterAddress.append(self.masterDevicesAddressStart[key] + registerAddress)
#
#
# for key in self.SlaveDevicesAddressStart:
# if DeviceDB.getByName(deviceName=key).areaJson is not None:
# registerAddress = 0
# jsonCon = json.loads(DeviceDB.getByName(deviceName=key).areaJson)
# for jsonKey in jsonCon:
# nums = int(jsonKey["nums"])
# bytes = int(jsonKey["bytes"])
# for i in range(nums):
# if bytes % 2 == 0:
# byte = bytes // 2
# else:
# byte = (bytes + 1) // 2
# registerAddress = registerAddress + byte
# self.slaveRegisterAddress.append(self.SlaveDevicesAddressStart[key] + registerAddress)
#
# print(self.masterRegisterAddress, self.slaveRegisterAddress)
# return self.masterRegisterAddress, self.slaveRegisterAddress #按顺序返回所有的寄存器地址
# def getallAreaValue(self,sub_windows):
# self.sub_windows = sub_windows
#
# for sub_window in sub_windows:
# if '主站' in sub_window.windowTitle():
# areaLayout = sub_window.widget().widget().layout().itemAt(1).widget().layout()
# for row in range(areaLayout.rowCount()):
# for column in range(areaLayout.columnCount()):
# widget_item = areaLayout.itemAtPosition(row, column)
# if widget_item is not None:
# widget = widget_item.widget()
# if isinstance(widget, QLineEdit):
# line_edit_text = widget.text()
# concurrent_label = areaLayout.itemAtPosition(row, column - 1).widget().text()
# proTypeLabel = areaLayout.itemAtPosition(row, column - 2).widget()
# self.masterRealtimeValue.append(concurrent_label)
# self.masterForceValue.append(line_edit_text)
# else:
# areaLayout = sub_window.widget().widget().layout().itemAt(1).widget().layout()
# for row in range(areaLayout.rowCount()):
# for column in range(areaLayout.columnCount()):
# widget_item = areaLayout.itemAtPosition(row, column)
# if widget_item is not None:
# widget = widget_item.widget()
# if isinstance(widget, QLineEdit):
# line_edit_text = widget.text()
# concurrent_label = areaLayout.itemAtPosition(row, column - 1).widget().text()
# proTypeLabel = areaLayout.itemAtPosition(row, column - 2).widget()
# self.slaveRealtimeValue.append(concurrent_label)
# self.slaveForceValue.append(line_edit_text)
# self.masterRealtimeValue = [int(s) if s.isdigit() else float(s) for s in self.masterRealtimeValue]
# self.slaveRealtimeValue = [int(s) if s.isdigit() else float(s) for s in self.slaveRealtimeValue]
# self.masterForceValue = [int(s) if s.isdigit() else float(s) for s in self.masterForceValue]
# self.slaveForceValue = [int(s) if s.isdigit() else float(s) for s in self.slaveForceValue]
def writeValues(self): def writeValues(self):

@ -1,36 +1,32 @@
import collections import collections
import json import json
from utils.DBModels.DeviceModels import DeviceDB from utils.DBModels.DeviceModels import DeviceDB
from model.ProjectModel.AreaManage import Area
class Device(): class Device():
areas = [] areas = []
startAddress = None startAddress = None
endAddress = None endAddress = 0
protocolType = None protocolType = None
masterOrSlave = None masterOrSlave = None
deviceName = None
def __init__(self): def __init__(self):
pass pass
def addAreas(self, type, nums, bytes, deviceName): def addArea(self, type, nums, bytes):
if DeviceDB.getByName(deviceName=deviceName).areaJson is None: area = Area()
jsonCon = ([{ area.startAddress = self.endAddress
"id": 1, length = int(nums) * int(bytes)
"type": type, if length % 2 != 0:
"nums": nums, length = (length + 1) // 2
"bytes": bytes,
}])
else: else:
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) length = length / 2
id = jsonCon[-1]["id"] + 1 area.endAddress = startAddress + length
jsonCon.append({ self.endAddress = area.endAddress
"id": id, for index, address in range(area.startAddress, area.endAddress):
"type": type, if index % bytes == 0 and self.protocolType == 'DP':
"nums": nums, area.
"bytes": bytes,
})
areaJson = json.dumps(jsonCon)
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
def getValueLength(self): def getValueLength(self):
@ -40,6 +36,7 @@ class Device():
def writeAreas(self): def writeAreas(self):
pass pass
@classmethod
def delAreas(self, deviceName, ids): def delAreas(self, deviceName, ids):
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
@ -57,18 +54,7 @@ class Device():
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute() DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
def getAreaID(self, deviceNames): @classmethod
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): def getAreaJson(self, deviceNames):
deviceName = deviceNames deviceName = deviceNames
jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson
@ -80,61 +66,68 @@ class Device():
class DevicesManange(): class DevicesManange():
def __init__(self): def __init__(self):
self.masterDevices = collections.OrderedDict() self.dpMasterDevices = collections.OrderedDict()
self.slaveDevices = collections.OrderedDict() # 有序字典 (OrderedDict) self.dpSlaveDevices = collections.OrderedDict() # 有序字典 (OrderedDict)
self.initDevices() self.paMasterDevices = collections.OrderedDict()
self.paSlaveDevices = collections.OrderedDict()
def addDevice(self, proType, masterSlaveModel, deviceName):
device = Device()
device.type = proType
device.masterSlaveModel = masterSlaveModel
device.deviceName = deviceName
masterSlaveModel = masterSlaveModel
if proType == "DP" and masterSlaveModel == "主站":
curProDict = self.dpMasterDevices
elif proType == "DP" and masterSlaveModel == "从站":
curProDict = self.dpSlaveDevices
elif proType == "PA" and masterSlaveModel == "主站":
curProDict = self.paMasterDevices
elif proType == "PA" and masterSlaveModel == "从站":
curProDict = self.paSlaveDevices
if len(curProDict) == 0:
device.startAddress = 0
else:
device.startAddress = curProDict.values[-1].endAddress + 1
curProDict[deviceName] = device
def initDevices(self): @classmethod
devices = DeviceDB.get_all() 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()
if devices is 'error': @classmethod
def getAreaID(self, deviceNames):
deviceName = deviceNames
jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson
if jsonConsStr is None:
return 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: else:
byte = (bytes + 1) // 2 jsonCons = json.loads(jsonConsStr)
masterByteLong += int(numbers) * int(byte) id = []
self.masterDevices[devices] = masterByteLong for jsonCon in jsonCons:
elif masterSlaveModel == '从站': id.append(jsonCon["id"])
devices = x.deviceName return id
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
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)
return self.masterDevices, self.slaveDevices #分别返回PA和DP每个设备的字节的总长度
@classmethod @classmethod
def getChannelLength(self, deviceName): def getChannelLength(self, deviceName):
@ -150,21 +143,7 @@ class DevicesManange():
def editDevies(self): def editDevies(self):
pass pass
def getByteLengthStart(self): @classmethod
masterAddress = 0
slaveAddress = 0
masterAddressList = {}
slaveAddressList = {}
for key in self.masterDevices:
masterAddressList[key] = int(masterAddress)
masterAddress = int(self.masterDevices[key]) + masterAddress
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): def getAllDevice(self):
# 查询所有设备 # 查询所有设备
devices = DeviceDB.get_all() devices = DeviceDB.get_all()

@ -0,0 +1,27 @@
import re
from AreaManage import Area
from DeviceManage import Device
def importProject():
curSlave = 0
startAddress = 0
protocolType = None
devices = []
with open('program.txt', 'r') as f:
lines = f.readlines()
for line in lines:
if "协议类型选择" in line:
if line[-3:-2] == '0':
protocolType = "DP主站"
elif "-Slave [" in line:
device = Device()
pattern = r'\d+'
slaveIndex = re.findall(pattern, line)[0]
deviceName = protocolType + slaveIndex
if slaveIndex == "0":
device.startAddress = 0
elif
importProject()
Loading…
Cancel
Save