1. 项目概述:FitLed三相机视觉复检系统
这套基于C#和VisionPro 9.0的三相机视觉复检系统,是我在LED贴合产线项目中实际验证过的工业级解决方案。它通过三台工业相机(RCAM/LED/CHECK)协同工作,在SMT后段FATP产线完成LED-透镜组件的精准定位和复检。系统采用模块化设计,将视觉处理、PLC通信、MES上报等功能解耦,实测节拍可达1.8秒/穴,重复精度±0.02mm。
提示:这套框架的核心价值在于其通用性设计,通过配置文件驱动和接口抽象,可以快速适配不同品牌PLC和相机,特别适合需要多相机协同的精密对位场景。
2. 系统架构设计解析
2.1 分层架构设计
系统采用四层架构设计:
- 硬件交互层:封装三菱PLC通信和VisionPro相机操作
- 业务逻辑层:实现状态机和产品数据处理
- 网络通信层:处理PDCA/OEE协议上报
- 用户界面层:提供操作界面和日志显示
这种分层设计使得各模块可以独立替换,例如当需要改用西门子PLC时,只需重写硬件交互层的PLC通信模块。
2.2 核心模块交互关系
mermaid复制graph TD
A[PLC信号] --> B[状态机]
B --> C[相机控制]
C --> D[视觉处理]
D --> E[结果反馈]
E --> F[PLC输出]
E --> G[MES上报]
3. 视觉处理关键技术实现
3.1 三相机协同工作流程
- RCAM相机:拍摄透镜基准Mark点,计算初始角度
- LED相机:拍摄LED基准Mark,计算相对偏移和二次角度
- CHECK相机:复检LED-透镜对位边缘,进行最终判定
每个相机都对应独立的VisionPro ToolGroup,通过二次封装提供统一的调用接口。
3.2 坐标转换与补偿算法
系统实现了完整的坐标转换链:
code复制像素坐标 → 物理坐标 → 机械坐标 → PLC脉冲
关键转换公式:
code复制脉冲值 = (像素偏移 × 标定系数 + 补偿值) × 放大系数
其中补偿值包含4组独立参数,支持单穴微调。
4. PLC通信实现细节
4.1 三菱PLC通信封装
基于ActUtlTypeLib实现的通信类主要功能:
csharp复制public class PlcSanLingFitLed : IPlc
{
// 读取D区数据
public int ReadD(int address) {...}
// 批量写入M区
public void WriteM(int startAddress, bool[] values) {...}
// 信号状态监控
public bool GetSignal(PlcSignalType signalType) {...}
}
4.2 信号处理机制
系统将PLC信号抽象为枚举类型:
csharp复制public enum PlcSignalType
{
AllowCamera1 = 0,
Camera1Done = 1,
// ...其他20+信号
}
通过索引器访问,避免硬编码地址。
5. 状态机设计与实现
5.1 双队列异步机制
csharp复制public class Work
{
private ConcurrentQueue<Command> _commandQueue;
private ConcurrentQueue<Result> _resultQueue;
// PLC信号轮询线程
private void PlcPollingThread() {...}
// 视觉处理线程
private void VisionProcessThread() {...}
// 结果回调线程
private void ResultCallbackThread() {...}
}
5.2 典型状态转移
- 等待上料 → 收到PLC有料信号
- 触发RCAM拍照 → 等待拍照完成
- 触发LED拍照 → 等待拍照完成
- 发送贴合指令 → 等待贴合完成
- 触发复检拍照 → 等待复检结果
- 发送下料指令 → 返回初始状态
6. 系统配置与管理
6.1 配置文件结构
采用INI格式配置文件,主要章节:
code复制[Camera]
RCAM_Exposure=8000
LED_Exposure=10000
[PLC]
StationNo=1
PulseRatio=0.01
[Compensation]
Pos1_X=0.02
Pos1_Y=-0.01
6.2 动态加载机制
系统监控配置文件变化,关键参数修改后自动生效:
csharp复制FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Changed += (s,e) => ReloadConfig();
7. 性能优化技巧
7.1 视觉处理优化
- 使用VisionPro的优化工具组
- 限制ROI区域减少处理时间
- 预编译匹配模板
7.2 线程调度优化
- 设置线程优先级:视觉处理 > PLC通信 > UI更新
- 使用内存池减少GC压力
- 批量处理PLC读写操作
8. 常见问题排查
8.1 典型故障处理表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 拍照超时 | 相机掉线/曝光设置不当 | 检查相机连接/调整曝光 |
| 坐标偏差大 | 标定失效/补偿值错误 | 重新标定/检查补偿值 |
| PLC通信中断 | 站号错误/线路故障 | 检查站号设置/测试线路 |
8.2 日志分析要点
系统生成三种日志:
- 运行日志:记录系统事件
- 审计日志:记录用户操作
- 数据日志:保存产品测量值
推荐使用Notepad++等支持日志高亮的工具分析。
9. 扩展与移植方案
9.1 支持其他PLC品牌
实现IPlc接口示例(欧姆龙):
csharp复制public class PlcOmron : IPlc
{
// 实现接口方法
public int ReadD(int address)
{
// 使用Omron FINS协议实现
}
}
9.2 替换视觉库
VisionPro替换为Halcon的要点:
- 重新实现相机控制类
- 转换视觉工具脚本
- 调整坐标转换参数
10. 项目部署建议
-
硬件选型:
- 工业PC:i5以上,至少8GB内存
- 相机:500万像素以上,全局快门
- 镜头:25mm定焦工业镜头
-
环境要求:
- .NET Framework 4.7.2
- VisionPro 9.0运行时
- PLC通信驱动
-
网络配置:
- PLC网络:独立子网
- MES网络:配置防火墙规则
这套系统在实际项目中表现出色,特别是在处理LED透镜组件的精密对位时,通过三相机协同和多级补偿机制,有效解决了传统单相机系统的精度不足问题。对于想要学习工业视觉系统开发的同学,这个项目提供了很好的参考范例。