【VM服务管家】VM4.0软件使用_1.2 工具类

描述环境:VM4.0.0现象:如何在脚本模块中添加自定义的程序集?解答1.首先,打开一个脚本模块,找到“编辑程序集”,如下图所示:2.引用程序集中点击“添加”,找到自定义的程序集,如下图所示:3.最后在脚本中引用添加的程序集,便可以调用程序集中相关接口函数。1. C#2.//引用程序集问题根因不熟悉脚本模块的功能。
摘要由CSDN通过智能技术生成

目录

1.2.1 文本保存:逐行保存格式化模块输出的方法

描述
环境:VM4.0.0 以上
现象:文本保存模块无法逐行获取格式化模块的输出。文本保存模块可以获取格式化模块的结果并保存到本地,但是只能订阅某个格式化模块整个的输出结果,不能通过分隔符按行分割从而单独获取格式化的某一行输出。
解答
可以使用协议解析模块根据分隔符获取格式化模块的每行数据,然后使用文本保存模块订阅协议解析模块的输出。VM模块操作示例如下:
在这里插入图片描述
在这里插入图片描述
问题根因
不熟悉多个模块配合使用。

1.2.2 脚本模块:循环模块搭配脚本使用的方法

描述
环境:VM4.0.0
现象: 使用VM模块搭配脚本模块如何实现获取所有数据一次性全部输出
解答
如下图1,需要实现每个试剂盒中有无试纸的检测,并一次性输出四个结果给客户。
在这里插入图片描述
图1
常规的实现方式如下图2所示:
在这里插入图片描述
图2
对每个检测都做模板匹配、位置修正、blob分析。这样模块较多,功能相同却无法服复用,浪费资源。因此就会想到:是否可以使用循环的方式来实现以上功能需求呢?答案肯定是可以的。
使用循环模块后,方案如下图3所示:
在这里插入图片描述
图3
综上,循环实现的本质是单组工具多次运行,与编程中的for、while性质一样,根据前置输入的循环次数执行。
既然选择了循环的方案,还有以下两个问题点需要我们注意:
一是,循环的位置关系。即需要保证循环内的工具能够在每次的循环中进行检测位置的正确变化,将所有工件进行检测,而不是重复检测某一个工件。VM软件引入了循环标记LoopIndex,在循环内的模块可以订阅到该值,以帮助模块实现位置修正的效果。
一般来说,位置关系的输入有两种:

  1. 继承。直接继承前序定位模块的检测区域。可配置为如下图4所示:
    在这里插入图片描述
    图4
  2. 通过位置修正,这种情况下,可以将位置修正作为循环内的首模块,并在位置修正信息内配置循环标记,是位置修正能够正确输出位置修正信息引导后后续模块进行相对的位置修正来实现精准检测,如下图5所示:
    在这里插入图片描述
    图5
    二是,循环输出的结果,我们该如何处理?这个是本文章的重点内容。因为VM的机制是,你执行一次,我输出结果,是一种顺序型的结构。如果使用格式化模块来接受,仅能获取到循环内模块的最后次运行结果。根据循环逻辑,我们应当在每次执行时将获得结果缓存下来,在达到循环次数时进行输出。要是实现以上功能,就需要用VM脚本工具来实现。
    按照以上案例,脚本的配置如下图6所示:
    在这里插入图片描述图6
    首先我们应当初始化相关变量,并确定脚本逻辑为:循环内每次执行,将相关数据缓存到脚本内自定义的变量内,达到循环执行次数时,将所有数据汇总输出。因此我们首先建立一个Int数组用以存放每次检测的结果。并通过循环次数与工件数量比较,在达到循环次数时赋值输出。如下图7所示:
    在这里插入图片描述
    图7
    脚本实现代码如下:
