Skip to content

Commit d07da28

Browse files
committed
1.优化modbus协议寄存器解析地址显示问题,单个地址合并,取消范围显示。2.增加deb包安装后网址显示提示
1 parent 8d51b8a commit d07da28

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

debian/DEBIAN/postinst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ case "$1" in
3030
echo -e " 停止服务: ${YELLOW}sudo systemctl stop ${SERVICE_NAME}${NC}"
3131
echo -e " 查看状态: ${BLUE}sudo systemctl status ${SERVICE_NAME}${NC}"
3232
echo -e " 开机自启: ${BLUE}sudo systemctl enable ${SERVICE_NAME}${NC}"
33+
echo -e " Web界面: http://127.0.0.1:8991"
3334

3435
echo -e "\n${BLUE}关于:${NC}"
3536
echo -e " 作者: CDY"
3637
echo -e " Email: 1755696012@qq.com"
3738
echo -e " GitHub: https://github.com/600888/ems_simulate"
3839
echo -e " 文档: https://600888.github.io/ems_simulate/"
40+
3941
;;
4042

4143
abort-upgrade|abort-remove|abort-deconfigure)

src/device/core/message/message_parser.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ class ModbusMessageParser:
4141
支持 Modbus TCP (含 MBAP 头) 和 Modbus RTU 帧格式。
4242
"""
4343

44+
@staticmethod
45+
def _format_addr_range(start: int, end: int) -> str:
46+
"""格式化地址范围,地址相同时只显示单个地址"""
47+
if start == end:
48+
return f"0x{start:04X}"
49+
return f"0x{start:04X}-0x{end:04X}"
50+
4451
@staticmethod
4552
def parse_tcp(raw_hex: str, last_request_info: Optional[dict] = None) -> str:
4653
"""解析 Modbus TCP 报文
@@ -131,14 +138,16 @@ def _parse_pdu(pdu: bytes, slave_id: int, last_request_info: Optional[dict] = No
131138
start_addr = (pdu[1] << 8) | pdu[2]
132139
quantity = (pdu[3] << 8) | pdu[4]
133140
end_addr = start_addr + quantity - 1
134-
return f"{fc_name} 0x{start_addr:04X}-0x{end_addr:04X} (从站 {slave_id})"
141+
addr_range = ModbusMessageParser._format_addr_range(start_addr, end_addr)
142+
return f"{fc_name} {addr_range} (从站 {slave_id})"
135143
else:
136144
# 这是一个响应: FC(1) + ByteCount(1) + Data(N)
137145
# 需要关联请求来获取地址范围
138146
if last_request_info and last_request_info.get("func_code") == func_code:
139147
start = last_request_info["start_addr"]
140148
end = last_request_info["end_addr"]
141-
return f"{fc_name} 0x{start:04X}-0x{end:04X} 响应 (从站 {slave_id})"
149+
addr_range = ModbusMessageParser._format_addr_range(start, end)
150+
return f"{fc_name} {addr_range} 响应 (从站 {slave_id})"
142151
else:
143152
# 无法关联请求,使用字节数描述
144153
if len(pdu) >= 2:
@@ -179,11 +188,13 @@ def _parse_pdu(pdu: bytes, slave_id: int, last_request_info: Optional[dict] = No
179188
# 请求: 有 ByteCount + Data (len > 5)
180189
# 响应: 只有 StartAddr + Quantity (len == 5)
181190
if len(pdu) == 5:
182-
# 这是响应
183-
return f"{fc_name} 0x{start_addr:04X}-0x{end_addr:04X} 响应 (从站 {slave_id})"
191+
# 响应
192+
addr_range = ModbusMessageParser._format_addr_range(start_addr, end_addr)
193+
return f"{fc_name} {addr_range} 响应 (从站 {slave_id})"
184194
else:
185-
# 这是请求
186-
return f"{fc_name} 0x{start_addr:04X}-0x{end_addr:04X} (从站 {slave_id})"
195+
# 请求
196+
addr_range = ModbusMessageParser._format_addr_range(start_addr, end_addr)
197+
return f"{fc_name} {addr_range} (从站 {slave_id})"
187198
return f"{fc_name} (从站 {slave_id})"
188199

189200
return f"{fc_name} (从站 {slave_id})"

0 commit comments

Comments
 (0)