main
zcwBit 1 year ago
parent c738ed85e4
commit 95d461e5ed

Binary file not shown.

@ -77,6 +77,7 @@ class DynamicAddBlock(QHBoxLayout):
self.buttonlist = [] self.buttonlist = []
self.blockViewlist = [] self.blockViewlist = []
self.tbtypeList = TbtypeList #存放转换块的各种类型 self.tbtypeList = TbtypeList #存放转换块的各种类型
# print(self.tbtypeList)
self.tbList = ['PressureTranslationBlock', 'TemperatureTranslationBlock', 'LevelTranslationBlock', 'FlowTranslationBlock'] #存放四个转换块 self.tbList = ['PressureTranslationBlock', 'TemperatureTranslationBlock', 'LevelTranslationBlock', 'FlowTranslationBlock'] #存放四个转换块
self.enumList = [TBType.pressureTB, TBType.tempTB, TBType.levelTB, TBType.flowTB] self.enumList = [TBType.pressureTB, TBType.tempTB, TBType.levelTB, TBType.flowTB]
self.initUI() self.initUI()
@ -123,6 +124,7 @@ class DynamicAddBlock(QHBoxLayout):
tbwidget.setLayout(tblayout) tbwidget.setLayout(tblayout)
tbcombox = TbCombox() tbcombox = TbCombox()
# print(tbType)
match tbType: match tbType:
case TBType.pressureTB: case TBType.pressureTB:
tbcombox.setCurrentIndex(0) tbcombox.setCurrentIndex(0)
@ -131,14 +133,15 @@ class DynamicAddBlock(QHBoxLayout):
tbcombox.setCurrentIndex(1) tbcombox.setCurrentIndex(1)
tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1)) tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1))
case TBType.levelTB: case TBType.levelTB:
# print(2222)
tbcombox.setCurrentIndex(2) tbcombox.setCurrentIndex(2)
tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1)) tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1))
case TBType.flowTB: case TBType.flowTB:
tbcombox.setCurrentIndex(3) tbcombox.setCurrentIndex(3)
tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1)) tblockBtn = QPushButton(tbcombox.currentText() + str(i + 1))
tbcombox.setCurrentIndex(0) # tbcombox.setCurrentIndex(0)
tblockBtn = QPushButton('压力转换块' + str(i + 1)) # tblockBtn = QPushButton('压力转换块' + str(i + 1))
tblockBtn.setObjectName("tbparameBtn") tblockBtn.setObjectName("tbparameBtn")
# tblockBtn.setFixedSize(130, 43) # tblockBtn.setFixedSize(130, 43)
tblockBtn.setCheckable(True) tblockBtn.setCheckable(True)
@ -165,6 +168,7 @@ class DynamicAddBlock(QHBoxLayout):
for view in self.blockViewlist: for view in self.blockViewlist:
self.parameStackWidget.addWidget(view) self.parameStackWidget.addWidget(view)
def switchParameterWidget(self, buttonType): def switchParameterWidget(self, buttonType):
for index , button in enumerate(self.buttonlist): for index , button in enumerate(self.buttonlist):
if button == buttonType: if button == buttonType:
@ -173,10 +177,11 @@ class DynamicAddBlock(QHBoxLayout):
def switchTbtype(self, index, combox, button): def switchTbtype(self, index, combox, button):
tbType = combox.itemText(index) tbType = combox.itemText(index)
buttonNumber = button.text()[-1:] buttonNumber = button.text()[-1]
button.setText(tbType + str(buttonNumber)) button.setText(tbType + str(buttonNumber))
if button.isChecked(): 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) self.parameStackWidget.setCurrentIndex(stackIndex)
@ -274,10 +279,10 @@ class BlockParameterManageWidget(QWidget):
address = self.deviceAddressEdit.text() address = self.deviceAddressEdit.text()
# print(address) # print(address)
if 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) match = pattern.match(address)
if not match: if not match:
QMessageBox.warning(self, '提示', '请输入2 - 126') QMessageBox.warning(self, '提示', '请输入2 - 127')
return return
if self.initUIstat: if self.initUIstat:
try: try:
@ -315,6 +320,7 @@ class BlockParameterManageWidget(QWidget):
self.splitter = QSplitter() self.splitter = QSplitter()
blocklist = self.blockManage.getBlockNums() blocklist = self.blockManage.getBlockNums()
TbtypeList = self.blockManage.TBTypeList TbtypeList = self.blockManage.TBTypeList
self.blockLayout = DynamicAddBlock(blocklist, TbtypeList) self.blockLayout = DynamicAddBlock(blocklist, TbtypeList)
self.settingLayout.addLayout(self.blockLayout, 7) self.settingLayout.addLayout(self.blockLayout, 7)
self.settingLayout.addWidget(self.splitter, 11) self.settingLayout.addWidget(self.splitter, 11)

@ -275,7 +275,7 @@ class MainWindow(QWidget):
if self.switchBtn.isChecked(): if self.switchBtn.isChecked():
if self.process: if self.process:
self.stackWidget.setCurrentIndex(1) self.stackWidget.setCurrentIndex(1)
QTimer.singleShot(50, lambda:self.stackWidget.setCurrentIndex(2)) QTimer.singleShot(50, lambda:self.stackWidget.setCurrentIndex(3))
else: else:
self.stackWidget.setCurrentIndex(1) self.stackWidget.setCurrentIndex(1)
startupInfo = subprocess.STARTUPINFO() startupInfo = subprocess.STARTUPINFO()
@ -326,7 +326,7 @@ class MainWindow(QWidget):
win32gui.SetParent(hwnd, int(self.winId())) win32gui.SetParent(hwnd, int(self.winId()))
self.stackWidget.setCurrentIndex(2) self.stackWidget.setCurrentIndex(3)
def closeEvent(self, event): def closeEvent(self, event):
if self.process: if self.process:

@ -71,7 +71,7 @@ class BlockManage():
return self._dpv1MasterDP return self._dpv1MasterDP
def initBlocks(self): def initBlocks(self):
print(self._isPa,5555) # print(self._isPa,5555)
if not self.DPV1Master.judgeSlave(self.address): if not self.DPV1Master.judgeSlave(self.address):
raise RuntimeError(f"连接从站{self.address}失败.") raise RuntimeError(f"连接从站{self.address}失败.")
self.blockDict = { self.blockDict = {
@ -94,12 +94,36 @@ class BlockManage():
NumCompListDirEntry = dirHeadDatas[5] # 功能块类型数量 复合列表目录登录项的个数 计数设备内的不同块类型(物理块、转换块和功能块)和对象类型 NumCompListDirEntry = dirHeadDatas[5] # 功能块类型数量 复合列表目录登录项的个数 计数设备内的不同块类型(物理块、转换块和功能块)和对象类型
#(在本标准范围内仅针对链接对象) #(在本标准范围内仅针对链接对象)
dirLength = 4 * NumDirEntry dirLength = 4 * NumCompListDirEntry
dirDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 1, length = dirLength) dirDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 1, length = dirLength)
dirDatas = struct.unpack('>{}h'.format(int(dirLength/2)), dirDatas) dirDatas = struct.unpack('>{}h'.format(int(dirLength/2)), dirDatas)
entryTuples = [(dirDatas[i], dirDatas[i+1]) for i in range(0, len(dirDatas), 2)] 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]: for typ in [BlockType.PB, BlockType.TB, BlockType.FB]:
# print(typ)
typeIndex = typ.value if type(typ.value) == int else 1 typeIndex = typ.value if type(typ.value) == int else 1
blkDirMesByte = struct.pack('>h', entryTuples[typeIndex][0]) blkDirMesByte = struct.pack('>h', entryTuples[typeIndex][0])
blkIndex = int(blkDirMesByte[0]) # 目录对象编号 blkIndex = int(blkDirMesByte[0]) # 目录对象编号
@ -121,11 +145,13 @@ class BlockManage():
block.blockIndex = i block.blockIndex = i
block.address = self.address block.address = self.address
block.addParms() block.addParms()
# print(block.startIndex, block.slot)
if typ == BlockType.TB: if typ == BlockType.TB:
self.TBTypeList.append(block.getTBType()) self.TBTypeList.append(block.getTBType())
self.blockDict[typ].append(block) self.blockDict[typ].append(block)
# print(blkSlot, blkIndex) # print(blkSlot, blkIndex)
# print(self.blockDict) # print(self.blockDict)
# print(self.TBTypeList)
def getBlockValues(self, blockType, blockIndex, callback, callback2): def getBlockValues(self, blockType, blockIndex, callback, callback2):
block = self.resetBlockType(blockType, blockIndex) block = self.resetBlockType(blockType, blockIndex)
@ -212,7 +238,8 @@ class Block():
return return
def getTBType(self): 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: match value:
case 1: case 1:
return TBType.pressureTB return TBType.pressureTB

