|
|
|
@ -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
|
|
|
|
|
unit, desc = '1', '1'
|
|
|
|
|
return unit + desc
|