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

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