0617更新

main
parent 8be2487217
commit 05ed11191e

@ -7,8 +7,12 @@ from UI.BlockParameterView import ParmView
from UI.SearchAddressWidget import SearchAddressWidget from UI.SearchAddressWidget import SearchAddressWidget
from utils.DBModels.DeviceParModels import * from utils.DBModels.DeviceParModels import *
from utils import Globals
from UI.LoadingDataWidget import LoadingDataWidget from UI.LoadingDataWidget import LoadingDataWidget
from model.ProjectModel.BlockManage import BlockManage
class HideTextDelegate(QStyledItemDelegate): class HideTextDelegate(QStyledItemDelegate):
def paint(self, painter, option, index): def paint(self, painter, option, index):
# 仅在下拉列表中绘制文本避免在ComboBox显示区域绘制 # 仅在下拉列表中绘制文本避免在ComboBox显示区域绘制
@ -155,10 +159,6 @@ class BlockParameterManageWidget(QWidget):
def initUI(self): def initUI(self):
blocklist = [1,2,2]
self.blockLayout = DynamicAddBlock(blocklist)
self.mainlayout = QVBoxLayout() self.mainlayout = QVBoxLayout()
self.settingLayout = QHBoxLayout() self.settingLayout = QHBoxLayout()
@ -202,7 +202,7 @@ class BlockParameterManageWidget(QWidget):
def loadBlackData(self): def loadBlackData(self):
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-5])$') pattern = re.compile(r'^(?:[1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-5])$')
match = pattern.match(address) match = pattern.match(address)
@ -212,7 +212,10 @@ class BlockParameterManageWidget(QWidget):
if self.initUIstat: if self.initUIstat:
self.splitter.deleteLater() self.splitter.deleteLater()
self.widget.deleteLater() self.widget.deleteLater()
self.blockManage = BlockManage(int(address))
Globals.setValue('blockManage', self.blockManage)
blocklist = self.blockManage.getBlockNums()
self.blockLayout = DynamicAddBlock(blocklist)
self.settingLayout.addLayout(self.blockLayout, 7) self.settingLayout.addLayout(self.blockLayout, 7)
self.settingLayout.addWidget(QSplitter(), 11) self.settingLayout.addWidget(QSplitter(), 11)
self.mainlayout.addWidget(self.blockLayout.parameStackWidget, 20) self.mainlayout.addWidget(self.blockLayout.parameStackWidget, 20)
@ -225,7 +228,6 @@ class BlockParameterManageWidget(QWidget):
return return
def refreshData(self): def refreshData(self):
self.loadingDataWidget = LoadingDataWidget() self.loadingDataWidget = LoadingDataWidget()
self.loadingDataWidget.loadData() self.loadingDataWidget.loadData()
blockView = self.blockLayout.parameStackWidget.currentWidget() blockView = self.blockLayout.parameStackWidget.currentWidget()

@ -84,6 +84,7 @@ class ParmView(QTableView):
# self.datas = PressureTranslationBlock.getallParame() # self.datas = PressureTranslationBlock.getallParame()
self.datas = self.dbModel.getallParame() self.datas = self.dbModel.getallParame()
for index, data in enumerate(self.datas): for index, data in enumerate(self.datas):
data[5] = ''
desc = data[2].replace('\r\n', '').replace('\n', '') desc = data[2].replace('\r\n', '').replace('\n', '')
lines = [desc[i:i+40] + "\r\n" for i in range(0, len(desc), 40)] lines = [desc[i:i+40] + "\r\n" for i in range(0, len(desc), 40)]
# 合并列表为一个字符串,移除最后一个换行符 # 合并列表为一个字符串,移除最后一个换行符

@ -62,16 +62,15 @@ class SearchAddressWidget(QWidget):
self.setLayout(self.mainlayout) self.setLayout(self.mainlayout)
self.setWindowTitle('从站地址查找') self.setWindowTitle('从站地址查找')
self.test = DPV1Master('192.168.3.10', 502) self.DPV1Master = DPV1Master('192.168.3.10', 502)
self.test.searchMaster(self.updateProgress) self.DPV1Master.searchSlave(self.updateProgress)
self.cancelBtn.clicked.connect(self.cancelSearch) self.cancelBtn.clicked.connect(self.close)
# self.timer = QTimer() # self.timer = QTimer()
# self.timer.timeout.connect(self.updateProgress) # self.timer.timeout.connect(self.updateProgress)
# self.timer.start(500) # self.timer.start(500)
def updateProgress(self, address, isSlave): def updateProgress(self, address, isSlave):
# 模拟一个任务,逐步更新进度条 # 模拟一个任务,逐步更新进度条
self.progressBar.setValue(address) self.progressBar.setValue(address)
if isSlave: if isSlave:
self.addressListWidget.addItem(QListWidgetItem(str(address))) self.addressListWidget.addItem(QListWidgetItem(str(address)))
@ -82,10 +81,9 @@ class SearchAddressWidget(QWidget):
self.onConfirm() self.onConfirm()
def onConfirm(self): def onConfirm(self):
self.deviceAddressEdit.setText(self.address) self.deviceAddressEdit.setText(self.address)
self.close() self.close()
def cancelSearch(self): def closeEvent(self, event):
self.test.closeThread self.DPV1Master.closeThread()
self.close() event.accept()

