From 95d461e5ede7c6a549c8d22ae43e3c66bc7c5da3 Mon Sep 17 00:00:00 2001 From: zcwBit Date: Mon, 29 Jul 2024 18:56:01 +0800 Subject: [PATCH] 0729 --- Static/PA块信息表.xlsx | Bin 36236 -> 36380 bytes UI/BlockParameterManageWidget.py | 18 ++++++++++----- UI/MainWindow.py | 4 ++-- model/ProjectModel/BlockManage.py | 35 ++++++++++++++++++++++++++---- protocol/ModBus/DPV1Master.py | 13 +++++++---- 5 files changed, 54 insertions(+), 16 deletions(-) diff --git a/Static/PA块信息表.xlsx b/Static/PA块信息表.xlsx index 1429c2e2632f52ac02f2c9441300ddf949681259..fd3044b66be1634315bbb72f17cd629eb01451b3 100644 GIT binary patch delta 19402 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 D+;bt* delta 19315 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�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 diff --git a/UI/BlockParameterManageWidget.py b/UI/BlockParameterManageWidget.py index 67b4cea..abb7533 100644 --- a/UI/BlockParameterManageWidget.py +++ b/UI/BlockParameterManageWidget.py @@ -77,6 +77,7 @@ class DynamicAddBlock(QHBoxLayout): self.buttonlist = [] self.blockViewlist = [] self.tbtypeList = TbtypeList #存放转换块的各种类型 + # print(self.tbtypeList) self.tbList = ['PressureTranslationBlock', 'TemperatureTranslationBlock', 'LevelTranslationBlock', 'FlowTranslationBlock'] #存放四个转换块 self.enumList = [TBType.pressureTB, TBType.tempTB, TBType.levelTB, TBType.flowTB] self.initUI() @@ -123,6 +124,7 @@ class DynamicAddBlock(QHBoxLayout): tbwidget.setLayout(tblayout) tbcombox = TbCombox() + # print(tbType) match tbType: case TBType.pressureTB: tbcombox.setCurrentIndex(0) @@ -131,14 +133,15 @@ class DynamicAddBlock(QHBoxLayout): tbcombox.setCurrentIndex(1) tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1)) case TBType.levelTB: + # print(2222) tbcombox.setCurrentIndex(2) tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1)) case TBType.flowTB: tbcombox.setCurrentIndex(3) tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1)) - tbcombox.setCurrentIndex(0) - tblockBtn = QPushButton('压力转换块' + str(i + 1)) + # tbcombox.setCurrentIndex(0) + # tblockBtn = QPushButton('压力转换块' + str(i + 1)) tblockBtn.setObjectName("tbparameBtn") # tblockBtn.setFixedSize(130, 43) tblockBtn.setCheckable(True) @@ -164,6 +167,7 @@ class DynamicAddBlock(QHBoxLayout): self.parameStackWidget = QStackedWidget() for view in self.blockViewlist: self.parameStackWidget.addWidget(view) + def switchParameterWidget(self, buttonType): for index , button in enumerate(self.buttonlist): @@ -173,10 +177,11 @@ class DynamicAddBlock(QHBoxLayout): def switchTbtype(self, index, combox, button): tbType = combox.itemText(index) - buttonNumber = button.text()[-1:] + buttonNumber = button.text()[-1] button.setText(tbType + str(buttonNumber)) if button.isChecked(): - stackIndex = (int(self.blocklist[0]) + int(self.blocklist[1]) + index) + (int(buttonNumber) - 1) * 4 + stackIndex = (int(self.blocklist[0]) + int(self.blocklist[2]) + index) + (int(buttonNumber) - 1) * 4 + self.parameStackWidget.setCurrentIndex(stackIndex) @@ -274,10 +279,10 @@ class BlockParameterManageWidget(QWidget): address = self.deviceAddressEdit.text() # print(address) if address: - pattern = re.compile(r'^(?:[1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-6])$') + pattern = re.compile(r'^(?:[1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-7])$') match = pattern.match(address) if not match: - QMessageBox.warning(self, '提示', '请输入2 - 126。') + QMessageBox.warning(self, '提示', '请输入2 - 127。') return if self.initUIstat: try: @@ -315,6 +320,7 @@ class BlockParameterManageWidget(QWidget): self.splitter = QSplitter() blocklist = self.blockManage.getBlockNums() TbtypeList = self.blockManage.TBTypeList + self.blockLayout = DynamicAddBlock(blocklist, TbtypeList) self.settingLayout.addLayout(self.blockLayout, 7) self.settingLayout.addWidget(self.splitter, 11) diff --git a/UI/MainWindow.py b/UI/MainWindow.py index 5c91515..229ca26 100644 --- a/UI/MainWindow.py +++ b/UI/MainWindow.py @@ -275,7 +275,7 @@ class MainWindow(QWidget): if self.switchBtn.isChecked(): if self.process: self.stackWidget.setCurrentIndex(1) - QTimer.singleShot(50, lambda:self.stackWidget.setCurrentIndex(2)) + QTimer.singleShot(50, lambda:self.stackWidget.setCurrentIndex(3)) else: self.stackWidget.setCurrentIndex(1) startupInfo = subprocess.STARTUPINFO() @@ -326,7 +326,7 @@ class MainWindow(QWidget): win32gui.SetParent(hwnd, int(self.winId())) - self.stackWidget.setCurrentIndex(2) + self.stackWidget.setCurrentIndex(3) def closeEvent(self, event): if self.process: diff --git a/model/ProjectModel/BlockManage.py b/model/ProjectModel/BlockManage.py index 1184913..530b994 100644 --- a/model/ProjectModel/BlockManage.py +++ b/model/ProjectModel/BlockManage.py @@ -71,7 +71,7 @@ class BlockManage(): return self._dpv1MasterDP def initBlocks(self): - print(self._isPa,5555) + # print(self._isPa,5555) if not self.DPV1Master.judgeSlave(self.address): raise RuntimeError(f"连接从站{self.address}失败.") self.blockDict = { @@ -94,12 +94,36 @@ class BlockManage(): NumCompListDirEntry = dirHeadDatas[5] # 功能块类型数量 复合列表目录登录项的个数 计数设备内的不同块类型(物理块、转换块和功能块)和对象类型 #(在本标准范围内仅针对链接对象) - dirLength = 4 * NumDirEntry + dirLength = 4 * NumCompListDirEntry dirDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 1, length = dirLength) dirDatas = struct.unpack('>{}h'.format(int(dirLength/2)), dirDatas) entryTuples = [(dirDatas[i], dirDatas[i+1]) for i in range(0, len(dirDatas), 2)] - + # print(entryTuples) + dirMesDic = {} + for dirMes in entryTuples: + blockIndex = struct.pack('>h', dirMes[0])[0] + blockNums = dirMes[1] + # print(blockIndex) + if blockIndex in dirMesDic: + dirMesDic[blockIndex] = dirMesDic[blockIndex] + blockNums + else: + dirMesDic[blockIndex] = blockNums + # print(dirMesDic) + entryTuples = [] + for key, value in dirMesDic.items(): + # print(key, value) + if key == 1: + data = self.DPV1Master.readParm(address = self.address, slot = 1, index = key, length = dirLength + 4 * value) + else: + data = self.DPV1Master.readParm(address = self.address, slot = 1, index = key, length = 4 * value) + # print(data, int(len(data)/2)) + print(data) + data = struct.unpack('>{}h'.format(int(len(data)/2)), data) + tuples = [(data[i], data[i+1]) for i in range(0, len(data), 2)] + entryTuples += tuples + # print(entryTuples) for typ in [BlockType.PB, BlockType.TB, BlockType.FB]: + # print(typ) typeIndex = typ.value if type(typ.value) == int else 1 blkDirMesByte = struct.pack('>h', entryTuples[typeIndex][0]) blkIndex = int(blkDirMesByte[0]) # 目录对象编号 @@ -121,11 +145,13 @@ class BlockManage(): block.blockIndex = i block.address = self.address block.addParms() + # print(block.startIndex, block.slot) if typ == BlockType.TB: self.TBTypeList.append(block.getTBType()) self.blockDict[typ].append(block) # print(blkSlot, blkIndex) # print(self.blockDict) + # print(self.TBTypeList) def getBlockValues(self, blockType, blockIndex, callback, callback2): block = self.resetBlockType(blockType, blockIndex) @@ -212,7 +238,8 @@ class Block(): return def getTBType(self): - value = self.parms[list(self.parms.keys())[0]].readValue() + value = int(self.parms[list(self.parms.keys())[0]].readValue()) + # print(value, type(value)) match value: case 1: return TBType.pressureTB diff --git a/protocol/ModBus/DPV1Master.py b/protocol/ModBus/DPV1Master.py index d1315ad..5ec1f28 100644 --- a/protocol/ModBus/DPV1Master.py +++ b/protocol/ModBus/DPV1Master.py @@ -75,15 +75,18 @@ class DPV1Master(): indexByte = index.to_bytes(1, byteorder='little') readByteStream = b'\x01' + hexAddress + slotByte + indexByte + b'\xF0\x00' readDate = struct.unpack('>hhh', readByteStream) - self.writeMultipleRegister(1, 750, self.resetData) + # self.writeMultipleRegister(1, 750, self.resetData) + # time.sleep(0.1) self.writeMultipleRegister(1, 750, readDate) - time.sleep(0.4) + time.sleep(1.1) value = self.readHoldingRegisters(1, 750, -(-length // 2)) # -(-length // 2)向上取整 + # print(value, 222) if value[0] == 57344: self.writeMultipleRegister(1, 750, self.resetData) time.sleep(0.1) return '读取错误' value = struct.pack('>{}H'.format(len(value)), *value)[:length] + # print(value) # print(address, slot, index) # print(value) self.writeMultipleRegister(1, 750, self.resetData) @@ -105,7 +108,7 @@ class DPV1Master(): # print(len(writeByteStream)) writeDate = struct.unpack('>{}h'.format(len(writeByteStream) // 2), writeByteStream) self.writeMultipleRegister(1, 750, writeDate) - time.sleep(0.3) + time.sleep(0.4) value = self.readHoldingRegisters(1, 750, 2) if value[0] == 57344: result = '写入错误' @@ -120,8 +123,10 @@ class DPV1Master(): searchByteStream = b'\x01' + hexAddress + b'\x01\x00\xF0\x00' searchDate = struct.unpack('>hhh', searchByteStream) self.writeMultipleRegister(1, 750, searchDate) - time.sleep(0.3) + time.sleep(1.1) dir = self.readHoldingRegisters(1, 750, 6) + time.sleep(0.1) + # print(dir) self.writeMultipleRegister(1, 750, self.resetData) time.sleep(0.1) if not self.areAllZeros(dir) and dir != 'error':