1113更新 添加质量位

main
parent f1c96dd10e
commit 3d4ab1ba07

@ -28,6 +28,7 @@ class RightAreaWidgets(QWidget):
self.areaLineEditValue = []
self.qualityEditValueList = []
self.areaLabel = {}
self.qualityLabel = {}
self.areaWidget = areaWidget
self.devicesManange = self.areaWidget.devicesManange
self.order = order
@ -116,15 +117,15 @@ class RightAreaWidgets(QWidget):
areaLineEdit.setObjectName('areaLineEdit')
areaLineEdit.setFixedSize(80, 33)
qualityLineEdit = SoftKeyBoardEdit('0')
qualityLineEdit = SoftKeyBoardEdit('80')
qualityLineEdit.setObjectName('areaLineEdit')
qualityLineEdit.setFixedSize(80, 33)
forceBtn = ForceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit, qualityValueLabel=qualityLabel, \
forceBtn = ForceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit, qualityValueLabel=qualityValueLabel, \
qualityLineEdit=qualityLineEdit, btnName = '强制')
forceBtn.clicked.connect(self.AIAOForceValues)
qualityBtn = ForceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit, qualityValueLabel=qualityLabel, \
qualityBtn = ForceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit, qualityValueLabel=qualityValueLabel, \
qualityLineEdit=qualityLineEdit, btnName = '故障')
qualityBtn.clicked.connect(lambda: self.AIAOForceValues(qualityValue = '0'))
@ -135,8 +136,10 @@ class RightAreaWidgets(QWidget):
forceLayout.addWidget(qualityBtn,1,3,1,1)
else:
self.areaLabel[number] = areaValueLabel
self.qualityLabel[number] = qualityValueLabel
self.areaLineEditValue.append(0)
self.qualityEditValueList.append(0)
# if self.deviceName[-2:] + self.dataType in ['从站DI','主站DO']:
# areaMessLabel.setObjectName('wirteDIDOareaMessLabel')
@ -157,7 +160,8 @@ class RightAreaWidgets(QWidget):
# forceLayout.setSpacing(10)
return forceLayout
def wirteAreaLineEditValue(self,dataTypeAndModel, number, value, qualityValue, valueLabel, qualityValueLabel):
def wirteAreaLineEditValue(self,dataTypeAndModel, number, value, qualityValue = None, valueLabel = None, \
qualityValueLabel = None):
if self.areaWidget.okBtnValue:
QMessageBox.warning(self, '提示', '请先保存通道信息')
return
@ -165,15 +169,27 @@ class RightAreaWidgets(QWidget):
if dataTypeAndModel in ['主站AO','从站AI']:
pattern = re.compile(r'^[+-]?(\d+(\.\d*)?|\.\d+)$')
match = pattern.match(value)
match2 = pattern.match(qualityValue)
if not match or not match2:
hexPattern = re.compile(r'^(0x)?[0-9A-Fa-f]{1,2}$')
match2 = hexPattern.match(qualityValue)
if not match :
QMessageBox.warning(self, '提示', '请输入数字。')
return
return None, None
if not match2:
QMessageBox.warning(self, '提示', '请输入0-FF')
return None, None
else:
hexValue = int(match2.group(0), 16)
# 检查值是否小于等于 255
if hexValue > 255:
QMessageBox.warning(self, '提示', '请输入0-FF')
return None, None
else:
valueLabel.setText(str(float(value)))
qualityValueLabel.setText(str(float(qualityValue)))
qualityValueLabel.setText(str(qualityValue))
self.areaLineEditValue[number] = float(value)
self.qualityEditValueList[number] = float(qualityValue)
# print(self.areaLineEditValue,number, qualityValue )
self.qualityEditValueList[number] = qualityValue
return self.areaLineEditValue , self.qualityEditValueList #返回值和质量位值
#判断输入值是否为0和1
@ -188,7 +204,8 @@ class RightAreaWidgets(QWidget):
# print(curIndex)
if not self.force:
device = self.devicesManange.getDevice(self.deviceName)
values = device.getAreaValues(curIndex)
values, qualityValueList = device.getAreaValues(curIndex)
# print(qualityValueList)
# print(self.deviceName, curIndex, values)
if len(values) > len(self.areaLabel):
return
@ -204,6 +221,8 @@ class RightAreaWidgets(QWidget):
self.areaLabel[index].setText(value)
continue
self.areaLabel[index].setText(str(value))
for index, value in enumerate(qualityValueList):
self.qualityLabel[index].setText(str(value))
# print(self.areaLabel[index],values)
@ -218,11 +237,12 @@ class RightAreaWidgets(QWidget):
qualityValue = '0'
else:
qualityValue = sender.qualityLineEdit.text()
# print(qualityValue)
dataTypeAndModel = self.deviceName[-2:] + self.dataType
curIndex = self.areaWidget.areaTabWidget.currentIndex()
valueList, qualityValueList = self.wirteAreaLineEditValue(dataTypeAndModel=dataTypeAndModel, number=number, value=value, qualityValue=qualityValue, \
valueLabel=valueLabel, qualityValueLabel=qualityValueLabel )
# print(valueList, curIndex)
# print(valueList, qualityValueList,222)
if valueList is None:
return
else:

