S16/S32 fix

This commit is contained in:
Zhang Huanjie
2022-04-14 11:03:26 +08:00
parent 1bb4f24808
commit 4bf87835b7
+4 -2
View File
@@ -212,7 +212,7 @@ class SungrowInverter():
if register_value == 0xFFFF or register_value == 0x7FFF: if register_value == 0xFFFF or register_value == 0x7FFF:
register_value = 0 register_value = 0
if register_value >= 32767: # Anything greater than 32767 is a negative for 16bit if register_value >= 32767: # Anything greater than 32767 is a negative for 16bit
register_value = (register_value - 65535) register_value = (register_value - 65536)
elif register.get('datatype') == "U32": elif register.get('datatype') == "U32":
u32_value = rr.registers[num+1] u32_value = rr.registers[num+1]
if register_value == 0xFFFF and u32_value == 0xFFFF: if register_value == 0xFFFF and u32_value == 0xFFFF:
@@ -223,8 +223,10 @@ class SungrowInverter():
u32_value = rr.registers[num+1] u32_value = rr.registers[num+1]
if register_value == 0xFFFF and (u32_value == 0xFFFF or u32_value == 0x7FFF): if register_value == 0xFFFF and (u32_value == 0xFFFF or u32_value == 0x7FFF):
register_value = 0 register_value = 0
elif u32_value >= 32767: # Anything greater than 32767 is a negative
register_value = (register_value + u32_value * 0x10000 - 0xffffffff -1)
else: else:
register_value = (register_value + u32_value * 0x10000 - 0xffffffff) register_value = register_value + u32_value * 0x10000
# We convert a system response to a human value # We convert a system response to a human value
if register.get('datarange'): if register.get('datarange'):