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

5.3 KiB
Raw Blame History

撕裂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. 更新频率

撕裂信息更新频率取决于检测算法的处理速度,通常在每次检测到新的撕裂或撕裂状态发生变化时更新。