1.	C#
2.	 
3.	using System;
4.	using System.Text;
5.	using System.Windows.Forms;
6.	using Hik.Script.Methods;
7.	class UserScript:ScriptMethods,IProcessMethods
8.	{
9.	    int processCount ;  
10.	    int var0,var1;
11.	    int[] num=new System.Int32[5];
12.	    /// <summary>
13.	    /// 预编译时变量初始化
14.	    /// </summary>
15.	    public void Init()
16.	    {
17.	        processCount = 0;
18.	    }
19.	    public bool Process()
20.	    {
21.	        //每次执行将进入该函数,此处添加所需的逻辑流程处理
22.	       // MessageBox.Show("Process Success");
23.	        GetIntValue("var0",ref var0);
24.	        GetIntValue("var1",ref var1);
25.	        num[processCount]=var1;
26.	        processCount++;
27.	        if(processCount==var0)
28.	        {
29.	            for(int i=0;i<var0;i++)
30.	            {
31.	                SetIntValueByIndex("EveryStatus",num[i],i,var0);
32.	        	}
33.	        	SetIntValue("InspeNum",processCount);
34.	        	Array.Clear(num,0,num.Length);
35.	        	processCount=0;
36.	        }
37.	        return true;
38.	    }
39.	}

问题根因:

  1. 方案设计阶段,需要考虑配置与性能关系,重点考虑流程时间是否满足现场需求,决定是否采用循环方式;
  2. 脚本内数据次数缓存、次数判断和数据清理。这里提一点,如果仅是获取点的坐标可以通过点集工具开始循环使能实现
  3. 位置修正:①先保证前序定位模块仅匹配到一个工件;②基于该工件定位建立位置修正;③基于位置修正,调整后续工具的相对ROI;④确保单组工具运行检测正常时,再将前序定位模块数量设置为理想数量,并点击单词运行查看整体运行效果。

1.2.3 几何查找:彩色图像的几何查找方法

描述
环境:VM4.0.0及以上
现象:如何对彩色图像进行几何查找(圆查找、直线查找等)?
解答
如下图所示,需要查找隔膜的边缘直线,直接使用直线查找工具,定位结果失败。
在这里插入图片描述
定位失败的原因是算法处理灰度图,图像源模块对彩色图转灰度图的默认转换方法是各通道取平均值,该转换方法得到的灰度图像,隔膜下边缘的灰度及纹理信息与背景几乎相同。
第一步,使用颜色转换工具将彩色图像通道分离(仅限于本案例),提取RGB中的B通道。
在这里插入图片描述
第二步,对转换得到的B通道的灰度图像使用直线查找工具,定位结果成功。
在这里插入图片描述
问题根因
不熟悉VM对彩色图转灰度图的转换方法。

1.2.4 深度学习:图像分割的面积的获取方法

描述
环境:VM4.0.0及以上
现象:利用深度学习图像分割获取的缺陷面积尺寸如何获取?
解答
在图像分割模块后面接BLOB标签分析模块,具体方案如下:
在这里插入图片描述
问题根因
不熟悉VM相关工具的使用。

1.2.5 颜色识别:使用颜色识别工具做分类检测的方法

描述
环境:VM4.0.0及以上
现象:如何使用颜色识别工具做极耳阳极/阴极的分类检测?
解答
第一步,图像源模块的基本参数中,像素格式选择RGB24
在这里插入图片描述
第二步,颜色识别模块创建模型,图像列表加载当前彩色图像,截取图像样本并添加至标签
在这里插入图片描述
第三步,待检测区域绘制ROI,运行颜色识别模块,输出参数“最佳匹配名称”为分类结果
极耳阳极检测结果——铜
在这里插入图片描述
极耳阴极检测结果——铁
在这里插入图片描述
问题根因
不熟悉颜色识别工具的使用。

1.2.6 数据分析:使用脚本模块解析32位寄存器数据的方法

环境:VM4.0.0+VS2015及以上
现象:接收数据模块接收的数据是16进制byte数组,无法获取10进制数据,需再次解析
解答

1.	C#
2.	 
3.	public bool Process()
4.	{
5.	     int datatype=4;//数据格式,ABCD、CDAB、BADC、DCBA四种
6.	     byte[] _registervalue = new System.Byte[1];//初始化字节数组,       GetBytesValue函数中会根据实际情况再初始化字节长度。
7.	     GetBytesValue("recdata",ref _
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值