摘要:本文聚焦FPC柔性连接器工业视觉检测场景,基于C# WinForm(.NET Framework 4.8)与HALCON 24.11构建专用检测平台。详细阐述系统架构设计、开发环境配置及核心功能模块规划,涵盖FPC图像采集、预处理、特征提取、缺陷检测及结果可视化全流程。文中提供硬件选型建议、代码实现细节及检测效果展示,帮助开发者快速掌握FPC视觉检测项目落地技巧。本文内容适合机器视觉工程师、C#开发者及电子制造行业从业者参考。
文章目录
【C# + HALCON 机器视觉】工业视觉实战:FPC 柔性连接器视觉检测平台全栈开发(附亚像素算法代码与自动化部署)
关键词
C#;HALCON;FPC检测;WinForm;工业视觉;缺陷检测;柔性电子
一、FPC柔性连接器检测需求分析
1.1 检测目标与难点
FPC(Flexible Printed Circuit)柔性连接器因其轻薄、可弯曲等特性,在电子设备中广泛应用。检测重点包括:
- 尺寸精度:引脚间距、焊盘直径等(公差±0.05mm)
- 缺陷类型:开路、短路、焊盘缺失、异物污染等
- 表面质量:划痕、褶皱、颜色异常
检测难点:
- 柔性材质易变形,导致图像采集视角变化
- 引脚密集(间距≤0.2mm),需亚像素级检测精度
- 表面缺陷特征微弱,需高灵敏度算法
1.2 硬件方案设计
1.2.1 硬件选型
设备名称 | 型号/参数 | 作用描述 |
---|---|---|
工业相机 | Basler acA2500-20gm(2592×1944像素) | 图像采集 |
远心镜头 | Computar M0814-MP2(畸变率<0.1%) | 消除透视变形 |
环形光源 | 海康威视 MV-LU180-20W(蓝色LED) | 均匀打光,突出表面特征 |
运动控制平台 | 雷赛智能LXMEC-02(定位精度±0.01mm) | 自动送料与定位 |
1.2.2 光路布局设计
二、开发环境搭建与项目初始化
2.1 软件环境配置
- 开发工具:
- Visual Studio 2019(.NET桌面开发组件)
- HALCON 24.11(安装路径:
C:\MVTec\HALCON-24.11
)
- 项目设置:
- 创建C# WinForm项目,命名为
FPCVisionInspection
- 目标框架:
.NET Framework 4.8
- 引用HALCON库:添加
halcondotnet.dll
引用(路径:C:\MVTec\HALCON-24.11\bin\dotnet35\halcondotnet.dll
)
- 创建C# WinForm项目,命名为
2.2 界面布局设计
2.2.1 主界面元素
控件类型 | 名称 | 功能描述 |
---|---|---|
HWindowControl | hWindowImage | 图像显示区域 |
Button | btnConnectCamera | 相机连接/断开按钮 |
Button | btnGrabImage | 图像采集按钮 |
ComboBox | cmbDetectionTask | 检测任务选择(尺寸/缺陷/外观) |
Label | lblResult | 检测结果显示标签 |
2.2.2 界面初始化代码
public partial class MainForm : Form
{
private HFramegrabber framegrabber; // 相机句柄
private HObject currentImage; // 当前采集图像
private HTuple windowHandle; // 图像窗口句柄
public MainForm()
{
InitializeComponent();
InitializeHalconWindow();
}
private void InitializeHalconWindow()
{
hWindowImage.CreateHandle();
windowHandle = hWindowImage.HalconWindow;
HOperatorSet.SetWindowAttr(windowHandle, "background_color", "black");
}
private void MainForm_Load(object sender, EventArgs e)
{
cmbDetectionTask.Items.AddRange(new[] {
"尺寸检测", "缺陷检测", "外观检测" });
cmbDetectionTask.SelectedIndex = 0;
}
}
三、FPC图像采集模块开发
3.1 相机连接与参数配置
3.1.1 相机连接实现
private void btnConnectCamera_Click(object sender, EventArgs e)
{
try
{
// 初始化相机(以Basler为例)
framegrabber = new HFramegrabber("GigEVision");
framegrabber.OpenFramegrabber(
"DeviceFile='Basler_acA2500-20gm_192.168.1.100.xml'",
0, 0, 0, 0, 0, 0, "default",
8, "rgb", -1, "false", "default", "true",
-1, -1);
framegrabber.StartGrabbing();
btnConnectCamera.Enabled = false;
btnGrabImage.Enabled = true;
MessageBox.Show("相机连接成功");
}
catch (Exception ex)
{
MessageBox.Show($"相机连接失败: </