@ -138,7 +138,7 @@ class BlockManage():
# print(blkIndex, blkoffect, numBlk)
for i in range(numBlk):
blkEntryListIndex = blkoffect - 1 + i
print(blkEntryListIndex, entryTuples)
# print(blkEntryListIndex, entryTuples)
blkPointerByte = struct.pack('>h', entryTuples[blkEntryListIndex][0])
numBlkParms = entryTuples[blkEntryListIndex][1]
blkSlot = int(blkPointerByte[0])

@ -19,6 +19,7 @@ class Area():
nums = 0
forceValue = [0]
currentValue = [0] * nums
qualityValueList = []
def __init__(self):
pass
@ -142,7 +143,7 @@ class Device():
# # print(id(self), self.inputAreas)
# return self.inputAreas[index].currentValue
# print(self.areas[index].currentValue)
return self.areas[index].currentValue
return self.areas[index].currentValue, self.areas[index].qualityValueList
def getLength(self, nums, bytes):
length = int(nums) * int(bytes)
@ -257,7 +258,7 @@ class DevicesManange():
if deviceName in devicesDict:
return devicesDict[deviceName]
def writeAreas(self, deviceName, areaIndex, values):
def writeAreas(self, deviceName, areaIndex, values, qualityValueList = None):
# print(values)
bytes = b""
device = self.getDevice(deviceName)
@ -282,6 +283,7 @@ class DevicesManange():
# for area, value in zip(areas, values):
area = device.areas[areaIndex]
area.forceValue = values
area.qualityValueList = qualityValueList
if area.type in ['DO', 'DI'] and device.type == 'PA':
area.forceValue = values[8:] + values[:8]
elif area.type in ['DO', 'DI'] and device.type == 'DP' and device.masterOrSlave == "主站":
@ -293,7 +295,8 @@ class DevicesManange():
# print(area.forceValue)
if area.type in ["AI", "AO"]:
# print(area.forceValue)
byte = floatToBytes(area.forceValue, area.bytes, order = area.order)
byte = floatToBytes(area.forceValue, area.bytes, order = area.order, qualityValueList = area.qualityValueList)
# print(type(byte))
elif area.type in ["DI", "DO"]:
# if device.type == "PA" and device.masterOrSlave == "从站" and len(area.forceValue) == 16:
byte = coilsToBytes([int(x) for x in area.forceValue], area.bytes)
@ -354,8 +357,12 @@ class DevicesManange():
byte = bytes[i:i+4]
if len(byte) != 4:
continue
qualityByte = hex(bytes[i+4])
# print(qualityByte)
# print(round(struct.unpack('!f', reorderBytes(byte, area.order))[0], 4))
area.currentValue[i] = round(struct.unpack('!f', reorderBytes(byte, area.order))[0], 4)
area.qualityValueList = [qualityByte]
# print(area.qualityValueList)
# print(round(struct.unpack('!f', reorderBytes(byte, area.order))[0], 4))
elif area.type in ['DI', 'DO']:
if device.masterOrSlave == '主站' and device.type == 'DP':

@ -63,7 +63,7 @@ def bytesTOFloat(value, order):
return BADCToFloat(value)
def floatToBytes(values, length, order):
def floatToBytes(values, length, order, qualityValueList = None):
# 判断order是否为ABCD或BADC
# order = '>' if order in ['ABCD', 'BADC'] else '<'
# hOrder = '<'if order.byte in ['ABCD', 'DCBA'] else '>'
@ -72,7 +72,18 @@ def floatToBytes(values, length, order):
# print(values,valuesNums,6666)
# 将values转换为字节流
valueByte = struct.pack(f"!{'f' * valuesNums}", *values)
valueByte = reorderBytes(valueByte, format = order) + struct.pack('B' * (length - valuesNums * 4), *[0] * (length - valuesNums * 4))
if qualityValueList:
# print(qualityValueList[0])
intValue = int(str(qualityValueList[0]), 16)
# print(intValue)
# 将整数转换为字节对象
qualityByte = struct.pack('B', intValue)
# qualityByte = struct.pack('B' * (length - valuesNums * 4), *[0] * (length - valuesNums * 4))
else:
qualityByte = b'\x80'
valueByte = reorderBytes(valueByte, format = order) + qualityByte
# print(valueByte, 12345)
# valueByte = reorderBytes(valueByte, format = order) + struct.pack('B' * (length - valuesNums * 4), *[0] * (length - valuesNums * 4))
# {'B' * (length - 4 * valuesNums) *[0] * (length - 4 * valuesNums)
# print(valueByte)
# 返回转换后的字节流

Loading…
Cancel
Save