石鑫华视觉 发表于 2023-4-26 12:20:41

LabVIEW调用Halcon算子的元组HTuple参数输入输出库

在LabVIEW调用Halcon的.NET调用方法中,很多算子的参数原型是只有HTuple元组类型的。而元组数据类型,在LabVIEW中是没有的。所以,只能使用相应对应的转换函数,将各种数据类型转换为元组HTuple,或者是将元组HTuple转换为各种数据类型。

输入参数是元组类型的算子,必须将多种不同类型的参数转换为元组HTuple

输出参数是元组HTule,也需要转换为LabVIEW中可使用的数据类型
所以,这里为了方便,设计了一个至元组的多态VI,将LabVIEW中各种数据类型转换为元组HTuple,主要用于输入参数的处理;以及一个元组至的多态VI,将元组HTuple转换为LabVIEW中各种数据类型,主要用于输出参数的处理。

LabVIEW转HTuple元组的构造器中,可用的算子有上面这些,这里都是可以创建成相应的子vi,然后将相应的LabVIEW数据转换为HTuple类。当然,最上面的HTuple仅仅只是一个打开HTuple构造器,并没有相应的数据类型转换,如果还要进行一些操作,则需要在后面再调用方法。这里在LabVIEW中,比较常用的,大概也就是布尔、单精度浮点、双精度浮点、整形I32、整形I64、字符串以及其对应的数组类型。
单个转换函数的实现如下图:

布尔至元组函数的实现
这里只需要选择好相应的转换函数,例如布尔至元组,则选择HTuple(Bloolean b)这个算子即可。然后定义好相应的接线端、图标。这里需要注意一下,转换元组一般都不会出错,但是仍然要设置错误连接,因为有时候是必须要有错误来强制顺序的。例如在一个循环执行的算子中,如果要输入或输出参数时,不释放关闭HTuple引用,则会引起内存溢出的,则必须要在调用HTuple元组算子后,添加Dispose和Close来释放关闭元组的引用。其它的转换函数也可参照上面的方法。

将所有的转换到元组的函数打包成一个多态VI“至元组.vi”,这样就可以在需要的地方调用至元组.vi,然后可自动匹配数据类型,就不需要再去创建相应的转HTuple类型的算子,也可以节省LabVIEW框图的空间,让LabVIEW程序框图更简洁。
而元组至LabVIEW的数据类型,则相对要少一些,主要是一些将HTuple转换为LabVIEW各种数组的算子:

返回的HTuple类型可使用的HTuple算子要多很多,有很多计算类型的,例如正弦、余弦之类的三角函数。这些函数一般就不太需要转换了,这里只需要得到LabVIEW可接受的数据类型即可,其它的计算,一般使用LabVIEW中的函数来实现。所以,这里只要实现几个Toxx()的算子即可:

元组至双精度数组函数的实现

元组至多态VI

元组.llb
这里在llb中,加了一个释放关闭元组的函数:

释放关闭元组.vi实现方法
在有调用HTuple的地方,都是要在处理了HTuple后,将其释放关闭的,所以这里弄了一个小vi,也是为了方便处理HTuple,能让程序框图更简洁。当然,这个释放关闭功能,是不能直接放在上面的xx至元组或元组至xx函数中的,因为那样可能会在HTuple的数据还没有传递给后面的算子或返回的数据还没有处理就被清除释放了。所以,通常是要在中间的处理算子后,再使用错误连线强制串行后,才释放关闭:

元组至.vi和至元组.vi以及释放关闭元组.vi的典型用法。
典型用法:先调用至元组.vi,将需要的输入参数转换为HTuple类,然后传递给Halcon处理算子,处理算子处理后,利用错误连线,调用释放关闭元组.vi,强制释放关闭元组至的HTuple类。然后去执行获取类的Halcon算子,得到HTuple类后调用元组至.vi,将HTuple转换为LabVIEW中的可用数据,使用错误连线调用释放关闭元组.vi清除内存。
附件版本:LabVIEW2020SP1 32位+Halcon19.11 32位


页: [1]
查看完整版本: LabVIEW调用Halcon算子的元组HTuple参数输入输出库

LabVIEW HALCON图像处理入门教程(第二版)
石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23