一、Halcon语句按照以下规则进行操作
operator(图标输入 : 图标输出 : 控制输入 : 控制输出)
首先是图形的输入,紧接着是图形的输出,其次是控制数据参数的输入,控制数据的输出,这四个参数有可能都是空的。比如:
read_image (Image, 'printer_chip/printer_chip_01')
File / Images 读取不同文件格式的图像 read_image( : Image : FileName : ) Image:输出参数,以此变量名输出读取的图像。 FileName:输入参数,要读取的图像的名称。前面也可以加绝对位置或者相对位置。 |
二、Control Types and Constants控制类型和常量
所有非图像数据在HDevelop中都作为控制数据,如数字或字符,它们主要用于对图像的控制、处理,它们包含算术或者逻辑的运算操作等,其中包含整型数、实数、字符串、布尔变量。
1、整数类型和实数类型
整数类型(integer)=C语言中的长整形(long),可以用十进制、八进制、十六进制形式输入,十六进制需要在前缀加0x,八进制输入时加前缀加0。4个或8个字节。
实数类型(real)=C语言中的双精度型(double),8个字节。
a:=2022
b:=-1234
c:=0xfeb15
d:=06677
e:=3.1415
f:=0.15
g:=.15
h:=-1.56e-12
i:=3E5
2、字符串类型(string)
在Halcon中没有单个字符型数据,它有字符串类型,字符串可以是单个字符,也可以是多个字符,它是由两个单引号的字符序列组成的。字符串的长度限制在1024个字符以为。一些不能显示的特殊字符,如换行、回车符、制表符等,用转义字符表示,表示的方法与C语言中的方式相同。
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
string1:=['第一行:123\nnc第二行:123']
disp_message (WindowHandle, string1, 'window', 50, 50, 'red', 'true')
A:='apple'
B:='D:\\'
3、布尔变量,Boolean类型
质保函真(true)和假(false)这两个常量,其中true对应值为1,false对应值为0。
比如Val:=true 这个表达式中Val的有效值被设定为1,每个非0以外的整形值都表达为true。
4、常量
在函数使用过程中,系统提供一些返回值,表示该函数使用过程中的一些状态,它们能够通过dev_error_var和dev_set_check一起使用,以检查或设定返回的状态,错误信息能够反馈异常的具体信息,系统包含了近400个错误信息。
Tuple在系统中表示为元组(数组),一个长度为1的数组被认为声明数组,数组可以支持各种数据类型。
在表1.2中可以找到所有返回消息。此外,控制数据的类型也有常量(见表8.3)。可以将这些结果与类型操作的结果进行比较,以对不同类型的控制数据做出反应(参见第814页的“类型操作”一节)。
HALCON Operator Reference / Develop 定义一个错误变量,并设置是否打开该错误状态 dev_error_var( : : ErrorVar, Mode : ) ErrorVar:输入参数,包含错误变量的状态名,也可以自定义一个名字。 Mode:输入参数,设置错误变量的开=1,或者关=0,如果Mode关闭,该变量始终为0,但变量能显示错误号。 |
HALCON Operator Reference / Develop 指定错误检查,检测错误状态是否为2(即H_MSG_TRUE) dev_set_check( : : Mode : ) Mode:输入参数,如果该值为'~give_error',这次检测会被忽略,程序进入后面的操作,如果该值为'give_error'(默认值),若是出现错误将提示错误信息,程序不再执行,该函数一般与dev_error_var()函数一起执行,在程序中插入它便于程序检查错误。 |
注意:在本书中,元组和数组是一样的,数组的类型统一为具有相同类型的一系列数据的集合。与在VS中不同,VS中的元组和数组是有所区别的。
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_error_var (Error, 1)
dev_set_check ('~give_error')
FileName := 'wrong_name'
read_image (Image, FileName)
ReadError := Error
if (ReadError != H_MSG_TRUE)
write_string (WindowHandle, 'wrong file name: '+FileName)
endif
* 现在程序将以一个异常结束
dev_set_check ('give_error')
read_image (Image, FileName)
三、Variables变量
变量的命名和其他语言的命名是一样的,通常用数字和下划线组合(必须是字符和下划线在最前面),他们的最大长度不能超过256个字符。
一个变量的类型(图形或者控制变量)在第一次使用中根据函数的参数对应的位置来决定,变量的类型在输入参数期间确定,每当一个标识符出现,对应的变量也随之产生。
图形和控制变量必须不能有相同的名字,图像和控制变量的初始值是不确定的,直到实例化操作才能确定下来。读取一个没有被实例化的变量会导致运行错误。
动态变量第一次粗略的赋予变量值(图形或者控制参数),然而实例类型的数据中分配到内存中是不明确的,直到变量数值最终被分配,因此有可能的是新的数据和老的数据并不一定是同一类型。
→变量范围(局部和全局)
HDevelop支持局部和全局变量,所有变量都是默认为局部变量,也就是说它们只能在对应的程序块中有效,因此,局部变量在不同程序中可以有相同的名字,区别在于,全局变量在整个程序中都能被调用,但是它们必须被明确为全局变量。
HALCON Operator Reference / Control 声明一个全局变量 global( : : Declaration : ) Declaration:输入参数,全局变量声明:可选关键字“def”、类型和变量名。建议值【 'object', 'tuple', 'def object', 'def tuple', 'object vector(1)', 'tuple vector(1)', 'def object vector(1)', 'def tuple vector(1)'】。 |
read_image(Image1, 'printer_chip/printer_chip_01')
global tuple File
global object Image
Image:= Image1
File:=[1,2,3]
a:=[1,2,3]
程序必须明确宣布调用该全局变量,现有的程序无法破坏声明的全局变量;当然,全局变量在HDevelop系统中很独特,完全应用于外部程序、主程序以及所有本地程序。