
1. 项目背景与需求分析在工业视觉检测领域多相机同步采集是个经典需求。最近接到一个产线改造项目需要同时控制3台海康威视工业相机进行连续采集并将图像实时显示在C#开发的UI界面上。这种方案在电子元件检测、包装流水线质检等场景很常见但实际开发时会遇到不少坑。传统轮询方式Polling在多相机场景下性能堪忧而回调函数Callback机制才是更专业的解决方案。通过海康SDK的回调接口我们可以在相机硬件触发采集后立即获取图像数据实现真正的低延迟处理。配合Halcon强大的图像处理能力这套方案可以轻松应对600fps以上的高速采集需求。2. 开发环境搭建2.1 硬件选型要点海康MV-CE060-10GM相机支持10GigE接口1920×1200分辨率下可达163fps千兆交换机建议使用带流量控制功能的工业级交换机如Moxa PT-7728工控机配置i7-1185G7处理器 32GB内存 512GB SSD 独立千兆网卡×3特别注意多相机采集时务必为每个相机分配独立网卡避免带宽争用导致丢帧2.2 软件依赖安装海康MVS开发包版本≥3.4.0Halcon 22.11 RuntimeVisual Studio 2022社区版.NET 6.0 SDK安装Halcon时记得勾选.NET Assembly组件这是C#调用的关键。我遇到过因为漏装这个导致HalconDotNet.dll引用失败的情况。3. 核心代码实现3.1 相机初始化模块// 创建相机实例数组 private static ListICamera cameras new ListICamera(3); void InitCameras() { for(int i0; i3; i) { var cam new HKCamera(i); // 自定义封装类 cam.SetTriggerMode(TriggerModeEnum.Software); cam.SetPixelFormat(PixelFormatEnum.Mono8); cam.RegisterImageCallBack(ImageCallBack); // 注册回调 cameras.Add(cam); } }3.2 回调函数实现这是整个系统的核心注意线程安全问题private static object lockObj new object(); void ImageCallBack(IntPtr pData, MV_FRAME_OUT_INFO_EX frameInfo, IntPtr user) { lock(lockObj) // 多相机回调可能在不同线程触发 { // 转换图像数据为Halcon对象 HImage image new HImage(); image.GenImage1(byte, frameInfo.nWidth, frameInfo.nHeight, pData); // 更新对应相机的显示窗口 Invoke((MethodInvoker)delegate { hSmartWindowControl[i].HaloionWindow.DispObj(image); }); } }3.3 连续采集控制void StartAcquisition() { Parallel.ForEach(cameras, cam { cam.StartGrabbing(); }); }4. 性能优化技巧4.1 内存管理要点使用对象池复用HImage对象在回调中避免频繁new/delete操作设置合理的GC模式System.Runtime.GCSettings.LatencyMode GCLatencyMode.SustainedLowLatency;4.2 显示优化方案当分辨率较高时建议使用Halcon的set_window_attr关闭抗锯齿启用双缓冲显示hSmartWindowControl.HalconWindow.SetWindowParam(buffer,true);5. 常见问题排查5.1 图像错位问题现象多相机图像出现行偏移 解决方法检查交换机QoS配置调整相机PTP时钟同步在SDK中设置MV_CC_SetGrabTimeout(1500)5.2 回调丢失问题典型报错Callback not called within timeout 处理步骤确认网络带宽是否饱和使用Wireshark抓包检查MV_CC_SetImageNodeNum设置值建议≥10降低采集分辨率测试6. 扩展应用场景这套框架稍作修改即可用于三维立体视觉多目相机标定高速运动物体追踪在线质量检测系统最近在一个锂电池极片检测项目中我们基于此方案实现了0.2mm/pixel的检测精度通过多相机拼接实现了600mm宽幅产品的全覆盖检测。关键是在回调函数中直接集成Halcon的测量算法实现了采集-处理-结果显示的流水线作业。实际部署时发现给每个相机单独配置UPS电源很重要——产线电压波动会导致相机IP地址丢失。另外建议在Halcon窗口显示中添加FPS计数器方便实时监控系统状态。