一、背景介绍
在智能制造范畴,呆板视觉检测与 PLC 控制的无缝集成是实现自动化生产线闭环控制的关键。本文将详细介绍如何使用 C# 开发上位机系统,实现 Cognex VisionPro 视觉系统与西门子 S7 PLC 的数据交互,打造高效、稳定的工业检测方案。
二、系统架构计划
1. 硬件组成
- 工业相机:Cognex DM 系列智能相机(分辨率 1280×1024,帧率 30FPS)
- 光源系统:环形 LED 光源(可调亮度,消除反光)
- PLC 控制器:西门子 S7-1200(CPU 1214C DC/DC/DC)
- 工控机:研华 IPC-610L(i7 处理器,8GB RAM,Windows 10 系统)
2. 软件架构
- ┌───────────────────────────────────────────┐
- │ 上位机应用 (C#) │
- │ ┌───────────────┐ ┌───────────────────┐ │
- │ │ VisionPro接口 │ │ PLC通信模块 │ │
- │ │ (Cognex DLL) │ │ (S7.NET库) │ │
- │ └───────────────┘ └───────────────────┘ │
- └───────────────────┬───────────────────────┘
- │
- ┌───────────────────┼───────────────────────┐
- │ ▼ │
- │ ┌─────────────────────┐ ┌──────────────┐ │
- │ │ VisionPro软件 │ │ PLC编程软件 │ │
- │ │ (Cognex Designer) │ │ (TIA Portal) │ │
- │ └─────────────────────┘ └──────────────┘ │
- └───────────────────┬───────────────────────┘
- │
- ┌───────────────────┼───────────────────────┐
- │ ▼ │
- │ ┌─────────────────────┐ ┌──────────────┐ │
- │ │ 工业相机 │ │ PLC硬件 │ │
- │ └─────────────────────┘ └──────────────┘ │
- └───────────────────────────────────────────┘
复制代码 三、VisionPro 项目开发
1. 创建检测使命
在 VisionPro Designer 中完成以下操作:
- 设置相机参数(曝光时间、增益、触发模式)
- 计划定位工具(PatMax 模式匹配)
- 添加测量工具(卡尺、边缘检测)
- 设置缺陷检测算法(Blob 分析、灰度对比)
- 导出 C# 代码模板
2. 关键代码分析
以下是 VisionPro C# 接口的焦点代码:
- // 初始化VisionPro应用
- private CogApplication cogApp;
- private CogAcqFifoTool acqFifoTool;
- private CogPMAlignTool pmAlignTool;
- private CogBlobTool blobTool;
- // 加载VPP项目文件
- private void LoadVisionProProject(string projectPath)
- {
- cogApp = new CogApplication();
- cogApp.LoadFromFile(projectPath);
-
- // 获取各工具引用
- acqFifoTool = cogApp.Tools["AcqFifoTool"] as CogAcqFifoTool;
- pmAlignTool = cogApp.Tools["PMAlignTool"] as CogPMAlignTool;
- blobTool = cogApp.Tools["BlobTool"] as CogBlobTool;
- }
- // 执行视觉检测
- public VisionResult RunInspection()
- {
- // 触发图像采集
- acqFifoTool.Run();
- CogImage8Grey image = acqFifoTool.OutputImage as CogImage8Grey;
-
- // 执行定位
- pmAlignTool.InputImage = image;
- pmAlignTool.Run();
-
- // 执行缺陷检测
- blobTool.InputImage = image;
- blobTool.Offset = pmAlignTool.Results.GetPose(0);
- blobTool.Run();
-
- // 返回检测结果
- return new VisionResult
- {
- IsPass = blobTool.Results.GetBlobs().Count == 0,
- DefectCount = blobTool.Results.GetBlobs().Count,
- InspectionTime = DateTime.Now
- };
- }
复制代码 四、PLC 通信实现
1. 通信协议选择
接纳S7.NET库实现 C# 与 Siemens S7 PLC 的通信,支持以下协议:
- S7-200 SMART:S7.NET的 S7200SmartPlc 类
- S7-1200/1500:S7.NET的 S71200Plc 类
- 通信方式:TCP/IP(默认端口 102)
2. 焦点通信代码
- using S7.Net;
- public class PlcController : IDisposable
- {
- private Plc plc;
-
- // 初始化PLC连接
- public bool Connect(string ipAddress, CpuType cpuType = CpuType.S71200)
- {
- try
- {
- plc = new Plc(cpuType, ipAddress, 0, 1);
- plc.Open();
- return plc.IsConnected;
- }
- catch (Exception ex)
- {
- Console.WriteLine($"PLC连接失败: {ex.Message}");
- return false;
- }
- }
-
- // 读取PLC数据
- public bool[] ReadInputBits(int startAddress, int count)
- {
- if (!plc.IsConnected) return null;
-
- try
- {
- var data = plc.DBRead(1, startAddress, VarType.Bit, count);
- return data.Cast<bool>().ToArray();
- }
- catch (Exception ex)
- {
- Console.WriteLine($"读取PLC数据失败: {ex.Message}");
- return null;
- }
- }
-
- // 写入PLC数据
- public bool WriteOutputBits(int startAddress, bool[] values)
- {
- if (!plc.IsConnected) return false;
-
- try
- {
- plc.DBWrite(1, startAddress, values);
- return true;
- }
- catch (Exception ex)
- {
- Console.WriteLine($"写入PLC数据失败: {ex.Message}");
- return false;
- }
- }
-
- // 释放资源
- public void Dispose()
- {
- plc?.Close();
- plc?.Dispose();
- }
- }
复制代码 五、集成控制流程
1. 数据交互流程计划
- sequenceDiagram
- participant C#上位机
- participant VisionPro
- participant PLC
-
- C#上位机->>PLC: 读取触发信号(DB1.DBX0.0)
- alt 触发信号为ON
- C#上位机->>VisionPro: 调用RunInspection()
- VisionPro->>VisionPro: 图像采集与处理
- VisionPro-->>C#上位机: 返回检测结果(OK/NG)
- C#上位机->>PLC: 写入结果数据(DB1.DBW2:OK数量, DB1.DBW4:NG数量)
- C#上位机->>PLC: 写入状态位(DB1.DBX0.1:处理完成)
- else 触发信号为OFF
- C#上位机->>C#上位机: 等待触发
- end
复制代码 2. 主控制逻辑
- public class VisionSystem
- {
- private readonly PlcController plcController;
- private readonly VisionProController visionProController;
- private Timer inspectionTimer;
-
- // 系统初始化
- public void Initialize(string plcIp, string visionProProjectPath)
- {
- // 初始化PLC控制器
- plcController = new PlcController();
- plcController.Connect(plcIp);
-
- // 初始化VisionPro控制器
- visionProController = new VisionProController();
- visionProController.LoadVisionProProject(visionProProjectPath);
-
- // 设置定时检查PLC触发信号
- inspectionTimer = new Timer(CheckTriggerSignal, null, 0, 100); // 每100ms检查一次
- }
-
- // 检查PLC触发信号
- private void CheckTriggerSignal(object state)
- {
- if (!plcController.IsConnected) return;
-
- // 读取PLC触发位(DB1.DBX0.0)
- var triggerBits = plcController.ReadInputBits(0, 1);
- if (triggerBits != null && triggerBits[0])
- {
- // 执行视觉检测
- var result = visionProController.RunInspection();
-
- // 写入检测结果到PLC
- plcController.WriteOutputBits(2, new bool[] { result.IsPass }); // DB1.DBX2.0:检测结果
- plcController.WriteOutputBits(3, new bool[] { false }); // DB1.DBX3.0:重置触发信号
- }
- }
- }
复制代码 六、实战案例:电子元件外观检测
1. 项目需求
- 检测 PCB 板上的 IC 芯片是否存在引脚变形、缺件等缺陷
- 检测速度:≥10 件 / 秒
- 缺陷精度:≥0.1mm
2. 解决方案
- 硬件设置:Basler ace 相机 + 环形光源,Siemens S7-1200 PLC 控制流水线
- 软件实现:
- VisionPro:使用 PatMax 定位芯片,Blob 分析检测引脚缺陷
- C# 上位机:通过S7.NET与 PLC 通信,实现触发控制与结果反馈
- 性能指标:检测精确率 99.8%,单帧处理时间≤80ms
3. 界面计划
csharp
- // 创建WPF界面显示检测结果
- public partial class MainWindow : Window
- {
- private VisionSystem visionSystem;
-
- public MainWindow()
- {
- InitializeComponent();
- visionSystem = new VisionSystem();
- }
-
- private void btnStart_Click(object sender, RoutedEventArgs e)
- {
- // 启动系统
- visionSystem.Initialize(txtPlcIp.Text, txtVisionProPath.Text);
- lblStatus.Content = "系统运行中...";
- }
-
- // 实时更新检测结果显示
- private void UpdateResultDisplay(VisionResult result)
- {
- Dispatcher.Invoke(() =>
- {
- imgResult.Source = result.Image;
- lblResult.Content = result.IsPass ? "合格" : "不合格";
- lblDefectCount.Content = result.DefectCount.ToString();
- });
- }
- }
复制代码 七、常见题目与解决方案
- 通信不稳定
- 缘故原由:网络波动、PLC 程序辩说
- 解决方案:增长心跳包机制,设置超时重连,优化 PLC 程序中的通信处理。
- 视觉检测误判
- 缘故原由:光照变化、相机抖动
- 解决方案:添加动态阈值算法,使用机械臂固定相机位置,增长光源稳定性。
- 系统相应耽误
- 缘故原由:上位机性能不足、算法复杂度高
- 解决方案:升级硬件设置,优化 VisionPro 算法(减少不必要的工具),接纳多线程处理。
八、总结与展望
本文详细介绍了基于 VisionPro 和 C# 实现呆板视觉与 PLC 集成的完备方案,包括系统架构计划、VisionPro 项目开发、PLC 通信实现及实际案例应用。通过这种集成方式,可明显进步工业生产线的自动化水平和检测精度。
将来趋势方面,结合深度学习的缺陷检测(如使用 YOLO 模子)和基于 OPC UA 的跨平台通信将成为主流,进一步提升智能制造的柔性化和智能化程度。
参考文献
- Cognex VisionPro 官方文档
- S7.NET开源库文档(GitHub - S7NetPlus/s7netplus: S7.NET+ -- A .NET library to connect to Siemens Step7 devices)
- 西门子 S7 PLC 通信协议规范
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|