HDevelop 的语法:变量、元组、判断和循环
2023 年 3 月 4 日 · 2 分钟读完
在 HDevelop 里写程序时,有些语法和 C# 差别挺大,记录一下。
变量的创建与赋值
HDevelop 里变量不用提前声明。调用算子时,输出参数会自动创建对应的变量,比如调用 read_image 后,变量窗口里自动多了一个图像变量 Image:

赋值用 :=(单个 = 是比较):
* 星号开头是注释
read_image (Image, 'printer_chip/printer_chip_01')
Threshold := 128
Name := 'chip'
图像变量也可以直接赋值:
read_image (Image, 'printer_chip/printer_chip_01')
CopyImage := Image
元组(tuple)
控制变量本质上都是元组,单个数字也是长度为 1 的元组。
T := [1, 2, 3]
T := [T, 4] * 拼接:[1, 2, 3, 4]
N := |T| * 长度:4
First := T[0] * 下标从 0 开始
Sub := T[1:2] * 切片:[2, 3]
T[0] := 10 * 修改某一项
Mixed := [1, 'a', 2.5] * 一个元组里可以混放不同类型
很多运算对元组逐项进行,比如 [1, 2, 3] * 2 得到 [2, 4, 6],不用写循环。
if 语句
if (Area > 1000)
Result := 'big'
elseif (Area > 100)
Result := 'middle'
else
Result := 'small'
endif
比较运算符:= 或 == 等于,!= 或 # 不等于,<、>、<=、>=;逻辑运算符是单词:and、or、not、xor。
for 循环
for Index := 0 to 9 by 1
* 循环体
endfor
to 后面的终值是包含在内的,上面会执行 10 次(0 ~ 9)。by 后面是步长,每次循环后给变量加多少,可以是负数(倒着数)。遍历元组时常写成:
for I := 0 to |T| - 1 by 1
Value := T[I]
endfor
循环开始时终值就固定了,在循环体里改
|T|不会影响循环次数。
while 循环
I := 0
while (I < 10)
I := I + 1
endwhile
还有先执行后判断的 repeat ... until (条件)。
中断语句
break:跳出当前循环;continue:跳过本次,进入下一次循环;return ():从当前过程(procedure)返回;stop ():程序在这里暂停,方便调试时查看变量。
switch 语句
switch (Mode)
case 0:
Result := 'zero'
break
case 1:
case 2:
Result := 'one or two'
break
default:
Result := 'other'
endswitch
case 只能是整数常量。和 C 语言一样,case 之间没有 break 时会接着往下执行:
ret := ''
index := 1
switch (index)
case 1:
ret := ret + '1'
case 2:
ret := ret + '2'
case 3:
default:
ret := ret + 'df'
endswitch
从 case 1 进去,一路执行到 default,结果是 '12df':

和 C# 的对照
| HDevelop | C# | |
|---|---|---|
| 赋值 | := |
= |
| 等于 | = 或 == |
== |
| 不等于 | != 或 # |
!= |
| 逻辑 | and、or、not |
&&、||、! |
| 注释 | * 开头 |
// |
| 字符串 | 单引号 'abc' |
双引号 "abc" |
| 数组长度 | |T| |
T.Length |
| 块结束 | endif、endfor、endwhile |
} |
| 整除 | 7 / 2 = 3(两个整数) |
同左 |
延伸
- 异常处理:
try ... catch (Exception) ... endtry,Exception是一个元组,第一项是错误码。没有 try 时,算子出错程序直接停下。 - 过程(procedure):相当于函数。选中一段代码右键「创建新过程」,自动分析出输入输出参数;可以保存成外部
.hdvp文件在多个程序间共用。 - 导出 C#:文件 → 导出,生成的代码里每个算子都对应
HOperatorSet.Xxx(...),循环和判断会翻译成 C# 语法;元组运算会变成HTuple的方法调用,读起来比较啰嗦。转换时常用的类型操作见 Halcon 在 C# 里的数据类型转换。 - 入门:算子签名里的冒号、读图和开窗口见 Halcon 入门。
原文首发于 blog.csdn.net