当前位置: 首页> 游戏> 网游 > 【VIsion Master】机器视觉软件二次开发(C#版本)学习笔记

【VIsion Master】机器视觉软件二次开发(C#版本)学习笔记

时间:2025/8/11 3:07:45来源:https://blog.csdn.net/qq_45306739/article/details/141357177 浏览次数:1次

0.前言

最近接手新项目,用海康威视旗下的HIK ROBOT Vision Master机器视觉软件做二次开发相关的项目,写一篇博客记录一下学习过程。
参考视频:https://www.bilibili.com/video/BV1tq4y1j7RP?p=1
其他参考资料:软件自带的开发文档。

IDE:VS 2022
语言:C#、C++
框架:dotNET Framework 4.6.1
软件版本:VM 4.3.0(本文都用VM缩写代指Vision Master)

1.配置环境

新建一个winForm工程,右击工程属性,目标框架修改为:.NET Framework 4.6.1。
在生成中,目标平台首选32位取消勾选,输出路径绑定为:D:\Program Files\VisionMaster4.3.0\Applications。

打开App.config配置文档,再去VisionMaster4.3.0\Applications中找到VisionMaster.exe.config,将全部内容复制到App.config中替换。
#1 添加新控件

切换到设计窗口,找到工具箱,右击Windows所有窗体,点击选择项,点击浏览去刚才的Applications文件夹中找这个库:VisionMaster4.3.0\Development\V4.x\ComControls\Assembly\VMControls.Winform.Release.dll,会自动导入一些控件:

在这里插入图片描述
回到VS的工具箱中,可以看到新增控件:
在这里插入图片描述
下面是, 链接各种库文件DLL

在引用中,添加动态链接库和依赖库。开发文档中提供了两种引入方式:手动添加和小工具一键导入。
推荐第二种,先只添加基础库测试:

在这里插入图片描述

回到VS中:
在这里插入图片描述

重新加载后,多了这些链接项,也可以手动加入
在这里插入图片描述

2.新建VM工程和写入功能测试

在这里插入图片描述
将这个工程保存到本地,后缀名为.sol文件。
回到VS 2022,在winForm中拖入一个VmRenderControl控件作为显示,拖入两个Button和一个ListBox来更新数据。

在这里插入图片描述

加载方案 按钮:

private void button1_Click(object sender, EventArgs e)
{string message;VmSolution.Load("D:\\Users\\Desktop\\test0820.sol", "");message = "Load Sol Success.";listBox1.Items.Add(message);listBox1.TopIndex = listBox1.Items.Count - 1;
}

方案执行 按钮:

private void button2_Click(object sender, EventArgs e)
{IMVSCircleFindModuTool circleFindModuCs = (IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];VmProcedure vmProcedure = (VmProcedure)VmSolution.Instance["流程1"];vmRenderControl1.ModuleSource = circleFindModuCs;Task.Run(() =>{vmProcedure.Run();});
}

最后的效果:
在这里插入图片描述

3.异常代码捕获和获取参数

VM中的异常都会有自己的专属错误代码,封装在VmException类中,捕获格式没有区别。
在Button中加入try、catch捕获:

string message;
try
{VmSolution.Load("D:\\Users\\Desktop\\test0820.sol", "");message = "Load Sol Success.";listBox1.Items.Add(message);listBox1.TopIndex = listBox1.Items.Count - 1;
}
catch(VmException ex) 
{message = "Load Sol Failed." + ex.errorCode;listBox1.Items.Add(message);listBox1.TopIndex = listBox1.Items.Count - 1;
}

设置一个Button按钮,来获取提取的参数:
声明圆查找实例化对象的时候,都需要绑定流程,然后强转为对应类。

IMVSCircleFindModuTool circleFind = (IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];
if (null == circleFind) return;
textBoxX.Text = circleFind.ModuResult.OutputCircle.CenterPoint.X.ToString("0.00");
textBoxY.Text = circleFind.ModuResult.OutputCircle.CenterPoint.Y.ToString("0.00");
textBoxR.Text = circleFind.ModuResult.OutputCircle.Radius.ToString("0.00"); // 精度控制

下面是,获取整个绑定的参数配制界面,在子窗口ParamForm上显示,控件为vmParamsConfigWithRenderControl。
设置一个按钮:

private void button1_Click(object sender, EventArgs e)
{IMVSCircleFindModuTool findModuTool = (IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];vmParamsConfigWithRenderControl1.ModuleSource = findModuTool;
}

点击参数配置,打开子界面,然后点击绑定参数,即可在子窗口中配置,选择参数后,右边的界面是实时更改的。
在这里插入图片描述

4.第一阶段总结

VM基础开发环境的配置,和工具类的使用,已经渲染模块的显示。

5.流程操作配置

在这里插入图片描述
连续执行和停止执行按钮:

private void button5_Click(object sender, EventArgs e)
{VmProcedure vmProcedure = (VmProcedure)VmSolution.Instance["流程1"];Task.Run(() =>{vmProcedure.ContinuousRunEnable = true; });
}
private void button6_Click(object sender, EventArgs e)
{VmProcedure vmProcedure = (VmProcedure)VmSolution.Instance["流程1"];Task.Run(() =>{vmProcedure.ContinuousRunEnable = false;});
}

如何选择一个Sol方案中的多个流程呢?

private void button7_Click(object sender, EventArgs e)
{vmProcedureConfigControl1.BindSingleProcedure(comboBox1.Text);
}private void button8_Click(object sender, EventArgs e)
{vmProcedureConfigControl1.BindMultiProcedure();
}

在这里插入图片描述

6.自定义模块实例(测试)

仿写一个VM深度学习模块(DL目标检测C),打开自定义模块生成工具,输入选项全选,这里对应下面的基本参数。
在这里插入图片描述
在这里插入图片描述
下一步:
在这里插入图片描述
在这里插入图片描述
点击生成XML、C#和C++工程。
C#工程是管理控件,C++工程是管理算法。
文件保存在:D:\Program Files\VisionMaster4.3.0\Applications\Tools\AlgorithmXMLGenerator\result下

C#工程直接右击VID.cs生成即可,打包好的dll会自动导入到XML文件夹中,已经不需要像之前一样单独复制过去。

问题出现在C++工程中,双击sln进入项目后,会选择配置Windows SDK和平台工具集。选择vs2022平台,会报错:

C3861	“VM_M_BatchGetFloat”: 找不到标识符	

在论坛中也看到了相似的问题:二次开发进行自定义算法模块开发,编译c++时软件自动生成的文件有未定义的函数

如果直接将三处错误注释掉,编译会成功,在VM中拖入模块的时候会:
在这里插入图片描述

关键字:【VIsion Master】机器视觉软件二次开发(C#版本)学习笔记

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: