2025-11-26 22:44:38 +08:00
|
|
|
|
# 皮带撕裂检测系统 - ModbusTCP协议文档
|
|
|
|
|
|
|
|
|
|
|
|
## 版本信息
|
|
|
|
|
|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
**当前版本**:v1.1.0
|
|
|
|
|
|
**文档状态**:正式发布
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-26 22:44:38 +08:00
|
|
|
|
| 版本号 | 修订日期 | 修订人 | 修订说明 |
|
|
|
|
|
|
|--------|---------|--------|----------|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
| v1.1.0 | 2025-11-30 | - | 调整寄存器地址<br>将复位命令移至第一个寄存器,便于后续扩展 |
|
2025-11-26 22:44:38 +08:00
|
|
|
|
| v1.0.0 | 2025-11-25 | - | 初始版本,定义基础报警和复位功能 |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 概述
|
|
|
|
|
|
|
|
|
|
|
|
本文档描述了皮带撕裂检测系统与PLC系统通过ModbusTCP协议进行数据交互的简化规范。系统提供撕裂报警信息和手动复位功能。
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 系统架构
|
|
|
|
|
|
|
|
|
|
|
|
- **服务器端**:皮带撕裂检测系统
|
|
|
|
|
|
- **客户端**:PLC或外部控制系统
|
|
|
|
|
|
- **通信协议**:ModbusTCP
|
|
|
|
|
|
- **默认端口**:502
|
|
|
|
|
|
|
|
|
|
|
|
## 3. 寄存器地址分配
|
|
|
|
|
|
|
|
|
|
|
|
| Modbus地址 | 寄存器名称 | 类型 | 读/写 | 描述 |
|
|
|
|
|
|
|-----------|----------|------|------|------|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
| 40001 | 复位命令 | UInt16 | 读/写 | 写入1执行复位,清除报警 |
|
|
|
|
|
|
| 40002 | 撕裂报警标志 | UInt16 | 只读 | 0=无报警,1=撕裂报警 |
|
|
|
|
|
|
| 40003 | 最大长度 | UInt16 | 只读 | 撕裂最大长度值(mm) |
|
|
|
|
|
|
| 40004 | 最大宽度 | UInt16 | 只读 | 撕裂最大宽度值(mm) |
|
|
|
|
|
|
| 40005 | 最大撕裂ID | UInt32 | 只读 | 最大撕裂对应的ID<br>占用2个寄存器,40005-40006|
|
2025-11-26 22:44:38 +08:00
|
|
|
|
|
|
|
|
|
|
## 4. 工作原理
|
|
|
|
|
|
|
|
|
|
|
|
### 4.1 报警流程
|
|
|
|
|
|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
1. 系统检测到撕裂时,**40002寄存器**自动置为1
|
|
|
|
|
|
2. 同时更新**40003**(最大长度)、**40004**(最大宽度)和**40005-40006**(最大撕裂ID)数据
|
2025-11-26 22:44:38 +08:00
|
|
|
|
3. 报警状态会一直保持,直到手动复位
|
|
|
|
|
|
|
|
|
|
|
|
### 4.2 复位流程
|
|
|
|
|
|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
1. PLC向**40001寄存器**写入值1
|
2025-11-26 22:44:38 +08:00
|
|
|
|
2. 系统执行复位操作:
|
2025-11-30 15:38:27 +08:00
|
|
|
|
- 清除40001复位命令(置为0)
|
|
|
|
|
|
- 清除40002报警标志(置为0)
|
|
|
|
|
|
- 清除40003和40004数据(置为0)
|
|
|
|
|
|
- 清除40005-40006最大撕裂ID(置为0)
|
2025-11-26 22:44:38 +08:00
|
|
|
|
- 重置内部检测状态
|
|
|
|
|
|
3. 系统恢复正常监测状态
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 功能码支持
|
|
|
|
|
|
|
|
|
|
|
|
| 功能码 | 描述 | 支持情况 |
|
|
|
|
|
|
|--------|------|----------|
|
|
|
|
|
|
| 0x03 | 读取保持寄存器 | 支持 |
|
2025-11-30 15:38:27 +08:00
|
|
|
|
| 0x06 | 写单个寄存器 | 支持(仅40001复位寄存器) |
|
|
|
|
|
|
| 0x10 | 写多个寄存器 | 支持(仅40001复位寄存器) |
|
2025-11-26 22:44:38 +08:00
|
|
|
|
|
|
|
|
|
|
## 6. 使用示例
|
|
|
|
|
|
|
|
|
|
|
|
### 6.1 读取报警状态
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
请求:
|
|
|
|
|
|
功能码: 0x03 (读取保持寄存器)
|
|
|
|
|
|
起始地址: 40001
|
2025-11-30 15:38:27 +08:00
|
|
|
|
寄存器数量: 6
|
2025-11-26 22:44:38 +08:00
|
|
|
|
|
|
|
|
|
|
响应示例(有报警):
|
2025-11-30 15:38:27 +08:00
|
|
|
|
- 40001: 0x0000 (复位命令)
|
|
|
|
|
|
- 40002: 0x0001 (报警)
|
|
|
|
|
|
- 40003: 0x0032 (长度50mm)
|
|
|
|
|
|
- 40004: 0x000A (宽度10mm)
|
|
|
|
|
|
- 40005: 0x0000 (撕裂ID高16位)
|
|
|
|
|
|
- 40006: 0x2710 (撕裂ID低16位,ID=10000)
|
2025-11-26 22:44:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.2 复位报警
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
请求:
|
|
|
|
|
|
功能码: 0x06 (写单个寄存器)
|
2025-11-30 15:38:27 +08:00
|
|
|
|
寄存器地址: 40001
|
2025-11-26 22:44:38 +08:00
|
|
|
|
寄存器值: 0x0001
|
|
|
|
|
|
|
|
|
|
|
|
响应:
|
|
|
|
|
|
功能码: 0x06
|
2025-11-30 15:38:27 +08:00
|
|
|
|
寄存器地址: 40001
|
2025-11-26 22:44:38 +08:00
|
|
|
|
寄存器值: 0x0001 (确认写入成功)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
复位完成后再次读取:
|
|
|
|
|
|
```
|
|
|
|
|
|
请求:
|
|
|
|
|
|
功能码: 0x03 (读取保持寄存器)
|
|
|
|
|
|
起始地址: 40001
|
2025-11-30 15:38:27 +08:00
|
|
|
|
寄存器数量: 6
|
2025-11-26 22:44:38 +08:00
|
|
|
|
|
|
|
|
|
|
响应示例(复位后):
|
2025-11-30 15:38:27 +08:00
|
|
|
|
- 40001: 0x0000 (复位命令已清除)
|
|
|
|
|
|
- 40002: 0x0000 (无报警)
|
2025-11-26 22:44:38 +08:00
|
|
|
|
- 40003: 0x0000 (数据已清除)
|
2025-11-30 15:38:27 +08:00
|
|
|
|
- 40004: 0x0000 (数据已清除)
|
|
|
|
|
|
- 40005: 0x0000 (ID已清除)
|
|
|
|
|
|
- 40006: 0x0000 (ID已清除)
|
2025-11-26 22:44:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 7. 注意事项
|
|
|
|
|
|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
1. **报警保持特性**:报警标志(40002)一旦置位,只能通过写入复位寄存器(40001)来清除,不会自动复位
|
2025-11-26 22:44:38 +08:00
|
|
|
|
2. **数据单位**:长度和宽度数据单位为毫米(mm),范围0-65535
|
2025-11-30 15:38:27 +08:00
|
|
|
|
3. **复位操作**:只有40001寄存器支持写操作,写入其他地址将返回异常
|
|
|
|
|
|
4. **复位值**:向40001写入任何非零值都会触发复位操作,建议统一使用1
|
|
|
|
|
|
5. **读取频率**:建议PLC以100ms-500ms的周期轮询读取40002寄存器监测报警状态
|
|
|
|
|
|
6. **数据有效性**:仅当40002=1时,40003、40004和40005-40006的数据才有意义
|
|
|
|
|
|
7. **撕裂ID格式**:最大撕裂ID是32位整数,占用2个寄存器(40005为高16位,40006为低16位),采用大端字节序
|
|
|
|
|
|
8. **扩展性设计**:复位命令位于第一个寄存器(40001),便于后续在末尾扩展更多数据字段而不影响核心功能
|
2025-11-26 22:44:38 +08:00
|
|
|
|
|
|
|
|
|
|
## 8. 错误处理
|
|
|
|
|
|
|
|
|
|
|
|
系统可能返回以下Modbus异常码:
|
|
|
|
|
|
|
|
|
|
|
|
| 异常码 | 描述 | 常见原因 |
|
|
|
|
|
|
|--------|------|----------|
|
|
|
|
|
|
| 0x01 | 非法功能码 | 使用了不支持的功能码 |
|
|
|
|
|
|
| 0x02 | 非法数据地址 | 访问了未定义的寄存器地址 |
|
|
|
|
|
|
| 0x03 | 非法数据值 | 写入了不合法的数据值 |
|
|
|
|
|
|
| 0x04 | 从设备故障 | 检测系统内部故障 |
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 典型应用场景
|
|
|
|
|
|
|
|
|
|
|
|
### 场景1:PLC监控报警
|
|
|
|
|
|
```
|
|
|
|
|
|
循环执行:
|
2025-11-30 15:38:27 +08:00
|
|
|
|
1. PLC定时读取40002寄存器(报警标志)
|
|
|
|
|
|
2. 如果40002=1,读取40003、40004和40005-40006获取撕裂尺寸和ID
|
2025-11-26 22:44:38 +08:00
|
|
|
|
3. PLC触发声光报警
|
|
|
|
|
|
4. 操作员检查现场后,通过HMI按钮触发复位
|
2025-11-30 15:38:27 +08:00
|
|
|
|
5. PLC向40001写入1执行复位
|
2025-11-26 22:44:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 场景2:自动记录报警历史
|
|
|
|
|
|
```
|
|
|
|
|
|
循环执行:
|
2025-11-30 15:38:27 +08:00
|
|
|
|
1. 检测到40002从0变为1
|
|
|
|
|
|
2. 立即读取40003、40004和40005-40006
|
|
|
|
|
|
3. 记录时间戳、撕裂尺寸和撕裂ID数据
|
2025-11-26 22:44:38 +08:00
|
|
|
|
4. 等待手动复位指令
|
|
|
|
|
|
5. 执行复位后继续监测
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 10. 地址映射说明
|
|
|
|
|
|
|
|
|
|
|
|
| 寄存器描述地址 | Modbus协议地址 | 实际寄存器地址 |
|
|
|
|
|
|
|--------------|---------------|---------------|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
| 40001 | 功能码0x03/0x06, 地址0 | 内部地址0 |
|
2025-11-26 22:44:38 +08:00
|
|
|
|
| 40002 | 功能码0x03, 地址1 | 内部地址1 |
|
|
|
|
|
|
| 40003 | 功能码0x03, 地址2 | 内部地址2 |
|
2025-11-30 15:38:27 +08:00
|
|
|
|
| 40004 | 功能码0x03, 地址3 | 内部地址3 |
|
|
|
|
|
|
| 40005 | 功能码0x03, 地址4 | 内部地址4 |
|
|
|
|
|
|
| 40006 | 功能码0x03, 地址5 | 内部地址5 |
|
2025-11-26 22:44:38 +08:00
|
|
|
|
|
2025-11-30 15:38:27 +08:00
|
|
|
|
**注意**:Modbus协议中实际使用的寄存器地址需要减去40001,例如访问40001时使用地址0,访问40006时使用地址5。
|