news 2026/9/3 4:14:54

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/9/3 0:21:55

机器学习-Q学习

摘要&#xff1a;Q学习是一种基于价值的强化学习算法&#xff0c;通过迭代优化智能体的决策行为。其核心是Q值函数&#xff0c;利用时序差分法和贝尔曼方程评估状态-行动对的预期奖励。算法流程包括Q表初始化、状态观测、行动决策、奖励评估和Q表更新等步骤。Q学习具有无模型、…

作者头像 李华
网站建设 2026/9/3 3:10:32

QTabWidget样式表兼容性:Qt5到Qt6深度剖析

从Qt5到Qt6&#xff0c;QTabWidget样式为何“突然失效”&#xff1f;一文讲透兼容性陷阱与平滑迁移方案你有没有遇到过这种情况&#xff1a;项目从Qt5升级到Qt6后&#xff0c;原本好好的标签页控件QTabWidget突然变得“透明”了&#xff1f;标签背景没了、圆角消失了、悬停效果…

作者头像 李华
网站建设 2026/9/2 9:49:54

双卧轴搅拌机与立轴行星式搅拌机哪种设备好?

在混凝土搅拌设备领域&#xff0c;双卧轴搅拌机与立轴行星式搅拌机犹如两颗并行的星辰&#xff0c;各自在特定场景中闪耀着独特光芒。二者并非简单的替代关系&#xff0c;而是通过差异化设计满足不同工程需求的互补型设备。小编将从技术原理、应用场景、维护成本三个维度展开分…

作者头像 李华
网站建设 2026/9/3 0:21:29

从零实现AUTOSAR NM报文唤醒的软件配置

AUTOSAR NM报文唤醒&#xff1a;从配置到落地的完整实践指南你有没有遇到过这样的场景&#xff1f;整车钥匙未插入&#xff0c;但某个车门模块却频繁“醒来”&#xff0c;继而耗尽蓄电池&#xff1b;或者遥控解锁时响应迟钝&#xff0c;排查半天才发现是网络管理状态没对齐。这…

作者头像 李华
网站建设 2026/9/3 3:39:25

目前国内专注于企业系统集成服务的 AI 智能体有哪些?

过去一年&#xff0c;“AI 智能体” 几乎成了企业数字化领域的高频词。但真正深入到企业内部去看&#xff0c;会发现一个明显分化&#xff1a;很多智能体更像个人效率工具&#xff0c;适合写内容、查资料、做总结&#xff0c;却很难在企业真实业务中长期承担责任 —— 它们无法…

作者头像 李华
网站建设 2026/9/3 1:22:27

iPaaS 在餐饮行业的最佳实践分享

餐饮数字化不只是装个系统 对连锁餐饮企业来说&#xff0c;数字化涉及多个环节&#xff1a;前端的点餐、小程序和外卖平台&#xff0c;中台的会员和营销管理&#xff0c;后端的供应链和财务&#xff0c;还有门店的日常运营。这些系统通常来自不同供应商&#xff0c;标准不一&am…

作者头像 李华