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

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来更新数据。

加载方案 按钮:

csharp 复制代码
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;
}

方案执行 按钮:

csharp 复制代码
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捕获:

csharp 复制代码
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按钮,来获取提取的参数:

声明圆查找实例化对象的时候,都需要绑定流程,然后强转为对应类。

csharp 复制代码
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。

设置一个按钮:

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

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

4.第一阶段总结

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

5.流程操作配置

连续执行和停止执行按钮:

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

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

csharp 复制代码
private void button7_Click(object sender, EventArgs e)
{
    vmProcedureConfigControl1.BindSingleProcedure(comboBox1.Text);
}

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

6.自定义模块生成工具

自动以VM中的一个功能模块,例如这种。

在本地文件中找modules(sp)这个文件夹。

参考视频做一个圆查找功能,工具 -- 自定义模块生成工具:

第一步:配置基本的输入和输出,选择更新自定义输出,显示文本设置,

第二步:

生成三个文件:XML、C++、C#。

相关推荐
递归不收敛6 小时前
大语言模型(LLM)入门笔记:嵌入向量与位置信息
人工智能·笔记·语言模型
冷雨夜中漫步6 小时前
高级系统架构师笔记——数据库设计基础知识(5)Armstrong公理系统、无损连接和有损连接
笔记·系统架构
deng-c-f6 小时前
Linux C/C++ 学习日记(28):KCP协议(四):如何实现更复杂的业务:将连接状态的管理进行封装,用户只需实现发送、接收、断开的处理逻辑。
学习·网络编程·kcp
从孑开始7 小时前
ManySpeech.MoonshineAsr 使用指南
人工智能·ai·c#·.net·私有化部署·语音识别·onnx·asr·moonshine
im_AMBER7 小时前
算法笔记 05
笔记·算法·哈希算法
YuanlongWang7 小时前
C# 中,依赖注入(DI)的实现方式
c#
Element_南笙8 小时前
吴恩达新课程:Agentic AI(笔记2)
数据库·人工智能·笔记·python·深度学习·ui·自然语言处理
SmartSoftHelp开发辅助优化9 小时前
C# WinForm 编程高手:程序,进程,线程。程序,窗体,UI,后台。是如何协调工作的?深度解析>SmartSoftHelp魔法精灵工作室
microsoft·ui·c#
koo3649 小时前
李宏毅机器学习笔记21-26周汇总
人工智能·笔记·机器学习
.小小陈.9 小时前
数据结构2:单链表
c语言·开发语言·数据结构·笔记·学习方法