feat: DI报警改为Modbus RTU报警上报,心跳包IO位替换为RTU报警状态,添加详细中文注释

This commit is contained in:
2026-05-28 13:03:28 +08:00
parent d2c3c6c8cb
commit f56367b9b3
7 changed files with 567 additions and 170 deletions

View File

@ -22,18 +22,19 @@ AA TYPE LEN ID [PAYLOAD] SUM
## 2. 详细指令集定义
### 2.1 I/O 状态变化上报 (主动上报)
板载 4 路数字输入 (DI) 电平发生变化时,立即发送此包。
### 2.1 报警状态变化上报 (主动上报)
Modbus RTU 轮询到的报警状态发生变化时,立即发送此包。
格式与原 DI 变化通知完全一致,上位机代码无需修改。
```text
AA 10 03 ID XX SUM
-- -- -- -- -- ---
| | | | | |
| | | | | +-- 校验和
| | | | +------ I/O 状态位 (Bit0:DI1, Bit1:DI2, Bit2:DI3, Bit3:DI4)
| | | | +------ 报警状态字节 (Bit0:火灾, Bit1:水密门, Bit2:舱底水, Bit3:气体检测)
| | | +---------- 本机设备 ID
| | +-------------- 长度固定为 0x03 (ID + 1字节状态 + SUM)
| +------------------ 类型标识0x10 (I/O Data)
| +------------------ 类型标识0x10 (Alarm Data)
+---------------------- 固定起始符
```
@ -68,41 +69,43 @@ AA 55 LEN ID [DATA] SUM
```
### 2.4 系统心跳包 (30秒/次)
系统定时上报当前存活状态,包含当前的 I/O 状态、防丢包序列号、固件版本及 Modbus 寄存器值。
系统定时上报当前存活状态,包含报警状态、防丢包序列号、固件版本及 Modbus TCP 寄存器值。
#### 2.4.1 标准心跳包 (8字节Payload)
#### 2.4.1 标准心跳包 (7字节Payload)
```text
AA AA 09 [DEVICE_ID] [SEQ_H] [SEQ_L] [FW_H] [FW_L] [IO_STATUS] [MODBUS_H] [MODBUS_L] SUM
-- -- -- ----------- --------------- ------------- ----------- --------------------- ---
| | | | | | | | |
| | | | | | | | +-- 1字节 校验和
| | | | | | | +-------------------- 2字节 Modbus 寄存器值
| | | | | | +------------------------------------- 1字节 I/O 状态
| | | | | | Bit7: W5500 网线连接状态
| | | | | | Bit3-Bit0: 4路 DI 状态
| | | | | +--------------------------------------------------- 2字节序列号
| | | | +------------------------------------------------------------------ 2字节固件版本编码
| | | +----------------------------------------------------------------------------------- 1字节本机设备 ID
| | +--------------------------------------------------------------------------------------------- 长度 0x09后续的总字节数
| +------------------------------------------------------------------------------------------------- 类型 0xAA
+----------------------------------------------------------------------------------------------------- 固定起始符
AA AA 09 ID [SEQ_H] [SEQ_L] [FW_H] [FW_L] [RTU] [TCP_H] [TCP_L] SUM
-- -- -- -- --------------- ------------- ----- --------------- ---
| | | | | | | | |
| | | | | | | | +-- 校验和
| | | | | | | +-------------- Modbus TCP 寄存器值
| | | | | | +--------------------------- Modbus RTU 报警状态
| | | | | | Bit0:火灾 Bit1:水密门
| | | | | | Bit2:舱底水 Bit3:气体检测
| | | | | +---------------------------------------- 2字节固件版本编码
| | | | +------------------------------------------------------- 2字节序列号 (0-65535)
| | | +------------------------------------------------------------------ 1字节本机设备 ID
| | +----------------------------------------------------------------------- LEN = 0x09 (9)
| +--------------------------------------------------------------------------- 类型 0xAA
+------------------------------------------------------------------------------- 固定起始符
```
**Payload 字段说明:**
| 字段 | 长度 | 说明 |
|------|------|------|
| SEQ_H, SEQ_L | 2 | 2字节序列号 (0-65535, 循环自增) |
| FW_H, FW_L | 2 | 2字节固件版本编码 (MAKE_XTELL_CODE 宏定义) |
| DEVICE_ID | 1 | 本机设备 ID (MY_DEVICE_ID) |
| IO_STATUS | 1 | 1字节 I/O 状态 |
| MODBUS_H, MODBUS_L | 2 | 2字节 Modbus 寄存器值 (最新读取值) |
| 偏移 | 字段 | 长度 | 说明 |
|------|------|------|------|
| 0-1 | SEQ | 2 | 2字节序列号 (0-65535, 循环自增) |
| 2-3 | FW | 2 | 2字节固件版本编码 (MAKE_XTELL_CODE 宏定义) |
| 4 | RTU | 1 | Modbus RTU 报警状态 (Bit0:火灾, Bit1:水密门, Bit2:舱底水, Bit3:气体检测) |
| 5-6 | TCP | 2 | Modbus TCP 寄存器值 (0xFFFF 表示无效) |
---
## 3. 示例说明 (假设 Device ID = 0x01)
## 3. 示例说明 (假设 Device ID = 0x69 = 105)
* **心跳包示例**`AA AA 08 01 00 05 06 41 01 0F 01 2C 5A`
* 表示ID为1的设备序列号5固件版本 0x0641 (2026年5月10日第1次编译)本机ID=1I/O全高Modbus=0x012C (300)8字节payload
* **485透传示例**`AA 48 05 01 41 42 43 44 4D`
* 表示ID为1的设备转发了 485 数据 "ABCD" (长度 4+1=5)。
* **报警变化通知示例**`AA 10 03 69 0F [SUM]`
* 表示ID为105的设备,报警状态 = 0x0F (火灾+水密门+舱底水+气体检测 全部激活)
* **心跳包示例**`AA AA 09 69 00 05 06 41 0F 01 2C [SUM]`
* 表示ID=105序列号5固件版本 0x0641 (2026年5月10日第1次编译)
* RTU报警=0x0F(全报警)Modbus TCP=0x012C(300)7字节payload
* **485透传示例**`AA 48 05 69 41 42 43 44 4D`
* 表示ID为105的设备转发了 485 数据 "ABCD" (长度 4+1=5)。