点击上方蓝字 记得关注我们哦!
程序流程控制
除了纯运动指令和通讯指令(切换和等待功能)之外,在机器人程序中还有大量用于控制程序流程的程序。 其中包括:
循环 | 循环是控制结构。 它不断重复执行指令块指令,直*出现终止条件。
无限循环
计数循环
当型和直到型循环
分支 | 使用分支后,便可以只在特定的条件下执行程序段。
条件分支
多分支结构
无限循环 :在无限循环中无止境地重复指令段。 然而,却可通过一个提前出现的中断(含 EXIT 功能)退出循环语句。
程序流程图: 无限循环
LOOP 指令举例:
无 EXIT:永久执行对 P1 和 P2 的运动指令
带 EXIT:一直执行对 P1 和 P2 的运动指令,直到输入端 30 切换到 TRUE。
计数循环 :用计数循环 (FOR 循环语句)可使指令重复定义的次数。 循环的次数借助于一个计数变量控制。
程序流程图: FOR 循环语句
一个 FOR 循环语句举例: 将输出端 1 * 5 依次切换到 TRUE。 用整数(Integer) 变量 “i” 来对一个循环语句内的循环进行计数。
当型循环: WHILE 循环是一种当型或者先判断型循环,这种循环会在执行循环的指令部分前先判断终止条件是否成立。
WHILE 程序流程图
WHILE 循环示例: 输出端 17 被切换为 TRUE,而输出端 18 被切换为FALSE,并且机器人移入 Home 位置,但仅当循环开始时就已满足条件 (输入端 22 为 TRUE)时才成立。
直到型循环: REPEAT 循环是一种直到型或者检验循环,这种循环会在*一次执行完循环指令部分后才会检测终止条件。
程序流程图 REPEAT
REPEAT 循环示例:输出端 17 被切换为 TRUE,而输出端 18 被切换为FALSE,并且机器人移入 Home 位置。 这时才会检测条件。
条件性分支 :条件性分支 (IF 语句)由一个条件和两个指令部分组成。 如果满足条件,则可处理*一个指令。 如果未满足条件,则执行*二个指令。
但是,对 IF 语句也有替代方案:
*二个指令部分可以省去: 无 ELSE 的 IF 语句。 由此,当不满足条件时紧跟在分支后便继续执行程序。
多个 IF 语句可相互嵌套 (多重分支): 问询被依次处理,直到有一个条件得到满足。
程序流程图: IF 分支
IF 语句举例: 如果满足条件 (输入端 30 必须为 TRUE),则机器人运动到点P3,否则到点 P4。
分配器: 一个 SWITCH 分支语句是一个分配器或多路分支。 此处*先分析一个表达式。然后,该表达式的值与一个案例段 (CASE) 的值进行比较。 值一致时执行相应案例的指令。
程序流程图: 分配模块 SWITCH - CASE
对带有名称 “ 状态 ” 的整数变量 (Integer),*先要检查其值。 如果变量的值为1,则执行案例 1 (CASE 1): 机器人运动到点 P5。 如果变量的值为 2,则执行案例 2 (CASE 2): 机器人运动到点 P6。 如果变量的值未在任何案例中列出(在该例中为 1 和 2 以外的值),则将执行默认分支: 故障信息。
机器人程序结构化设计的方法:
机器人程序的结构是体现其使用价值的一个十分重要的因数。 程序结构化越规范,程序就越易于理解、执行效果越好、越便于读取、越经济。 为了使程序得到结构化设计,可以使用以下技巧:
注释 | 注解和印章
缩进 | 空格
隐藏 | Folds (“ 折叠 ”)
模块化 | 子程序
注释和印章 :添加注释为在机器人程序中存储仅针对程序读者的文本提供了可能性。 即机器人解释器不读入该文本。 该文本只是为了提高程序的可读性。
在机器人程序中可以在许多地方使用注释:
有关程序文本的信息 | 作者、版本、创建日期
注释示例: 信息
程序文本的分段 | 主要使用画图符号 (特殊符号 #、*、~ 等)
注释示例: 分层目录
添加注释 :(专家层面) | 通过在程序行的起始位置添加分号来使该程序行 “变成注释 ”,即该文本作为注释来识别,而不进入程序执行。
注释示例: 添加注释
对行的解释
以及对需执行的工作的说明 | 标识未完成的程序段
注释示例: 说明
注意:只有不断更新,注释才有意义。 如果之后更改过指令,则也必须更新注释!
可以使用三种不同的注释方式:
添加分号 (专家层面) | 通过插入分号 (“;”)使一行中的后面部分变成注释。
插入联机表格 “ 注释
注释的联机表单
插入联机表格“印章” | 在此还另外插入一个时间戳记。 此外,还可以插入编辑者的姓名。
印章的联机表格
插入注释和印章的操作步骤:
1. 标定其后应插入注释或印章的那一行。
2. 选择菜单序列指令 > 注释 > 正常或印章。
3. 输入所希望的数据。 如果事先已经插入了注释或印章,则联机表格中还保留着相同数据。
插入注释时,可用新文本来清空注释栏,以便输入新的文字。
插入印章时,还可用新时间来更新系统时间,并用新名称清空名称栏。
4. 用指令 OK 存储。
程序行的缩进 提高机器人程序可读性的一个有效手段是缩进程序行。 由此可提高程序单元之间关联的清晰度。
程序行缩进
注意:缩进效应只是视觉上的。 缩进的程序行在程序运行时与未缩进的程序行一样得到处理。
通过 Fold 隐藏程序行:
KUKA 机器人编程语言可将程序行折叠和隐藏到 Fold 中。 用户因此而看不到这些程序行。这使程序的阅读变得更加简洁方便。 以后可在专家用户组中打开和编辑 Fold。
关闭的 Fold
打开的 Fold
Fold 的颜色:
子程序技术: 利用子程序技术可将机器人程序模块化,因而可以有效结构设计程序。 目的是不将所有指令写入一个程序,而是将特定的流程、计算或过程转移到单*的程序中。
通过使用子程序产生了一系列的优点:
由于程序长度减短,主程序结构更清晰并更易读。
可*立开发子程序: 编程花费可分摊,*小化错误源。
子程序可多次反复应用。
原则上可将子程序分为两种不同的类型
全局子程序
全局子程序示意图
一个全局子程序是一个*立的机器人程序,可从另一个机器人程序调用。可根据具体要求对程序进行分支,即某一程序可在某次应用中用作主程序,而在另一次则用作子程序。
局部子程序
示意图: 局部子程序
局部子程序是集成在一个主程序中的程序,即指令包含在同一个 SRC 文件中。 子程序的点坐标相应存放在同一个 DAT 文件中。
调用子程序的过程: 每个程序都以 DEF 行开始并以 END 行结束。 如果要在主程序中调用子程序,则正常情况下子程序会从 DEF 运行* END。 到达 END 行后,程序运行指针重新跳入发出调用指令的程序 (主程序)。
调用子程序的过程
注意:为了能提早退出子程序 (即在 END 行之前),可以在子程序中编入 RETURN 指令。 程序读到该程序行时,即可提前终止子程序的运行。
调用子程序的操作步骤:
为了对子程序调用进行编程,必须已选择用户组 “ 专家 ”。 子程序调用的句法为:
??( )
1. 在主菜单中选择 配置 > 用户组。 将显示出当前用户组。
2. 若欲切换*其它用户组,则: 按下登录 …。 选定用户组专家。
3. 输入密码 kuka,然后用登录确认。
4. 用打开将所需的主程序载入编辑器
5. 将光标定位在所需的行内
6. 输入子程序名称和括号,例如:myprog( )
7. 用关闭图标关闭编辑器并保存修改