QQ登录

只需一步,快速开始

上位机视觉HALCON 控制相关函数详解

[ 复制链接 ]
上位机视觉HALCON  控制相关函数详解

上位机视觉HALCON控制相关函数详解

上位机视觉HALCON控制相关函数详解

一.assign  将新的变量赋值为指定控制变量。正常使用时,直接用代码实现。
如已有变量a[1] := 1,使用函数效果为
a[1] := 1
Result := a

二.assign at 将数组元素赋值为指定变量,正常使用时,直接用代码实现
三.comment 注释,正常使用时用  *注释  形式表示;
四.convert_tuple_to_vector_1d(InputTuple, SubTupleLength , ResultVector) 将数组元素分配分向量
五.convert_vector_to_tuple(  InputVector , ResultTuple)将一向量内元素转换到一个单一的数组内。
下面是这两函数的例程:

在HDevelop中,除了已有的两种变量类型,
数组和图像对象,还有第三变量类型:向量。
向量是一个容器,可以容纳任意数量的元素,所有这些元素都必须是完全相同的变量类型(如 数组,图像对象或向量)。对于内存等的管理,向量在HDevelop与C++标准模板库中执行方法相同。
命名:一个数组向量(或图像向量)被称为一维,含数组向量的向量叫二维,以此类推。(所以数组或图像对象维数为零)
*
dev_close_window ()
dev_update_off ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

* 向量的构建
* 最简的方法定义一个向量,就是在圆括号内,用逗号将元素分开来定义,如下
Vector1 := {1,2}
*注意{[1,2]} 与{1,2}不同
Vector2 := {[1,2]}
*向量元素可以是常量,表达式,或变量
Tuple1 := [5,6]
Tuple2 := 'eight'
Vector3 := {Tuple1,Tuple2}
*向量也可以包含图像对象
read_image (ImageFabrik, 'fabrik')
read_image (ImagePatras, 'patras')
ImageVector := {ImageFabrik,ImagePatras}
*也可以使用多维向量
Vector2dim := {{1,2},Vector3}
Vector3dim := {Vector2dim,{Vector1,Vector2}}
*要注意向量内全部元素的类型必须相同
*例如,下面的定义不正确
* InvalidExpression := {Vector1,Vector2dim}
* 向量元素的访问
*向量元素以.at() 的方式 进行访问
Tuple := Vector3.at(0)
Image := ImageVector.at(1)
*这种方式.at()也可以放在表达式左边
*例如
Vector4.at(0) := Tuple
*也可以向一个不存在向量的元素写入数据,如果需要,向量会自动用O填充前面元素
Vector5.at(4) := Tuple
*向量元素也可作为函数参数使用,只要类型匹配
for I := 0 to ImageVector.length() - 1 by 1
    sobel_amp (ImageVector.at(I), ImageVectorSobel.at(I), 'sum_abs', 3)
endfor
* 也可以用.at() 形式访问向量元素的子元素
Vector3dim.at(1).at(0) := {5,6}
*虽然下面语法正确,但不建议
Vector3dim.at(0).at(1).at(1)[0] := 8
*
* 向量的长度:
*向量无数个数可也通过 .length()得到
Length := Vector1.length()
* 向量操控
* .clear()清空向量,如删除全部元素:
Vector3dimCopy := Vector3dim
Vector3dimCopy.clear()
*注意,被清空向量元素类型不改变,例如以下的赋值不正确
* Vector3dimCopy.at(0) := 1
* Vector3dimCopy.at(0) := {1}
* .remove() 将向量指定索引的元素删除
Vector5.remove(0)
*
* .insert() 在向量指定索引位置插入元素
Vector5.insert(1,2)
* 下面形式赋值,2--7元素会被自动赋值为0
Vector5.insert(8,10)
*
* 向量变换:
*将数组转换为一维向量
Tuple3 := [1,2,3,4,5,6,7,8]
convert_tuple_to_vector_1d (Tuple3, 1, Vector1FromTuple3)
convert_tuple_to_vector_1d (Tuple3, 2, Vector2FromTuple3)

*convert_vector_to_tuple将输入的任意维数的向量内的数组转换到输出数组中
convert_vector_to_tuple (Vector5, TupleFromVector5)
convert_vector_to_tuple (Vector2dim, TupleFromVector2dim)
*
* dev_inspect_ctrl  变量视窗可以用于查看向量变量
dev_inspect_ctrl ([Tuple3,Vector1FromTuple3,Vector2FromTuple3,Vector5,TupleFromVector5,Vector2dim,TupleFromVector2dim,Vector3dim])

六. executable_expression 对指定变量赋值,使用时一般用代码实现,也可用算子窗口输入

七。exit  关闭HDevelop程序,相同于文件-->退出功能,类似C++语言exit(0)
八. 在导出代码中插入任意文本;
如#               Result1,
导出效果为                Result1
九.global  定义一个全局变量,在全部函数中可访问例如定义:
read_image(image,'fabrik')
global object image

十.import  导入一个或多个外部函数。如import ./import_relative,加载同级目录import_relative文件夹内全部文件:init.hdvp,   calculate_results.hdvp
这样就可调用 两文件内的函数,init,calculate_results,前提是自己的工程已保存为文件

十一。 par_join等待一个或多个子线程执行结束 ,例如
text := '123'
import ./import_relative
par_start <ThreadID1> : init(text,text)
par_start <ThreadID2> : calculate_results(text,text)
* wait until both procedures have finished
par_join ([ThreadID1, ThreadID2])

十二. return 结束函数,返回;
十三. stop 暂停程序执行,按F5,HALCON 继续
十四.throw 抛出自定义或捕获的异常,  try  catch (Exception) endtry,关键字参考C++语言

例如
try
  catch (Exception)
    throw ([Exception, UserData])
  endtry
十五.
switch (Exception)
case 1:
break
continue
default:
endswitch
关键字参考C++语言

例如
  switch (Index)
  case 1:
    break
  case 7:
    continue
  default:
    break
  endswitch

十六.
if (Index)
else
elseif (text)
ifelse (Index)
endif
关键字参考C++语言

十七.
for Index := 1 to 5 by 1
endfor
关键字参考C++语言

十八.
repeat
until (Index)
关键字参考C++语言

十九.
while (Index)
endwhile
关键字参考C++语言


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索