@@ -70,6 +70,21 @@ def list(self):
7070 self .is_plan ,
7171 ]
7272
73+ def _on_decode_changed (self , old_decode : Optional [str ]):
74+ """当解析码改变时触发此回调"""
75+ if not hasattr (self , "_mul_coe" ):
76+ return # 初始化期间不触发
77+
78+ self .register_cnt = Decode .get_decode_register_cnt (self .decode )
79+ self .is_signed = Decode .is_decode_signed (self .decode )
80+ self .endian = Decode .get_byteorder (self .decode )
81+
82+ if not self ._is_updating :
83+ # 保持寄存器值不变,重新计算真实值和十六进制表示
84+ val = self ._value
85+ self ._value = None
86+ self .value = val
87+
7388 # ===== 遥测特有属性 =====
7489
7590 @property
@@ -146,15 +161,22 @@ def real_value(self, real_value):
146161
147162 def set_real_value (self , real_value ) -> bool :
148163 """通过真实值设置寄存器值"""
149- old_real = self ._real_value
164+ info = Decode .get_info (self .decode )
165+
166+ if info .is_float :
167+ register_value = float ((real_value - self .add_coe ) / self .mul_coe )
168+ self .value = register_value
169+ return True
170+
150171 register_value = int ((real_value - self .add_coe ) / self .mul_coe )
151- register_cnt = Decode . get_decode_register_cnt ( self . decode )
152- is_signed = Decode . is_decode_signed ( self . decode )
172+ register_cnt = info . register_cnt
173+ is_signed = info . is_signed
153174
154175 # 定义取值范围(无符号/有符号)
155176 bounds = {
156177 1 : (0 , 0xFFFF ) if not is_signed else (- 0x8000 , 0x7FFF ),
157178 2 : (0 , 0xFFFFFFFF ) if not is_signed else (- 0x80000000 , 0x7FFFFFFF ),
179+ 4 : (0 , 0xFFFFFFFFFFFFFFFF ) if not is_signed else (- 0x8000000000000000 , 0x7FFFFFFFFFFFFFFF )
158180 }
159181
160182 if register_cnt not in bounds :
0 commit comments