news 2026/4/16 17:46:09

Halcon控制语句

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Halcon控制语句

*选择语句:

•if语句:if-->endif
•switch语句:switch-->endswitch
•清空窗体:dev_clear_window ()
•文本显示:disp_message()
*// 选择语句:if-else switch-case *// 获取句柄 dev_get_window (WindowHandle) *// 清空窗口内容 dev_clear_window () *// if-else语句的作用区域是: if-->endif *// 单支情形 num := 10 if (num>5) *// 在图形窗口显示文本信息 *// 参数1 图形窗口句柄(指定显示窗口) *// 参数2 OK 要显示的文本内容 *// 参数3 window 坐标参考基准(窗口左上角为原点) *// 参数4 12 文本Y坐标(向下为正) *// 参数5 12 文本X坐标(向右为正) *// 参数6 black 文本显示颜色 *// 参数7 true 显示前清空窗口内容 disp_message (WindowHandle, 'OK', 'window', 12, 12, 'black', 'true') else disp_message (WindowHandle, 'NG', 'window', 12, 12, 'black', 'true') endif *// 多支情形 light:='red' if (light=='red') disp_message (WindowHandle, '禁止通行', 'window', 52, 12, 'black', 'true') elseif (light=='green') disp_message (WindowHandle, '通行', 'window', 52, 12, 'black', 'true') else disp_message (WindowHandle, '等一等', 'window', 52, 12, 'black', 'true') endif *// 嵌套情形 salary := 8000 sex := '男' if (sex == '男') if (salary>=8000) disp_message (WindowHandle, '结婚吧', 'window', 82, 12, 'black', 'true') else disp_message (WindowHandle, '加油兄弟', 'window', 82, 12, 'black', 'true') endif elseif (sex=='女') if (salary>=5000) disp_message (WindowHandle, '结婚吧', 'window', 82, 12, 'black', 'true') else disp_message (WindowHandle, '加油姑娘', 'window', 82, 12, 'black', 'true') endif endif *// switch-case语句 *// 星期判断 week := 5 switch (week) case 1: disp_message (WindowHandle, '星期一', 'window', 112, 12, 'black', 'true') break case 2: disp_message (WindowHandle, '星期二', 'window', 112, 12, 'black', 'true') break case 3: disp_message (WindowHandle, '星期三', 'window', 112, 12, 'black', 'true') break case 4: disp_message (WindowHandle, '星期四', 'window', 112, 12, 'black', 'true') break case 5: disp_message (WindowHandle, '星期五', 'window', 112, 12, 'black', 'true') break case 6: disp_message (WindowHandle, '星期六', 'window', 112, 12, 'black', 'true') break case 7: disp_message (WindowHandle, '星期日', 'window', 112, 12, 'black', 'true') break default: disp_message (WindowHandle, '异常情况', 'window', 112, 12, 'black', 'true') break endswitch *// 练习月份天数判断 year := 2026 month := 2 switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: disp_message (WindowHandle, '31天', 'window', 132, 12, 'black', 'true') break case 4: case 6: case 9: case 11: disp_message (WindowHandle, '30天', 'window', 132, 12, 'black', 'true') break case 2: if ((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)) disp_message (WindowHandle, '29天', 'window', 132, 12, 'black', 'true') else disp_message (WindowHandle, '28天', 'window', 132, 12, 'black', 'true') endif break default: disp_message (WindowHandle, '异常情况', 'window', 132, 12, 'black', 'true') break endswitch

*循环语句:

