Files
433_STM32/docs/报文.md

109 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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=1I/O全高Modbus=0x012C (300)8字节payload
* **485透传示例**`AA 48 05 01 41 42 43 44 4D`
* 表示ID为1的设备转发了 485 数据 "ABCD" (长度 4+1=5)。