在发那科工业机器人KAREL语言进行二次开发中有时会需要使用分支逻辑,在发那科工业机器人的KAREL语言中提供了该逻辑的支持,使用一个指令实现,该指令为SELECT,下面来看下该指令在KAREL语言中的使用介绍:
指令:SELECT ... ENDSELECT
用途:允许执行一系列语句序列中的一个,具体取决于INTEGER表达式的值。
语法 : SELECT case_val OF
CASE(value{,value}):
{statement}
{ CASE(value{, value}):
{statement} }
<ELSE:
{ statement }>
ENDSELECT
各重要部分的含义:
case_val : INTEGER 表达式
value : INTEGER 常量或文字
statement : 有效的KAREL可执行语句
详细解释:
①case_val 与每个子句中 CASE 后面的每个值进行比较。如果它等于其中任何一个,则执
行 CASE 和下一个子句之间的语句。
②SELECT 语句中最多可以使用1000个CASE子句。
③如果在多个CASE中列出了相同的INTEGER值,则只会执行第一个匹配CASE后面的语句
序列。
④如果使用ELSE子句且表达式 case_val 与 CASE 子句中的任何值都不匹配,则执行关键字 ELSE 和 ENDSELECT 之间的语句。
⑤如果没有使用 ELSE 子句且表达式 case_val 与 CASE 子句中的任何值都不匹配,则程序
将以“'CASE中的不匹配'”错误中止。
接下来创建一组程序测试该语句,其中还会用到FOR循环语句配合测试,两种指令结构组合使用更有趣↓。
按下图步骤创建一个KAREL文件。
在KAREL程序编辑器里编写如下程序:
PROGRAM TEST_SELECT --程序名
VAR
A : INTEGER
BEGIN --程序开始
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1) --显示用户菜单界面
WRITE('WAIT...SELECT',CR) --提示
FOR A = 1 TO 4 DO --FOR循环四次
SELECT A OF --进入选择
CASE (1):
WRITE('1',CR) --A与1相等进入这里执行
DELAY 1000 --延时
CASE (2):
WRITE('2',CR) --A与2相等进入这里执行
DELAY 1000 --延时
CASE (3):
WRITE('3',CR) --A与3相等进入这里执行
DELAY 1000 --延时
ELSE:
WRITE('ELSE',CR) --A与前面的条件不相等进入这里执行
DELAY 1000 --延时
ENDSELECT
ENDFOR
WRITE('DONE',CR) --提示
END TEST_SELECT --程序结束
编写完成后按下编译按钮编译该程序。
关闭编译输出窗口。
关闭KAREL程序编辑器。
打开工业机器人示教器。
进入菜单的下页。
进入系统中的变量。
将图示项改成1。
点击“SELECT”按钮进入程序选择界面。
选择刚才创建好的KAREL程序。
准备运行刚才选择的程序。
运行结果如下,对SELECT的每一项都进行了执行。
|