@ -2,6 +2,7 @@ import sys
sys.path.append('../../') sys.path.append('../../')
import struct import struct
from enum import Enum
from utils.DBModels.DeviceParModels import * from utils.DBModels.DeviceParModels import *
from protocol.ModBus.DPV1Master import DPV1Master from protocol.ModBus.DPV1Master import DPV1Master
@ -14,7 +15,7 @@ class BlockType(Enum):
levelTB = -3 # 物位转换块 levelTB = -3 # 物位转换块
pressureTB = -4 pressureTB = -4
PB = 0 PB = 0
FB = 1 FB = 2
class BlockManage(): class BlockManage():
_instance = None _instance = None
@ -25,8 +26,9 @@ class BlockManage():
cls._instance = super().__new__(cls) cls._instance = super().__new__(cls)
return cls._instance return cls._instance
def __init__(self, address = 66): def __init__(self, address = None):
self.address = address self.address = address
if address:
self.initBlocks() self.initBlocks()
@property @property
@ -44,6 +46,7 @@ class BlockManage():
BlockType.FB : [], BlockType.FB : [],
} }
dirHeadDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 0, length = 12) dirHeadDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 0, length = 12)
dirHeadDatas = struct.unpack('>6h', dirHeadDatas)
DirID = dirHeadDatas[0] # 目录id DirID = dirHeadDatas[0] # 目录id
DirRevNum = dirHeadDatas[1] # 目录版本号 DirRevNum = dirHeadDatas[1] # 目录版本号
NumDirObj = dirHeadDatas[2] # 目录对象的个数 (如果整个目录使用多于一个目录对象, NumDirObj = dirHeadDatas[2] # 目录对象的个数 (如果整个目录使用多于一个目录对象,
@ -58,10 +61,11 @@ class BlockManage():
dirLength = 4 * NumDirEntry dirLength = 4 * NumDirEntry
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)
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)]
for typ in [BlockType.PB, BlockType.TB, BlockType.FB]: for typ in [BlockType.PB, BlockType.TB, BlockType.FB]:
typeIndex = typ.value 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]) # 目录对象编号
blkoffect = int(blkDirMesByte[1]) # 块从第几个Dir_Entry开始 blkoffect = int(blkDirMesByte[1]) # 块从第几个Dir_Entry开始
@ -69,27 +73,33 @@ class BlockManage():
# print(blkIndex, blkoffect, numBlk) # print(blkIndex, blkoffect, numBlk)
for i in range(numBlk): for i in range(numBlk):
blkEntryListIndex = blkoffect - 1 + i blkEntryListIndex = blkoffect - 1 + i
# print(blkEntryListIndex, entryTuples)
blkPointerByte = struct.pack('>h', entryTuples[blkEntryListIndex][0]) blkPointerByte = struct.pack('>h', entryTuples[blkEntryListIndex][0])
numBlkParms = entryTuples[blkEntryListIndex][1] numBlkParms = entryTuples[blkEntryListIndex][1]
blkSlot = int(blkPointerByte[0]) blkSlot = int(blkPointerByte[0])
blkStartIndex = int(blkPointerByte[1]) blkStartIndex = int(blkPointerByte[1])
# print(111, blkStartIndex, )
block = Block(typ, self.DPV1Master) block = Block(typ, self.DPV1Master)
block.slot = blkSlot block.slot = blkSlot
block.startIndex = blkStartIndex block.startIndex = blkStartIndex
block.numParms = numBlkParms block.numParms = numBlkParms
block.blockIndex = i block.blockIndex = i
block.address = self.address block.address = self.address
block.addParms()
if not block.getTBType(): if not block.getTBType():
self.blockDict[typ].append(block) self.blockDict[typ].append(block)
# print(blkSlot, blkIndex) # print(blkSlot, blkIndex)
# print(self.blockDict) # print(self.blockDict)
def getBlockValues(slef, blockType, blockIndex): def getBlockValues(self, blockType, blockIndex):
pass pass
def getBlockNums(self):
return [len(self.blockDict[BlockType.PB]), len(self.blockDict[BlockType.TB]), len(self.blockDict[BlockType.FB])]
@classmethod
def searchSlave(self, callback):
self.DPV1Master.searchSlave(callback)
class Block(): class Block():
@ -101,8 +111,8 @@ class Block():
def __init__(self, blockType, DPV1Master): def __init__(self, blockType, DPV1Master):
self.parms = [] self.parms = []
self.blockType = blockType self.blockType = blockType
self.addParms()
self.DPV1Master = DPV1Master self.DPV1Master = DPV1Master
# self.addParms()
def addParms(self): def addParms(self):
getParmsFunc = { getParmsFunc = {
@ -113,12 +123,15 @@ class Block():
parmsData = getParmsFunc() parmsData = getParmsFunc()
for parmData in parmsData: for parmData in parmsData:
parm = Parm(parmData, self.slot, self.startIndex, self.DPV1Master) # print(parmData)
# print(self.startIndex, 3214)
parm = Parm(parmData, self.slot, self.startIndex, self)
def getTBType(self): def getTBType(self):
return return
def setTBType(self): def setTBType(self):
pass

@ -18,7 +18,10 @@ class Parm():
desc = None desc = None
rdType = None rdType = None
def __init__(self, parmData:list, slot:int, startIndex:int, block): def __init__(self, parmData:list, slot:int, startIndex:int, block):
# print(startIndex, self.relativeIndex)
# print(parmData)
self.relativeIndex, self.paramName, self.desc, self.dataType, rdStr, self.size, *rest = parmData self.relativeIndex, self.paramName, self.desc, self.dataType, rdStr, self.size, *rest = parmData
self.relativeIndex = int(self.relativeIndex)
self.rdType = ParmEnum.readonly if rdStr == 'r' else ParmEnum.writeable self.rdType = ParmEnum.readonly if rdStr == 'r' else ParmEnum.writeable
self.realIndex = startIndex + self.relativeIndex self.realIndex = startIndex + self.relativeIndex
self.slot = slot self.slot = slot
@ -46,7 +49,7 @@ class Parm():
return str(struct.unpack('>f', value)) return str(struct.unpack('>f', value))
def unpackStr(self, value): def unpackStr(self, value):
return struct.unpack('{}s'.format{str(len(value))}, value) return struct.unpack('{}s'.format(str(len(value))), value)
def unpack101(self, value): def unpack101(self, value):
valueByte, statusByte = value[:4], value[4] valueByte, statusByte = value[:4], value[4]

@ -70,6 +70,7 @@ class DPV1Master():
self.searchSlaveThread.stop() self.searchSlaveThread.stop()
def readParm(self, address, slot, index, length, callback = None): def readParm(self, address, slot, index, length, callback = None):
length = int(length)
hexAddress = address.to_bytes(1, byteorder='little') hexAddress = address.to_bytes(1, byteorder='little')
slotByte = slot.to_bytes(1, byteorder='little') slotByte = slot.to_bytes(1, byteorder='little')
indexByte = index.to_bytes(1, byteorder='little') indexByte = index.to_bytes(1, byteorder='little')
@ -78,7 +79,8 @@ class DPV1Master():
self.writeMultipleRegister(1, 750, searchDate) self.writeMultipleRegister(1, 750, searchDate)
time.sleep(0.3) time.sleep(0.3)
value = self.readHoldingRegisters(1, 750, -(-length // 2)) # -(-length // 2)向上取整 value = self.readHoldingRegisters(1, 750, -(-length // 2)) # -(-length // 2)向上取整
value = struct.pack('>{}b'.format(-(-length // 2)), value)[:length] # print(value)
value = struct.pack('>{}h'.format(len(value)), *value)[:length]
self.writeMultipleRegister(1, 750, self.resetData) self.writeMultipleRegister(1, 750, self.resetData)
time.sleep(0.1) time.sleep(0.1)
if callable(callback): if callable(callback):

@ -28,12 +28,12 @@ class PressureTranslationBlock(BaseModel):
# 查询设备是否存在 # 查询设备是否存在
@classmethod @classmethod
def getallParame(cls): def getallParame(cls):
devices = cls.get_all() params = cls.get_all()
if devices is 'error': if params is 'error':
return return
l = [] l = []
for x in devices: for x in params:
l.append([x.index, x.paramName, x.description, x.dataType, x.accessType]) l.append([x.index, x.paramName, x.description, x.dataType, x.accessType, x.dataSize])
return l return l
@classmethod @classmethod

Loading…
Cancel
Save