•for语句:for 初始变量 := 初始值 to 结束值 by 步长 .....endfor
•while语句:while(条件语句).....endwhile
•repeat-until语句:repeat....代码块内容 until(条件语句)
*// Halcon循环语句: for语句、while语句、repeat-until语句 *// for循环结构: for 初始变量 := 初始值 to 结束值 by 步长 .....endfor *// 1-100之间的累加和 *// 定义初始值 sumAdd := 0 for Index := 1 to 100 by 1 sumAdd := sumAdd + Index endfor disp_message (WindowHandle, sumAdd, 'window', 162, 12, 'black', 'true') *// 求1000以内的水仙花数 *// 水仙花数:每个各位立方和等于这个数本身就是水仙花数 str := '' for Index1 := 100 to 999 by 1 ge := Index1 % 10 shi := (Index1 / 10) % 10 bai := Index1 / 100 sum1 := (ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai) if (sum1 == Index1) str := str + Index1 + ' ' endif endfor disp_message (WindowHandle,'1000以内的水仙花数是: ' + str + ' ', 'window', 192, 12, 'black', 'true') *// 打印章节内容:总共有七章,每章有6节 for i := 1 to 7 by 1 for j := 1 to 6 by 1 disp_message (WindowHandle, '第'+i+'章,第'+j+'节', 'window',12+i*40,12+j*80, 'black', 'true') endfor endfor *// 练习:使用for循环 在窗口中打印九九乘法表 str := '' for x := 1 to 9 by 1 for y := 1 to x by 1 str := y + ' * ' + x + ' = ' + (y * x) disp_message (WindowHandle, str, 'window',12+x*40,12+y*80, 'black', 'true') endfor endfor *// while循环语句//--------------------- *// 语法结构: while(条件语句).....endwhile *// 求1-100之间的累加和 Index := 1 sumAdd := 0 while (Index <= 100) sumAdd := sumAdd + Index Index := 1 + Index endwhile disp_message (WindowHandle, sumAdd, 'window', 12, 12, 'black', 'true') *// repeat...until语句 重复执行....一直到满足条件循环结束//--------------------- *// 语法结构:repeat....代码块内容 until(条件语句) *// 求1-100的累加和 Index := 1 sumAdd := 0 repeat sumAdd := sumAdd + Index Index := 1 + Index until (Index > 100) disp_message (WindowHandle, sumAdd, 'window', 42, 12, 'black', 'true') *// 使用repeat...until语句求1000以内的水仙花数 str := '' Index := 100 repeat ge := Index % 10 shi := (Index / 10) % 10 bai := Index / 100 sum1 := (ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai) if (sum1 == Index) str := str + Index + ' ' endif Index := 1 + Index until (Index > 999) disp_message (WindowHandle, '1000以内的水仙花数是: ' + str + ' ', 'window', 72, 12, 'black', 'true') *// 使用repeat...until语句求100以内的质数 *// 质数是指大于 1 的自然数,且满足:除了 1 和它本身之外,不能被任何其他自然数整除。 dev_get_window(WindowHandle) *// 100以内的质数 index := 1 sumadd := '' repeat for index2 := 2 to index by 1 if ((index % index2 == 0)) if ((index2 != index)and(index2 != index)) break endif if (index2 = index) sumadd := sumadd+','+index endif endif endfor index := index+1 until (index>100) *// 输出文本 disp_message(WindowHandle,sumadd,'window',12,12,'red','true') *// 100以内的质数2 sumadd :='' index :=1 repeat index2 :=2 repeat if ((index % index2==0)) if ((index2 != index)and(index2 != index)) break endif if (index2 = index) sumadd := sumadd+','+index endif endif index2 := index2+1 until (index2>index) index := index+1 until (index>100) *// 输出文本 disp_message(WindowHandle,sumadd,'window',12,12,'red','true')

*跳转语句:

