# OP50 PLC 信号监控测试工具 ## 功能说明 独立可运行的 S7-1200 信号监控工具,不依赖 MES 服务器连接,直连 PLC 读写 DB200 点位,用于现场调试和验证。 --- ## 快速启动 ### 方法1:IDE 运行 直接运行 `com.mes.test.PlcSignalTest` 的 main 方法 ### 方法2:命令行 ```bash # 默认 IP: 192.168.1.1 java -cp com.mes.test.PlcSignalTest # 指定 IP java -cp com.mes.test.PlcSignalTest 192.168.1.100 ``` --- ## 界面布局 ### 1. 连接控制区 - **PLC IP 输入框**:默认 192.168.1.1,可修改 - **连接/断开按钮**:后台线程连接,不卡 UI - **连接状态灯**:绿=已连接,灰=未连接 - 显示设备型号:S7-1200 / DB200 ### 2. 转台位置区(只读) | 点位 | 含义 | 显示 | |------|------|------| | DB200.156.3 | A面到位传感器 | 绿点=到位,灰点=未到位 | | DB200.156.4 | B面到位传感器 | 绿点=到位,灰点=未到位 | | 推算当前面 | 根据传感器推算 | A / B / -- | **验证方式**:手动转动转台,观察灯变化和当前面显示 --- ### 3. MES允许启动区(可读写)⚠️ | 点位 | 含义 | 操作 | |------|------|------| | DB200.0.1 | A面MES允许启动 | 置位 true / 复位 false | | DB200.38.0 | B面MES允许启动 | 置位 true / 复位 false | **显示**: - 绿点 = true(PLC 启动按钮解锁) - 灰点 = false(PLC 启动按钮锁定) **写操作流程**: 1. 点击「置位 true」或「复位 false」 2. 弹出确认框(防止误操作) 3. 确认后执行写入 4. 日志区显示写入结果 **现场验证步骤**: ``` 1. 扫码完成后,正常流程应该看到 A面许可 = true(绿灯) 2. 此时观察 PLC 面板:A面启动按钮应该亮起/解锁 3. 手动点「复位 false」→ 启动按钮应该熄灭/锁定 4. 再点「置位 true」→ 启动按钮重新亮起 ``` --- ### 4. 焊接状态区(只读) | 点位 | 含义 | 显示 | |------|------|------| | DB200.34 | A面状态(Int16) | 数值 + 文字 + 状态灯 | | DB200.72 | B面状态(Int16) | 数值 + 文字 + 状态灯 | **状态含义**: - `0 空闲` — 灰灯 - `1 运行中` — 黄灯 - `2 完成` — 绿灯 **应答清零按钮**: - 手动写 0 到状态地址,模拟 MES 应答 PLC - 点击前弹确认框 - 正常流程:PLC 写 2(完成)→ MES 读到后应答写 0 → PLC 清除完成标志 **验证步骤**: ``` 1. PLC 焊接完成 → 状态变为 2(绿灯) 2. 等待 MES 自动应答(正常情况) 3. 如果测试手动应答:点「应答清零」→ 状态变回 0 ``` --- ### 5. 焊接参数区(只读) 表格显示 R1~R4 四个焊点的实时参数: | 列 | 点位偏移 | 数据类型 | 说明 | |----|----------|----------|------| | 焊点 | - | - | R1/R2/R3/R4 | | 完成标志 | 76.1 / 96.2 / 116.2 / 136.2 | Bool | ● = true, ○ = false | | 序号 | 78 / 98 / 118 / 138 | Int16 | 错误代码 | | 电流 | 80 / 100 / 120 / 140 | Float32 | 单位 A | | 电压 | 84 / 104 / 124 / 144 | Float32 | 单位 V | | 送丝速度 | 88 / 108 / 128 / 148 | Float32 | m/min | | 焊接速度 | 92 / 112 / 132 / 152 | Float32 | mm/s | **刷新频率**:1 秒 **验证步骤**: ``` 1. PLC 启动焊接 → 状态变 1(运行中) 2. 观察表格实时更新电流/电压/速度 3. 焊接完成 → 完成标志变 ●(绿点) 4. 对比 PLC 触摸屏上的参数是否一致 ``` --- ### 6. 日志区 底部滚动文本框,记录: - 连接/断开事件 - 所有写操作及结果 - 读取异常(不中断轮询,仅记录) 格式:`[HH:mm:ss] 消息内容` --- ## 监控逻辑 ### 轮询周期 - 首次启动:0.5 秒 - 正常运行:1 秒 ### 读取失败处理 - 不弹窗、不中断轮询 - 对应显示 `--` 或 `-1` - 静默记录到控制台(System.err) ### 写入失败处理 - 弹窗提示错误信息 - 日志区记录详细原因 --- ## 常见问题 ### 1. 连接失败 **原因**: - IP 地址错误 - PLC 未开机或网络不通 - 防火墙拦截 **解决**: ```bash # 先 ping 测试 ping 192.168.1.1 # 检查网络配置 # S7-1200 默认端口:102(自动使用) ``` ### 2. 完成标志地址疑问 当前代码中 R1 的完成标志是 `DB200.76.1`(位偏移 .1),而 R2~R4 是 `.2`。 - 如果现场验证不一致,修改 `PlcSignalPanel.WELD_POINTS` 数组 - 地址格式:`DB编号.字节偏移.位偏移` ### 3. 参数显示异常 **检查项**: - PLC 侧 DB200 是否允许外部读取(优化块访问属性) - 数据类型是否匹配(Bool/Int16/Float32) - 字节对齐(Float32 必须从偶数地址开始) --- ## 测试检查清单 ### 基础连接 - [ ] 能成功连接 PLC - [ ] 断开后所有显示变灰 - [ ] 重新连接恢复正常 ### 转台位置 - [ ] 转台在 A 面 → A 灯绿,当前面显示 A - [ ] 转台在 B 面 → B 灯绿,当前面显示 B - [ ] 转台移动中 → 两灯都灰 ### MES许可信号 - [ ] 置位 A 面 → PLC 启动按钮 A 解锁 - [ ] 复位 A 面 → PLC 启动按钮 A 锁定 - [ ] 置位 B 面 → PLC 启动按钮 B 解锁 - [ ] 复位 B 面 → PLC 启动按钮 B 锁定 ### 焊接状态 - [ ] 启动前 → 0 空闲(灰灯) - [ ] 焊接中 → 1 运行中(黄灯) - [ ] 焊接完成 → 2 完成(绿灯) - [ ] 应答清零 → 状态变 0 ### 焊接参数 - [ ] 焊接中参数实时更新(1秒刷新) - [ ] 完成标志正确显示 ●/○ - [ ] 数值与 PLC 触摸屏一致 --- ## 注意事项 ⚠️ **写操作影响真实 PLC** - 所有写操作都有确认弹窗 - 误操作可能导致设备异常启动 - 建议在非生产时段测试 ⚠️ **不替代正式 MES 客户端** - 仅用于调试和信号验证 - 不记录数据到 MES 服务器 - 不保存焊接参数到 SQLite ⚠️ **网络安全** - 测试工具直连 PLC,绕过 MES 权限控制 - 不要在生产环境长期运行 - 使用完毕断开连接 --- ## 文件位置 ``` src/ ├── com/mes/test/ │ └── PlcSignalTest.java # 测试入口(main) └── com/mes/ui/ └── PlcSignalPanel.java # 监控面板实现 ``` --- ## 依赖库 与正式客户端相同: - `iot-communication.jar` — S7 PLC 通信库 - Swing(JDK 自带) --- ## 技术支持 问题反馈:检查日志区输出,记录具体错误信息