diff --git a/UI/DelAreaWidget.py b/UI/DelAreaWidget.py index fd57735..1c5ffaf 100644 --- a/UI/DelAreaWidget.py +++ b/UI/DelAreaWidget.py @@ -21,7 +21,7 @@ class DelAreaWidget(QDialog): def initUI(self): vorlayout = QVBoxLayout() #主布局 # layout = QGridLayout() - jsonCons = Device().getAreaJson(self.deviceName) + jsonCons = Device.getAreaJson(self.deviceName) row = 1 if jsonCons is None: diff --git a/UI/MainWindow.py b/UI/MainWindow.py index 413d7a1..1b1e5cb 100644 --- a/UI/MainWindow.py +++ b/UI/MainWindow.py @@ -37,6 +37,7 @@ class MainWindow(QMainWindow): self.widgetList= [] self.initUI() self.initAreaWidget() + self.projectManage = DevicesManange() def initUI(self): @@ -103,7 +104,7 @@ class MainWindow(QMainWindow): horizontalLayout.addWidget(newbtn) horizontalLayout.addItem(self.horizontalSpacer) - # horizontalLayout.addWidget(delbth) + horizontalLayout.addWidget(delbth) newbtn.clicked.connect(lambda: self.newAreaWidget(sub_window)) delbth.clicked.connect(lambda: self.delAreaWidget(sub_window)) @@ -135,7 +136,7 @@ class MainWindow(QMainWindow): pass def initAreaWidget(self): - alldevices = DevicesManange().getAllDevice() + alldevices = DevicesManange.getAllDevice() for devices in alldevices: layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout() @@ -181,8 +182,8 @@ class MainWindow(QMainWindow): if dialog.exec_() == QDialog.Accepted: varType, channelNums, channelBytes = dialog.getParameters() number = DevicesManange.getChannelLength(deviceName) - Device().addAreas(varType, channelNums, channelBytes, deviceName) - areaId = Device().getAreaID(deviceName)[-1] + DevicesManange.addAreas(varType, channelNums, channelBytes, deviceName) + areaId = DevicesManange.getAreaID(deviceName)[-1] else: return @@ -270,12 +271,12 @@ class MainWindow(QMainWindow): areas = devicelist[deviceName][:] area = areas[areaId - 1] for are in area: - for widget in range(2, 6): + for widget in range(2, 7): areaLayout.removeWidget(are[widget]) are[widget].deleteLater() devicelist[deviceName].remove(area) - Device().delAreas(deviceName,rowAndColumn) + Device.delAreas(deviceName,rowAndColumn) # self.updateLayout(areaLayout) else: diff --git a/bin.py b/bin.py index d0259db..cf96e85 100644 --- a/bin.py +++ b/bin.py @@ -8,7 +8,7 @@ import sys if __name__ == '__main__': app = QApplication(sys.argv) - # app.setStyle(QStyleFactory.create('Fusion')) + app.setStyle(QStyleFactory.create('Fusion')) app.setStyleSheet(CommonHelper.readQss('static/main.qss')) Client.initDB() window = MainWindow() diff --git a/model/ProjectModel/AreaManage.py b/model/ProjectModel/AreaManage.py index 0c880f0..d788e97 100644 --- a/model/ProjectModel/AreaManage.py +++ b/model/ProjectModel/AreaManage.py @@ -27,99 +27,13 @@ jsonCon = json.dumps([{ class Area(): - startAddress = DevicesManange().getAddress() + startAddress = None endAddress = None bytes = None + type = None + addressList = [] def __init__(self): - - 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] - + pass def writeValues(self): diff --git a/model/ProjectModel/DeviceManage.py b/model/ProjectModel/DeviceManage.py index 1eb0831..5e5b7f5 100644 --- a/model/ProjectModel/DeviceManage.py +++ b/model/ProjectModel/DeviceManage.py @@ -1,36 +1,32 @@ import collections import json from utils.DBModels.DeviceModels import DeviceDB +from model.ProjectModel.AreaManage import Area class Device(): areas = [] startAddress = None - endAddress = None + endAddress = 0 protocolType = None masterOrSlave = None + deviceName = 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, - }]) + def addArea(self, type, nums, bytes): + area = Area() + area.startAddress = self.endAddress + length = int(nums) * int(bytes) + if length % 2 != 0: + length = (length + 1) // 2 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() + 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): @@ -40,6 +36,7 @@ class Device(): def writeAreas(self): pass + @classmethod def delAreas(self, deviceName, ids): jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) @@ -57,18 +54,7 @@ class Device(): 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 - + @classmethod def getAreaJson(self, deviceNames): deviceName = deviceNames jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson @@ -80,61 +66,68 @@ class Device(): class DevicesManange(): def __init__(self): - self.masterDevices = collections.OrderedDict() - self.slaveDevices = collections.OrderedDict() # 有序字典 (OrderedDict) - self.initDevices() + self.dpMasterDevices = collections.OrderedDict() + self.dpSlaveDevices = collections.OrderedDict() # 有序字典 (OrderedDict) + 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): - devices = DeviceDB.get_all() + @classmethod + 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 - 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 - - - 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每个设备的字节的总长度 + jsonCons = json.loads(jsonConsStr) + id = [] + for jsonCon in jsonCons: + id.append(jsonCon["id"]) + return id + @classmethod def getChannelLength(self, deviceName): @@ -150,21 +143,7 @@ class DevicesManange(): 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 - - for key in self.slaveDevices: - slaveAddressList[key] = int(slaveAddress) - slaveAddress = int(self.slaveDevices[key]) + slaveAddress - print(masterAddressList, '主站', slaveAddressList, '从站') - return masterAddressList, slaveAddressList #返回PA和DP每个字节长度的起始值 - + @classmethod def getAllDevice(self): # 查询所有设备 devices = DeviceDB.get_all() diff --git a/model/ProjectModel/ImportProject.py b/model/ProjectModel/ImportProject.py new file mode 100644 index 0000000..2049619 --- /dev/null +++ b/model/ProjectModel/ImportProject.py @@ -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() \ No newline at end of file