@ -75,15 +75,18 @@ class DPV1Master():
indexByte = index.to_bytes(1, byteorder='little') indexByte = index.to_bytes(1, byteorder='little')
readByteStream = b'\x01' + hexAddress + slotByte + indexByte + b'\xF0\x00' readByteStream = b'\x01' + hexAddress + slotByte + indexByte + b'\xF0\x00'
readDate = struct.unpack('>hhh', readByteStream) 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) self.writeMultipleRegister(1, 750, readDate)
time.sleep(0.4) time.sleep(1.1)
value = self.readHoldingRegisters(1, 750, -(-length // 2)) # -(-length // 2)向上取整 value = self.readHoldingRegisters(1, 750, -(-length // 2)) # -(-length // 2)向上取整
# print(value, 222)
if value[0] == 57344: if value[0] == 57344:
self.writeMultipleRegister(1, 750, self.resetData) self.writeMultipleRegister(1, 750, self.resetData)
time.sleep(0.1) time.sleep(0.1)
return '读取错误' return '读取错误'
value = struct.pack('>{}H'.format(len(value)), *value)[:length] value = struct.pack('>{}H'.format(len(value)), *value)[:length]
# print(value)
# print(address, slot, index) # print(address, slot, index)
# print(value) # print(value)
self.writeMultipleRegister(1, 750, self.resetData) self.writeMultipleRegister(1, 750, self.resetData)
@ -105,7 +108,7 @@ class DPV1Master():
# print(len(writeByteStream)) # print(len(writeByteStream))
writeDate = struct.unpack('>{}h'.format(len(writeByteStream) // 2), writeByteStream) writeDate = struct.unpack('>{}h'.format(len(writeByteStream) // 2), writeByteStream)
self.writeMultipleRegister(1, 750, writeDate) self.writeMultipleRegister(1, 750, writeDate)
time.sleep(0.3) time.sleep(0.4)
value = self.readHoldingRegisters(1, 750, 2) value = self.readHoldingRegisters(1, 750, 2)
if value[0] == 57344: if value[0] == 57344:
result = '写入错误' result = '写入错误'
@ -120,8 +123,10 @@ class DPV1Master():
searchByteStream = b'\x01' + hexAddress + b'\x01\x00\xF0\x00' searchByteStream = b'\x01' + hexAddress + b'\x01\x00\xF0\x00'
searchDate = struct.unpack('>hhh', searchByteStream) searchDate = struct.unpack('>hhh', searchByteStream)
self.writeMultipleRegister(1, 750, searchDate) self.writeMultipleRegister(1, 750, searchDate)
time.sleep(0.3) time.sleep(1.1)
dir = self.readHoldingRegisters(1, 750, 6) dir = self.readHoldingRegisters(1, 750, 6)
time.sleep(0.1)
# print(dir)
self.writeMultipleRegister(1, 750, self.resetData) self.writeMultipleRegister(1, 750, self.resetData)
time.sleep(0.1) time.sleep(0.1)
if not self.areAllZeros(dir) and dir != 'error': if not self.areAllZeros(dir) and dir != 'error':

Loading…
Cancel
Save