From 1654bc60ba2069b3b9593d1b5fdc134736fb14b1 Mon Sep 17 00:00:00 2001 From: "ADMINISTRATOR\\Administrator" <951937200@qq.com> Date: Wed, 19 Jun 2024 17:37:14 +0800 Subject: [PATCH] =?UTF-8?q?0619=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Static/PA块信息表.xlsx | Bin 37573 -> 36493 bytes UI/BlockParameterManageWidget.py | 15 ++-- UI/BlockParameterModel.py | 7 +- UI/LoadingDataWidget.py | 40 +++++----- UI/SearchAddressWidget.py | 4 +- model/ProjectModel/BlockManage.py | 62 ++++++++++++--- model/ProjectModel/ParmManage.py | 122 ++++++++++++++++++------------ protocol/ModBus/DPV1Master.py | 11 ++- 8 files changed, 167 insertions(+), 94 deletions(-) diff --git a/Static/PA块信息表.xlsx b/Static/PA块信息表.xlsx index b4a2b2ac247299bc75c54fdd7c301ce417a85809..534fa52d0069b0f82d5562ffe540d4995eacc5a2 100644 GIT binary patch literal 36493 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 literal 37573 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
  • 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 NV@L%yDZF|?`T$T7EkOVP diff --git a/UI/BlockParameterManageWidget.py b/UI/BlockParameterManageWidget.py index b729efa..b56c858 100644 --- a/UI/BlockParameterManageWidget.py +++ b/UI/BlockParameterManageWidget.py @@ -135,7 +135,6 @@ class DynamicAddBlock(QHBoxLayout): self.parameStackWidget.addWidget(view) def switchParameterWidget(self, buttonType): - for index , button in enumerate(self.buttonlist): if button == buttonType: self.parameStackWidget.setCurrentIndex(index) @@ -271,14 +270,20 @@ class BlockParameterManageWidget(QWidget): return self.loadingDataWidget = LoadingDataWidget() - self.loadingDataWidget.loadData() + self.loadingDataWidget.show() + # self.loadingDataWidget.loadData() blockView = self.blockLayout.parameStackWidget.currentWidget() model = blockView.model - model.updateColumn(5, '查询中sdadadsda\r\nsdasdsasasad\r\nasdsadsad...') - blockView.resizeHeader() - blockName = blockView.blockType + # model.updateColumn(5, '查询中sdadadsda\r\nsdasdsasasad\r\nasdsadsad...') + # blockView.resizeHeader() + blockType = blockView.blockType blcokIndex = blockView.blcokIndex + self.blockManage.getBlockValues(blockType = blockType, blockIndex = blcokIndex, callback = self.loadingDataWidget.loadData, callback2 = model.updateValue) + # print(valueList) + # model.updateValue(valueList) + # print(blockType, blcokIndex) + diff --git a/UI/BlockParameterModel.py b/UI/BlockParameterModel.py index 4dc0d41..ab2da97 100644 --- a/UI/BlockParameterModel.py +++ b/UI/BlockParameterModel.py @@ -30,7 +30,6 @@ class VarTableModel(QAbstractTableModel): def append_data(self, x): - self.datas.append(x) self.checkList = ['Unchecked'] * len(self.datas) self.table.proxy.invalidate() @@ -129,6 +128,12 @@ class VarTableModel(QAbstractTableModel): self.datas[sourceRow], self.datas[destinationChild] = self.datas[destinationChild], self.datas[sourceRow] self.table.proxy.invalidate() + def updateValue(self, valueList): + print(len(valueList), len(self.datas)) + for index, value in enumerate(valueList): + self.datas[index][5] = value + self.table.proxy.invalidate() + class VarButtonDelegate(QItemDelegate): diff --git a/UI/LoadingDataWidget.py b/UI/LoadingDataWidget.py index 65da807..2399855 100644 --- a/UI/LoadingDataWidget.py +++ b/UI/LoadingDataWidget.py @@ -1,7 +1,9 @@ import sys import time from PyQt5.QtWidgets import QApplication, QWidget, QDialog, QVBoxLayout, QPushButton, QLabel, QProgressBar -from PyQt5.QtCore import Qt, QThread, pyqtSignal +from PyQt5.QtCore import Qt, QThread, pyqtSignal, pyqtSlot + +from UI.SearchAddressWidget import CustomProgressBar class LoadDataThread(QThread): progress = pyqtSignal(int) @@ -11,16 +13,18 @@ class LoadDataThread(QThread): time.sleep(0.01) # 模拟数据加载过程 self.progress.emit(i) -class LoadingDialog(QDialog): +class LoadingDataWidget(QDialog): + # loadDataSignal = pyqtSignal(int, int) def __init__(self): super().__init__() self.initUI() + # self.loadDataSignal.connect(self.loadData) def initUI(self): vbox = QVBoxLayout() self.label = QLabel("加载数据中,请稍后...", self) - self.progressBar = QProgressBar(self) + self.progressBar = CustomProgressBar(self) vbox.addWidget(self.label) vbox.addWidget(self.progressBar) @@ -29,27 +33,17 @@ class LoadingDialog(QDialog): self.setWindowTitle('数据查询') self.setWindowFlags(Qt.Window | Qt.WindowTitleHint | Qt.CustomizeWindowHint) self.setModal(True) - - def updateProgress(self, value): + + # def loadSignalEmit(self, maxValue:int, value:int): + # # print(maxValue, value) + # self.loadDataSignal.emit(maxValue, value) + + @pyqtSlot(int, int) + def loadData(self, maxValue:int, value:int): + self.progressBar.setMaximum(maxValue) self.progressBar.setValue(value) - -class LoadingDataWidget(QWidget): - def __init__(self): - super().__init__() - - def loadData(self): - self.loadingDialog = LoadingDialog() - - # 创建和启动数据加载线程 - self.loadThread = LoadDataThread() - self.loadThread.progress.connect(self.loadingDialog.updateProgress) - self.loadThread.finished.connect(self.onLoadingFinished) - - self.loadThread.start() - self.loadingDialog.exec_() - - def onLoadingFinished(self): - self.loadingDialog.accept() + if maxValue == value: + self.accept() if __name__ == '__main__': app = QApplication(sys.argv) diff --git a/UI/SearchAddressWidget.py b/UI/SearchAddressWidget.py index a0b2173..51d4c76 100644 --- a/UI/SearchAddressWidget.py +++ b/UI/SearchAddressWidget.py @@ -19,11 +19,9 @@ class CustomProgressBar(QProgressBar): currentValue = self.value() maxValue = self.maximum() # 返回自定义的显示文本 - return f"{currentValue}/{maxValue}" + return f"正在加载{currentValue}/{maxValue}" - - class SearchAddressWidget(QWidget): def __init__(self, deviceAddressEdit): super().__init__() diff --git a/model/ProjectModel/BlockManage.py b/model/ProjectModel/BlockManage.py index 794f21b..92a9ba0 100644 --- a/model/ProjectModel/BlockManage.py +++ b/model/ProjectModel/BlockManage.py @@ -8,6 +8,27 @@ from utils.DBModels.DeviceParModels import * from protocol.ModBus.DPV1Master import DPV1Master from model.ProjectModel.ParmManage import Parm +import concurrent.futures + +import threading + +from PyQt5.QtCore import pyqtSignal, pyqtSlot, QThread + +class LoadDataThread(QThread): + loadDataSignal = pyqtSignal(int, int) + finished = pyqtSignal(list) + def __init__(self, parent): + super().__init__() + self.parent = parent + + + def run(self): + valueList = [] + for index, parm in enumerate(self.parent.parms): + self.loadDataSignal.emit(len(self.parent.parms), index + 1) + valueList.append(parm.readValue()) + self.finished.emit(valueList) + class BlockType(Enum): TB = 1 PB = 0 @@ -93,8 +114,15 @@ class BlockManage(): # print(blkSlot, blkIndex) # print(self.blockDict) - def getBlockValues(self, blockType, blockIndex): - pass + def getBlockValues(self, blockType, blockIndex, callback, callback2): + if not isinstance(blockType, BlockType): + typ = BlockType.TB + block = self.blockDict[typ][blockIndex] + block.blockType = blockType + block.addParms() + else: + block = self.blockDict[blockType][blockIndex] + return block.getParmsValue(callback, callback2) def getBlockNums(self): return [len(self.blockDict[BlockType.PB]), len(self.blockDict[BlockType.TB]), len(self.blockDict[BlockType.FB])] @@ -110,6 +138,7 @@ class Block(): numParms = None blockIndex = None address = None + loadDataSignal = pyqtSignal(int, int) def __init__(self, blockType, DPV1Master): self.parms = [] self.blockType = blockType @@ -117,10 +146,15 @@ class Block(): # self.addParms() def addParms(self): + self.parms = [] getParmsFunc = { BlockType.PB: PhysicalBlock.getallParame, - BlockType.TB: AIFunctionBlock.getallParame, - BlockType.FB: PressureTranslationBlock.getallParame, + BlockType.TB: PressureTranslationBlock.getallParame, + BlockType.FB: AIFunctionBlock.getallParame, + TBType.flowTB: FlowTranslationBlock.getallParame, + TBType.pressureTB: PressureTranslationBlock.getallParame, + TBType.tempTB: TemperatureTranslationBlock.getallParame, + TBType.levelTB: LevelTranslationBlock.getallParame, }.get(self.blockType, lambda: []) parmsData = getParmsFunc() @@ -128,18 +162,22 @@ class Block(): # print(parmData) # print(self.startIndex, 3214) parm = Parm(parmData, self.slot, self.startIndex, self) + self.parms.append(parm) + + def getParmsValue(self, callback, callback2): + valueList = [] + # self.loadDataSignal.connect(callback.loadData) + self.thread = LoadDataThread(self) + self.thread.loadDataSignal.connect(callback) + self.thread.start() + self.thread.finished.connect(callback2) + # thread.join() + # print(valueList) + # return valueList def getTBType(self): return - def setTBType(self): - pass - - - - - - if __name__ == '__main__': b = BlockManage(address = 55) diff --git a/model/ProjectModel/ParmManage.py b/model/ProjectModel/ParmManage.py index 83fffe5..f9e1023 100644 --- a/model/ProjectModel/ParmManage.py +++ b/model/ProjectModel/ParmManage.py @@ -32,31 +32,58 @@ class Parm(): def readValue(self): value = self.DPV1Master.readParm(address = self.address, slot = self.slot, index = self.realIndex, length = self.size) if value == '读取错误': - return + return '读取错误' else: - self.analysisValue(value) + return self.analysisValue(value) def analysisValue(self, value): - pass + match self.dataType: + case 'Unsigned8': + return self.unpackU8(value) + case 'Unsigned16': + return self.unpackU16(value) + case 'Unsigned32': + return self.unpackU32(value) + case 'Float': + return self.unpackFloat(value) + case '101': + return self.unpack101(value) + case 'DS-32': + return self.unpackDS32(value) + case 'DS-36': + return self.unpackDS36(value) + case 'DS-37': + return self.unpackDS37(value) + case 'DS-39': + return self.unpackDS39(value) + case 'DS-50': + return self.unpackDS50(value) + case 'OctetString' | 'VisibleString': + return self.unpackStr(value) + case _: + return str(value) def unpackU8(self, value): - return str(struct.unpack('>b', value)) + return str(struct.unpack('>b', value)[0]) def unpackU16(self, value): - return str(struct.unpack('>h', value)) + return str(struct.unpack('>h', value)[0]) + + def unpackU32(self, value): + return str(struct.unpack('>i', value)[0]) def unpackFloat(self, value): - return str(struct.unpack('>f', value)) + return str(round(struct.unpack('>f', value)[0], 4)) def unpackStr(self, value): - return struct.unpack('{}s'.format(str(len(value))), value) + return struct.unpack('{}s'.format(str(len(value))), value)[0] def unpack101(self, value): - valueByte, statusByte = value[:4], value[4] - value = self.unpackFloat(valueByte) - status = self.unpackU8(statusByte) - displayStr = '值:{} 状态:{}'.format(value, status) - return displayStr + valueByte, statusByte = value[:4], value[4].to_bytes(1, byteorder='little') + value = self.unpackFloat(valueByte) + status = self.unpackU8(statusByte) + displayStr = '值:{} 状态:{}'.format(value, status) + return displayStr def unpackDS32(self, value): reserved = self.unpackU8(value[0:1]) @@ -72,54 +99,55 @@ class Parm(): numberOfParameters = self.unpackU16(value[15:17]) addressOfView1 = self.unpackU16(value[17:19]) numberOfViews = self.unpackU8(value[19:20]) - return + return '' def unpackDS36(self, value): - EU100Byte, EU0Byte, unitByte, decPointByte = value[:4], value[4:], value[8:10], value[10] - EU100 = self.unpackFloat(EU100Byte) - EU0 = self.unpackFloat(EU0Byte) - decPoint = self.unpackU8(decPointByte) - unitValue = self.unpackU16(unitByte) - unit = self.unitConver(unitValue) - displayStr = '有效上限:{} 有效下限:{} 单位:{} 小数点:{}'.format(EU100, EU0, unit, decPoint) - return displayStr + EU100Byte, EU0Byte, unitByte, decPointByte = value[:4], value[4:], value[8:10], value[10].to_bytes(1, byteorder='little') + EU100 = self.unpackFloat(EU100Byte) + EU0 = self.unpackFloat(EU0Byte) + decPoint = self.unpackU8(decPointByte) + unitValue = self.unpackU16(unitByte) + unit = self.unitConver(unitValue) + displayStr = '有效上限:{}\r\n有效下限:{}\r\n单位:{}\r\n小数点:{}'.format(EU100, EU0, unit, decPoint) + return displayStr def unpackDS37(self, value): - actualByte, permitByte, normalByte = value[0], value[1], value[2] - actualMode = self.unpackU8(actualByte) - permitMode = self.unpackU8(permitByte) - normalMode = self.unpackU8(normalByte) - displayStr = '实际模式:{} 允许模式:{} 正常模式:{}'.format(actualMode, permitMode, normalMode) - return displayStr + actualByte, permitByte, normalByte = value[0].to_bytes(1, byteorder='little'), value[1].to_bytes(1, byteorder='little'), value[2].to_bytes(1, byteorder='little') + print(type(actualByte), permitByte, normalByte) + actualMode = self.unpackU8(actualByte) + permitMode = self.unpackU8(permitByte) + normalMode = self.unpackU8(normalByte) + displayStr = '实际模式:{}\r\n允许模式:{}\r\n正常模式:{}'.format(actualMode, permitMode, normalMode) + return displayStr def unpackDS39(self, value): - unacknowledgByte, alarmStateByte, timeStampByte, subcodeByte, alarmValueByte = value[0], value[1], value[2:10], value[10:12], value[12:16] - unacknowledg = self.unpackU8(unacknowledgByte) - alarmState = self.unpackU8(alarmStateByte) - subcode = self.unpackU16(subcodeByte) - alarmValue = self.unpackFloat(alarmValueByte) - timestamp = int.from_bytes(timeStampByte, byteorder='big') - timeStr = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)) - displayStr = 'Unacknowledged:{} 有无报警{} 时间戳:{} 报警原因:{} 引起报警的值:{}'.format(unacknowledg, alarmState, timeStr, subcode, alarmValue) - return displayStr + unacknowledgByte, alarmStateByte, timeStampByte, subcodeByte, alarmValueByte = value[0].to_bytes(1, byteorder='little'), value[1].to_bytes(1, byteorder='little'), value[2:10], value[10:12], value[12:16] + unacknowledg = self.unpackU8(unacknowledgByte) + alarmState = self.unpackU8(alarmStateByte) + subcode = self.unpackU16(subcodeByte) + alarmValue = self.unpackFloat(alarmValueByte) + timestamp = int.from_bytes(timeStampByte, byteorder='big') + timeStr = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp)) + displayStr = 'Unacknowledged:{}\r\n有无报警{}\r\n时间戳:{}\r\n报警原因:{}\r\n引起报警的值:{}'.format(unacknowledg, alarmState, timeStr, subcode, alarmValue) + return displayStr def unpackDS50(self, value): - simulateStatusByte, simulateValueByte, simulateEnabledByte = value[0], value[1:5], value[5] - simulateStatus = self.unpackU8(simulateStatusByte) - simulateValue = self.unpackFloat(simulateValueByte) - simulateEnabled = self.unpackU8(simulateEnabledByte) - displayStr = '仿真值状态:{} 仿真值:{} 是否启用仿真:{}' - return displayStr + simulateStatusByte, simulateValueByte, simulateEnabledByte = value[0].to_bytes(1, byteorder='little'), value[1:5], value[5].to_bytes(1, byteorder='little') + simulateStatus = self.unpackU8(simulateStatusByte) + simulateValue = self.unpackFloat(simulateValueByte) + simulateEnabled = self.unpackU8(simulateEnabledByte) + displayStr = '仿真值状态:{}\r\n仿真值:{}\r\n是否启用仿真:{}' + return displayStr def packU8(self, value): - return struct.pack('>b', value) + return struct.pack('>b', value) def packU16(self, value): - return struct.pack('>h', value) + return struct.pack('>h', value) def packFloat(self, value): - return struct.pack('>f', value) + return struct.pack('>f', value) def pack101(self, value, status): valueByte = self.packFloat(value) @@ -143,5 +171,5 @@ class Parm(): return packedData def unitConver(self, unitValue): - unit, desc = '1', '1' - return unit + desc \ No newline at end of file + unit, desc = '1', '1' + return unit + desc \ No newline at end of file diff --git a/protocol/ModBus/DPV1Master.py b/protocol/ModBus/DPV1Master.py index b7f8f83..de52772 100644 --- a/protocol/ModBus/DPV1Master.py +++ b/protocol/ModBus/DPV1Master.py @@ -20,8 +20,7 @@ class SearchSlaveThread(threading.Thread): for address in range(1, 126): if not self.stopEvent.is_set(): self.callback(address, self.master.judgeSlave(address)) - - + def stop(self): self.stopEvent.set() @@ -76,11 +75,17 @@ class DPV1Master(): indexByte = index.to_bytes(1, byteorder='little') readByteStream = b'\x01' + hexAddress + slotByte + indexByte + b'\xF0\x00' searchDate = struct.unpack('>hhh', readByteStream) + self.writeMultipleRegister(1, 750, self.resetData) self.writeMultipleRegister(1, 750, searchDate) time.sleep(0.3) value = self.readHoldingRegisters(1, 750, -(-length // 2)) # -(-length // 2)向上取整 + 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(address, slot, index) # print(value) - value = struct.pack('>{}h'.format(len(value)), *value)[:length] self.writeMultipleRegister(1, 750, self.resetData) time.sleep(0.1) if callable(callback):