GrabBag/App/BeltTearing/Doc/撕裂ModbusTCP协议文档.md

193 lines
5.3 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.

# 撕裂ModbusTCP协议对接文档
## 1. 概述
本文档描述了皮带撕裂检测系统与外部系统通过ModbusTCP协议进行数据交互的规范。系统将检测到的皮带撕裂信息写入保持寄存器供外部系统读取。
## 2. 系统架构
- **服务器端**:皮带撕裂检测系统
- **客户端**:外部监控或控制系统
- **通信协议**ModbusTCP
- **默认端口**502
## 3. 数据格式
### 3.1 保持寄存器地址分配
| 起始地址 | 名称 | 类型 | 读/写 | 描述 |
|---------|------|------|------|------|
| 0 | 系统状态 | UInt16 | 读/写 | 系统运行状态和控制命令 |
| 1-16 | 撕裂信息1 | 结构体 | 只读 | 第一个撕裂检测结果 |
| 17-32 | 撕裂信息2 | 结构体 | 只读 | 第二个撕裂检测结果 |
| 33-48 | 撕裂信息3 | 结构体 | 只读 | 第三个撕裂检测结果 |
| 49-64 | 撕裂信息4 | 结构体 | 只读 | 第四个撕裂检测结果 |
| 65-80 | 撕裂信息5 | 结构体 | 只读 | 第五个撕裂检测结果 |
### 3.2 单个撕裂信息结构
每个撕裂信息占用16个保持寄存器具体分配如下
| 寄存器地址(相对) | 名称 | 类型 | 描述 |
|-----------------|------|------|------|
| 0 | 撕裂ID | UInt32 | 撕裂的唯一标识符 |
| 2 | 状态 | UInt16 | 撕裂状态 |
| 3 | 宽度 | Float | 撕裂宽度(mm) |
| 5 | 深度 | Float | 撕裂深度(mm) |
| 7-15 | 保留 | - | 保留用于未来扩展 |
### 3.3 数据类型说明
#### 3.3.1 系统状态枚举
系统状态寄存器(地址0)既可以读取也可以写入:
**读取时的状态值**:
| 值 | 状态 | 描述 |
|----|------|------|
| 0 | 系统停止 | 系统处于停止状态,不进行检测 |
| 1 | 系统运行 | 系统正常运行,正在进行撕裂检测 |
| 2 | 系统忙碌 | 系统正在处理数据 |
**写入时的控制命令**:
| 值 | 命令 | 描述 |
|----|------|------|
| 0 | 停止工作 | 停止相机检测,停止算法处理 |
| 1 | 开始工作 | 启动相机检测,开始算法处理 |
| 2 | 复位检测 | 重置检测状态,清空缓存数据,重新开始检测,**清空所有检测结果数据(地址1-80)** |
#### 3.3.2 撕裂状态枚举
| 值 | 状态 | 描述 |
|----|------|------|
| 0 | keSG_tearStatus_Uknown | 未知状态 |
| 1 | keSG_tearStatus_New | 新发现的撕裂 |
| 2 | keSG_tearStatus_Growing | 正在增长的撕裂 |
| 3 | keSG_tearStatus_Ended | 已结束的撕裂 |
| 4 | keSG_tearStatus_Invalid | 无效撕裂 |
#### 3.3.3 浮点数表示
浮点数使用两个连续的16位寄存器表示采用Modbus标准的大端字节序
- 高16位存储在较低地址的寄存器中
- 低16位存储在较高地址的寄存器中
例如浮点数3.14159会被分解为:
- 寄存器n: 高16位
- 寄存器n+1: 低16位
## 4. 功能码支持
| 功能码 | 描述 | 支持情况 |
|--------|------|----------|
| 0x03 | 读取保持寄存器 | 支持 |
| 0x06 | 写单个寄存器 | 支持(仅地址0系统状态寄存器) |
| 0x10 | 写多个寄存器 | 支持(仅地址0系统状态寄存器) |
## 5. 示例
### 5.1 控制系统状态
#### 5.1.1 停止工作
```
请求:
功能码: 0x06 (写单个寄存器)
寄存器地址: 0
寄存器值: 0x0000
响应:
功能码: 0x06
寄存器地址: 0
寄存器值: 0x0000 (确认写入成功)
```
#### 5.1.2 开始工作
```
请求:
功能码: 0x06 (写单个寄存器)
寄存器地址: 0
寄存器值: 0x0001
响应:
功能码: 0x06
寄存器地址: 0
寄存器值: 0x0001 (确认写入成功)
```
#### 5.1.3 复位检测
```
请求:
功能码: 0x06 (写单个寄存器)
寄存器地址: 0
寄存器值: 0x0002
响应:
功能码: 0x06
寄存器地址: 0
寄存器值: 0x0002 (确认写入成功)
```
### 5.2 读取系统状态
```
请求:
功能码: 0x03 (读取保持寄存器)
起始地址: 0
寄存器数量: 1
响应:
数据: 0x0001 (系统运行中)
```
### 5.3 读取撕裂信息
假设要读取第一个撕裂的信息:
```
请求:
功能码: 0x03 (读取保持寄存器)
起始地址: 1
寄存器数量: 8
响应:
数据:
- 地址1-2: 撕裂ID (例如 0x0000 0001)
- 地址3: 状态 (例如 0x0001 表示新发现)
- 地址4-5: 宽度 (例如 0x4049 0FD0 表示 3.14mm)
- 地址6-7: 深度 (例如 0x3F80 0000 表示 1.0mm)
```
## 6. 错误处理
系统可能返回以下Modbus异常码
| 异常码 | 描述 |
|--------|------|
| 0x01 | 非法功能码 |
| 0x02 | 非法数据地址 |
| 0x03 | 非法数据值 |
| 0x04 | 从设备故障 |
## 7. 注意事项
1. 系统最多同时报告5个撕裂信息
2. 当没有撕裂时对应的寄存器区域保持为0
3. 浮点数精度为IEEE 754单精度格式
4. 撕裂信息数据为只读,仅系统状态寄存器(地址0)支持写入
5. 系统状态寄存器值为1表示系统正常运行
6. 写入系统状态寄存器时:
- 写入0停止相机检测和算法处理
- 写入1启动相机检测和算法处理
- 写入2复位检测清空缓存并重新开始**自动清空所有检测结果寄存器(地址1-80)**
7. 只有地址0(系统状态)支持写操作,写入其他地址将返回非法地址异常
8. 复位检测时系统会自动将检测结果区域的80个寄存器全部清零确保不会读取到旧的检测数据
## 8. 更新频率
撕裂信息更新频率取决于检测算法的处理速度,通常在每次检测到新的撕裂或撕裂状态发生变化时更新。