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:
register_value = 0
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":
u32_value = rr.registers[num+1]
if register_value == 0xFFFF and u32_value == 0xFFFF:
@@ -223,8 +223,10 @@ class SungrowInverter():
u32_value = rr.registers[num+1]
if register_value == 0xFFFF and (u32_value == 0xFFFF or u32_value == 0x7FFF):
register_value = 0
elif u32_value >= 32767: # Anything greater than 32767 is a negative
register_value = (register_value + u32_value * 0x10000 - 0xffffffff -1)
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
if register.get('datarange'):