Files
433_STM32/docs/报文.md

5.0 KiB
Raw Blame History

BOAT DTU 无线通信协议 (RF433)

本文档采用直观图示方式定义 BOAT DTU 在 433MHz 无线频段的报文格式。

1. 通用报文结构图示

所有无线报文均遵循以下结构:

AA  TYPE  LEN  ID  [PAYLOAD]  SUM
--  ----  ---  --  ---------  ---
 |    |    |   |       |       |
 |    |    |   |       |       +-- 校验和:从 AA 到 PAYLOAD 结束的所有字节累加和 (取低8位)
 |    |    |   |       +---------- 载荷数据:具体的业务数据内容
 |    |    |   +------------------ 设备 ID当前发送设备的唯一标识 (MY_DEVICE_ID)
 |    |    +---------------------- 长度:指明后续 [ID + PAYLOAD + SUM] 的总字节数
 |    +--------------------------- 数据类型:区分数据来源 (10, 55, 48, AA)
 +-------------------------------- 起始符:固定为 0xAA

2. 详细指令集定义

2.1 报警状态变化上报 (主动上报)

当 Modbus RTU 轮询到的报警状态发生变化时,立即发送此包。 格式与原 DI 变化通知完全一致,上位机代码无需修改。

AA  10  03  ID  XX  SUM
--  --  --  --  --  ---
 |   |   |   |   |   |
 |   |   |   |   |   +-- 校验和
 |   |   |   |   +------ 报警状态字节 (Bit0:火灾, Bit1:水密门, Bit2:舱底水, Bit3:气体检测)
 |   |   |   +---------- 本机设备 ID
 |   |   +-------------- 长度固定为 0x03 (ID + 1字节状态 + SUM)
 |   +------------------ 类型标识0x10 (Alarm Data)
 +---------------------- 固定起始符

2.2 RS485 透传数据包

将 RS485 接口收到的原始串口数据封装后发出。

AA  48  LEN  ID  [DATA]  SUM
--  --  ---  --  ------  ---
 |   |   |   |     |      |
 |   |   |   |     |      +-- 校验和
 |   |   |   |     +--------- RS485 原始数据内容
 |   |   |   +--------------- 本机设备 ID
 |   |   +------------------- 长度:(1 + 原始数据长度 + SUM)
 |   +----------------------- 类型标识0x48 (RS485 Data)
 +--------------------------- 固定起始符

2.3 W5500 网络透传数据包

将以太网口收到的 UDP/TCP 原始数据封装后发出。

AA  55  LEN  ID  [DATA]  SUM
--  --  ---  --  ------  ---
 |   |   |   |     |      |
 |   |   |   |     |      +-- 校验和
 |   |   |   |     +--------- 网络原始数据内容
 |   |   |   +--------------- 本机设备 ID
 |   |   +------------------- 长度:(1 + 原始数据长度 + SUM)
 |   +----------------------- 类型标识0x55 (Net Data)
 +--------------------------- 固定起始符

2.4 系统心跳包 (30秒/次)

系统定时上报当前存活状态,包含报警状态、防丢包序列号、固件版本及 Modbus TCP 寄存器值。

2.4.1 标准心跳包 (7字节Payload)

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 字段说明:

偏移 字段 长度 说明
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 = 0x69 = 105)

  • 报警变化通知示例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)。