•continue:跳转语句
•break:结束当前它所在的循环
•return():返回同时还有结束函数
•exit():关闭当前它所打开的窗口
•stop():停止正在运行的程序
*// Halcon跳转语句:continue、 break、 return()、 exit()、 stop() *// 求1-100的累加和 dev_get_window (WindowHandle) sumCount := 0 for Index2 := 1 to 100 by 1 *// 碰到偶数跳过, 不累加 if (Index2 % 2 == 0) *// 跳出本次循环, 继续下次循环, 如果没有下次跳出整个循环 continue endif *// 当累加到80(循环变量)时, 结束程序 if (Index2 == 80) *// 返回同时还有结束函数, 此刻使用在main函数当中, 结束整个程序 return () endif *// 每累加10个值, 程序停止一下 if (Index2 % 10 == 0) *// 停止正在运行的程序, 如果想继续启动, 点运行从当前代码开始运行 stop () endif *// 当累加到7的倍数(不包含7), 结束循环 if (sumCount % 7 == 0 and sumCount != 7) *// 结束当前它所在的循环, 如果碰到嵌套循环, 它只能跳出它所在的内层循环, 外层的循环不能结束 break endif sumCount := sumCount + Index2 endfor disp_message (WindowHandle, sumCount, 'window', 12, 12, 'black', 'true') *// 当展示玩累加和值, 退出程序 *// 关闭当前它所打开的窗口 *exit ()

*异常捕获语句:

•异常捕获语句:try-catch-endtry
*// Halcon异常捕获语句:try-catch-endtry *// 我们可以把可能产生异常的代码放入到try语句中,通过catch语句捕获异常,不管是否处理,不会影响程序后续执行 *// 除数不能为0 num1 := 1 num0 := 0 try num := num1/num0 catch (Exception) disp_message (WindowHandle, Exception, 'window', 12, 12, 'black', 'true') endtry *// 手动抛出异常 throw(['异常信息']) throw ('登录异常')

希望对大家有所帮助, 感谢大家的关注和点赞。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:40:19

英语单词转语音 读一遍 读两遍 中间要有停顿

如果你有一些英文单词&#xff0c;你想把它们转化成语音。然后读出来&#xff0c;有时候读一遍。有时候读两遍&#xff0c;而且每读一个单词&#xff0c;中间还要停顿几秒。你怎么办呢&#xff1f;你可以这样做&#xff0c;下面就来演示一下。把你的英文单词准备好。要去掉音标…

作者头像 李华
网站建设 2026/4/16 7:47:28

零基础小白指南:轻松搞定Intel HAXM配置

零基础也能搞定&#xff1a;彻底解决 Android 模拟器卡顿问题&#xff0c;让 AVD 飞起来&#xff01; 你是不是也遇到过这种情况&#xff1f;兴冲冲打开 Android Studio&#xff0c;新建一个 AVD&#xff08;Android Virtual Device&#xff09;&#xff0c;点击运行——结果弹…

作者头像 李华
网站建设 2026/4/16 11:04:57

力扣hot100:每日温度

题目描述&#xff1a;思路分析&#xff08;单调栈&#xff09;这道题最优解是使用单调栈&#xff08;Monotonic Stack&#xff09;。核心思想&#xff1a;我们从左到右遍历每一天。用一个栈来维护一个从栈底到栈顶温度严格递减的索引序列&#xff08;即栈中保存的是还没有找到更…

作者头像 李华
网站建设 2026/4/16 9:18:35

SpringMVC——json数据传递参数

目录json数组json对象&#xff08;POJO&#xff09;json数组&#xff08;POJO&#xff09;注意json数组 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"…

作者头像 李华
网站建设 2026/4/16 12:51:43

一文说清Keil4在工业通信协议中的应用

深入工业通信一线&#xff1a;Keil4如何撑起嵌入式协议开发的“硬核”底座 在一条自动化生产线上&#xff0c;机械臂精准抓取、传送带有序流转、传感器实时反馈——这些看似流畅的动作背后&#xff0c;是一套严密的“神经系统”在默默支撑。这个系统的核心&#xff0c;不是某个…

作者头像 李华
网站建设 2026/4/16 12:53:16

RenderDoc使用指南

最终情况&#xff1a; 参考文档&#xff1a; https://renderdoc.org/docs/getting_started/index.html 本文章简要介绍了使用RenderDoc进行应用程序捕获与分析的基本流程。内容不涉及具体的功能细节&#xff08;相关说明可在其他文档中查阅&#xff09;&#xff0c;而是重点阐述…

作者头像 李华