From 4bf87835b74a3d5c2a8e381325f757206a150312 Mon Sep 17 00:00:00 2001 From: Zhang Huanjie Date: Thu, 14 Apr 2022 11:03:26 +0800 Subject: [PATCH] S16/S32 fix --- SunGather/sungather.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SunGather/sungather.py b/SunGather/sungather.py index f5d2ec6..195594d 100644 --- a/SunGather/sungather.py +++ b/SunGather/sungather.py @@ -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'):