Skip to content

Commit db81126

Browse files
committed
修复解析码bug
1 parent 113e473 commit db81126

5 files changed

Lines changed: 78 additions & 18 deletions

File tree

front/src/components/device/AddPointDialog.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,18 +101,18 @@
101101
<el-option-group label="32位整数">
102102
<el-option label="0x40 - Long AB CD (大端)" value="0x40" />
103103
<el-option label="0x41 - Long AB CD (有符号)" value="0x41" />
104-
<el-option label="0x43 - Long CD AB (字交换)" value="0x43" />
105-
<el-option label="0x44 - Long CD AB (有符号)" value="0x44" />
104+
<el-option label="0x43 - Long BA DC (大端字交换)" value="0x43" />
105+
<el-option label="0x44 - Long BA DC (有符号)" value="0x44" />
106106
<el-option label="0xD0 - Long DC BA (小端)" value="0xD0" />
107107
<el-option label="0xD1 - Long DC BA (有符号)" value="0xD1" />
108-
<el-option label="0xD4 - Long BA DC (小端字交换)" value="0xD4" />
109-
<el-option label="0xD5 - Long BA DC (有符号)" value="0xD5" />
108+
<el-option label="0xD4 - Long CD AB (小端字交换)" value="0xD4" />
109+
<el-option label="0xD5 - Long CD AB (有符号)" value="0xD5" />
110110
</el-option-group>
111111
<el-option-group label="32位浮点">
112112
<el-option label="0x42 - Float AB CD (大端)" value="0x42" />
113-
<el-option label="0x45 - Float CD AB (字交换)" value="0x45" />
113+
<el-option label="0x45 - Float BA DC (大端字交换)" value="0x45" />
114114
<el-option label="0xD2 - Float DC BA (小端)" value="0xD2" />
115-
<el-option label="0xD3 - Float BA DC (小端字交换)" value="0xD3" />
115+
<el-option label="0xD3 - Float CD AB (小端字交换)" value="0xD3" />
116116
</el-option-group>
117117
<el-option-group label="64位类型">
118118
<el-option label="0x60 - Int64 AB CD EF GH (大端)" value="0x60" />

front/src/components/point/EditPointMetadata.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,18 @@
4242
<el-option-group label="32位整数">
4343
<el-option label="0x40 - Long AB CD (大端)" value="0x40" />
4444
<el-option label="0x41 - Long AB CD (有符号)" value="0x41" />
45-
<el-option label="0x43 - Long CD AB (字交换)" value="0x43" />
46-
<el-option label="0x44 - Long CD AB (有符号)" value="0x44" />
45+
<el-option label="0x43 - Long BA DC (大端字交换)" value="0x43" />
46+
<el-option label="0x44 - Long BA DC (有符号)" value="0x44" />
4747
<el-option label="0xD0 - Long DC BA (小端)" value="0xD0" />
4848
<el-option label="0xD1 - Long DC BA (有符号)" value="0xD1" />
49-
<el-option label="0xD4 - Long BA DC (小端字交换)" value="0xD4" />
50-
<el-option label="0xD5 - Long BA DC (有符号)" value="0xD5" />
49+
<el-option label="0xD4 - Long CD AB (小端字交换)" value="0xD4" />
50+
<el-option label="0xD5 - Long CD AB (有符号)" value="0xD5" />
5151
</el-option-group>
5252
<el-option-group label="32位浮点">
5353
<el-option label="0x42 - Float AB CD (大端)" value="0x42" />
54-
<el-option label="0x45 - Float CD AB (字交换)" value="0x45" />
54+
<el-option label="0x45 - Float BA DC (大端字交换)" value="0x45" />
5555
<el-option label="0xD2 - Float DC BA (小端)" value="0xD2" />
56-
<el-option label="0xD3 - Float BA DC (小端字交换)" value="0xD3" />
56+
<el-option label="0xD3 - Float CD AB (小端字交换)" value="0xD3" />
5757
</el-option-group>
5858
<el-option-group label="64位类型">
5959
<el-option label="0x60 - Int64 AB CD EF GH (大端)" value="0x60" />

src/enums/points/base_point.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def __init__(
4646
self._frame_type: int = frame_type
4747
self._is_simulated: bool = False
4848
self._is_plan: bool = False
49-
self.decode = decode
49+
self._decode = decode
5050

5151
self.is_send_signal = False
5252
self.related_point: Optional["BasePoint"] = None
@@ -127,6 +127,21 @@ def code(self) -> str:
127127
def code(self, code):
128128
self._code = code
129129

130+
@property
131+
def decode(self) -> str:
132+
return getattr(self, "_decode", "0x20")
133+
134+
@decode.setter
135+
def decode(self, decode: str):
136+
old_decode = getattr(self, "_decode", None)
137+
if old_decode != decode:
138+
self._decode = decode
139+
self._on_decode_changed(old_decode)
140+
141+
def _on_decode_changed(self, old_decode: Optional[str]):
142+
"""当解析码改变时触发此回调,子类可重写以处理解析码变更后的逻辑"""
143+
pass
144+
130145
@property
131146
def value(self):
132147
return self._value

src/enums/points/yc.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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:

src/enums/points/yt.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,21 @@ def list(self):
7272
self.is_plan,
7373
]
7474

75+
def _on_decode_changed(self, old_decode: Optional[str]):
76+
"""当解析码改变时触发此回调"""
77+
if not hasattr(self, "_mul_coe"):
78+
return # 初始化期间不触发
79+
80+
self.register_cnt = Decode.get_decode_register_cnt(self.decode)
81+
self.is_signed = Decode.is_decode_signed(self.decode)
82+
self.endian = Decode.get_byteorder(self.decode)
83+
84+
if not self._is_updating:
85+
# 保持寄存器值不变,重新计算真实值和十六进制表示
86+
val = self._value
87+
self._value = None
88+
self.value = val
89+
7590
# ===== 遥调特有属性 =====
7691

7792
@property
@@ -162,14 +177,22 @@ def set_real_value(self, real_value) -> bool:
162177
if not (self._min_value_limit <= real_value <= self._max_value_limit):
163178
return False
164179

180+
info = Decode.get_info(self.decode)
181+
182+
if info.is_float:
183+
register_value = float((real_value - self.add_coe) / self.mul_coe)
184+
self.value = register_value
185+
return True
186+
165187
register_value = int((real_value - self.add_coe) / self.mul_coe)
166-
register_cnt = Decode.get_decode_register_cnt(self.decode)
167-
is_signed = Decode.is_decode_signed(self.decode)
188+
register_cnt = info.register_cnt
189+
is_signed = info.is_signed
168190

169191
# 定义取值范围(无符号/有符号)
170192
bounds = {
171193
1: (0, 0xFFFF) if not is_signed else (-0x8000, 0x7FFF),
172194
2: (0, 0xFFFFFFFF) if not is_signed else (-0x80000000, 0x7FFFFFFF),
195+
4: (0, 0xFFFFFFFFFFFFFFFF) if not is_signed else (-0x8000000000000000, 0x7FFFFFFFFFFFFFFF)
173196
}
174197

175198
if register_cnt not in bounds:

0 commit comments

Comments
 (0)