# BOAT DTU 无线通信协议 (RF433) 本文档采用直观图示方式定义 BOAT DTU 在 433MHz 无线频段的报文格式。 ## 1. 通用报文结构图示 所有无线报文均遵循以下结构: ```text 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) 电平发生变化时,立即发送此包。 ```text 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 接口收到的原始串口数据封装后发出。 ```text AA 48 LEN ID [DATA] SUM -- -- --- -- ------ --- | | | | | | | | | | | +-- 校验和 | | | | +--------- RS485 原始数据内容 | | | +--------------- 本机设备 ID | | +------------------- 长度:(1 + 原始数据长度 + SUM) | +----------------------- 类型标识:0x48 (RS485 Data) +--------------------------- 固定起始符 ``` ### 2.3 W5500 网络透传数据包 将以太网口收到的 UDP/TCP 原始数据封装后发出。 ```text AA 55 LEN ID [DATA] SUM -- -- --- -- ------ --- | | | | | | | | | | | +-- 校验和 | | | | +--------- 网络原始数据内容 | | | +--------------- 本机设备 ID | | +------------------- 长度:(1 + 原始数据长度 + SUM) | +----------------------- 类型标识:0x55 (Net Data) +--------------------------- 固定起始符 ``` ### 2.4 系统心跳包 (30秒/次) 系统定时上报当前存活状态,包含当前的 I/O 状态、防丢包序列号、固件版本及 Modbus 寄存器值。 #### 2.4.1 标准心跳包 (8字节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 +----------------------------------------------------------------------------------------------------- 固定起始符 ``` **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=1,I/O全高,Modbus=0x012C (300)(8字节payload) * **485透传示例**:`AA 48 05 01 41 42 43 44 4D` * 表示:ID为1的设备,转发了 485 数据 "ABCD" (长度 4+1=5)。