5.3 KiB
5.3 KiB
撕裂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. 注意事项
- 系统最多同时报告5个撕裂信息
- 当没有撕裂时,对应的寄存器区域保持为0
- 浮点数精度为IEEE 754单精度格式
- 撕裂信息数据为只读,仅系统状态寄存器(地址0)支持写入
- 系统状态寄存器值为1表示系统正常运行
- 写入系统状态寄存器时:
- 写入0:停止相机检测和算法处理
- 写入1:启动相机检测和算法处理
- 写入2:复位检测,清空缓存并重新开始,自动清空所有检测结果寄存器(地址1-80)
- 只有地址0(系统状态)支持写操作,写入其他地址将返回非法地址异常
- 复位检测时,系统会自动将检测结果区域的80个寄存器全部清零,确保不会读取到旧的检测数据
8. 更新频率
撕裂信息更新频率取决于检测算法的处理速度,通常在每次检测到新的撕裂或撕裂状态发生变化时更新。