C#技术引领下的工业上位机开发及视觉算法探究——融合Halcon与OpenCV开发应用
·
C#工业上位机开发,视觉开发,halcon,opencv开发

工业场景中的上位机开发总带着点"脏活累活"的气质——既要跟底层PLC掰手腕,又要伺候好花里胡哨的UI界面。去年在汽车厂做零件质检系统时,产线老张头看着我的调试界面直摇头:"小伙子,你这界面还没老王的VB6程序看着顺眼呢!"这句话直接把我干破防了,从此在C#的WinForm美化道路上越走越远。

串口通信是上位机的必修课,来看这段带超时检测的串口读取代码:
public byte[] ReadSerialPortWithTimeout(SerialPort port, int timeoutMs)
{
var buffer = new List<byte>();
DateTime start = DateTime.Now;
while ((DateTime.Now - start).TotalMilliseconds < timeoutMs)
{
if (port.BytesToRead > 0)
{
byte[] temp = new byte[port.BytesToRead];
port.Read(temp, 0, temp.Length);
buffer.AddRange(temp);
start = DateTime.Now; // 重置超时计时
}
Thread.Sleep(10);
}
return buffer.ToArray();
}
这坨代码的精髓在于循环里的超时重置机制。产线上的PLC有时候跟便秘似的,数据分好几次才能拉干净,传统的固定超时经常误判。加上这行重置逻辑后,老设备的通信稳定性直接提升了一个档次。

视觉开发这块,Halcon和OpenCV就像倚天剑和屠龙刀。最近在做的螺丝胶检测项目,用Halcon的模板匹配简直不要太爽:
* HDevelop脚本片段
read_image (Image, 'bolt.jpg')
create_shape_model (Image, 5, 0, 2*3.1416, 'auto', 'use_polarity', 'auto', 5, ModelID)
find_shape_model (Image, ModelID, 0, 2*3.1416, 0.7, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
转到C#调用时要注意内存泄漏这个坑。有次半夜两点被现场电话吵醒,说系统运行三天后内存爆了。后来发现是HOperatorSet.CopyImage没及时释放,加了个using代码块才解决:
using (HDevEngine engine = new HDevEngine())
{
engine.SetProcedurePath("halcon_scripts");
using (HDevProcedure proc = new HDevProcedure("detect_glue"))
{
HDevProcedureCall call = proc.CreateCall();
call.SetInputIconicParamObject("image", hv_Image);
call.Execute();
HTuple area = call.GetOutputCtrlParamTuple("defect_area");
} // 这里会自动释放资源
}
OpenCV这边虽然要自己造轮子,但胜在灵活。去年用EmguCV搞过一套兼容老旧相机的采集框架:
// 兼容DirectShow和GigE相机的万能打开方式
VideoCapture cap = new VideoCapture();
if (!cap.Open(CaptureType.DShow, cameraIndex))
cap.Open(CaptureType.Gige, cameraIndex);
// 硬件触发配置
cap.Set(CapProp.Trigger, 1);
cap.Set(CapProp.TriggerDelay, 30);
最骚的是给某日企做项目时,他们的相机驱动居然只支持OpenCV2.4的IplImage格式。最后用下面这招曲线救国:
// 将Mat转成IplImage黑魔法
IplImage ipl = new Image<Bgr, byte>(mat.Width, mat.Height).Ptr;
cvConvertImage(mat.Ptr, ipl, 0);
现在遇到视觉项目选型,我的经验是:预算够、要交货快的选Halcon,想秀操作或需要定制化的选OpenCV。不过最近发现个新趋势——用ONNX把PyTorch模型部署到C#上位机,这路子说不定能卷死传统算法工程师。

更多推荐



所有评论(0)