Files
433_STM32/docs/报文.md

5.1 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 I/O 状态变化上报 (主动上报)

当板载 4 路数字输入 (DI) 电平发生变化时,立即发送此包。

AA  10  03  ID  XX  SUM
--  --  --  --  --  ---
 |   |   |   |   |   |
 |   |   |   |   |   +-- 校验和
 |   |   |   |   +------ I/O 状态位 (Bit0:DI1, Bit1:DI2, Bit2:DI3, Bit3:DI4)
 |   |   |   +---------- 本机设备 ID
 |   |   +-------------- 长度固定为 0x03 (ID + 1字节状态 + SUM)
 |   +------------------ 类型标识0x10 (I/O 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秒/次)

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

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

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
 +----------------------------------------------------------------------------------------------------- 固定起始符

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 寄存器值 (最新读取值)

3. 示例说明 (假设 Device ID = 0x01)

  • 心跳包示例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)。