软件
KRC...
专家编程
KUKA系统软件(KSS)
版本4.1
长沙工控帮教育科技有限公司
@版权KUKA Roboter GmbH
复制或者向第三者传授本文,包括本文的段落章节,必须经过出版者的明确 许可。
本文中未作描述的、控制部分中的其它函数有可能起作用。尽管如此,在重 新供货或提供服务时,用户无权对上述函数提出要求。
我们对本印制品就其内容同它所描述的硬件和软件的一致性做过审查,但是 它们之间的偏差在所难免。所以,我们对上述一致性不做承诺。本印制品中 的数据和说明受到定期检查,必要的修改将在后续的版本中给出。
在不对系统函数产生影响的前提下,保留技术更改权。
PD Interleaf
长沙工控帮教育科技有限公司
目录
1KRL程序的一般信息··· 7
1.1程序的结构和建立 ··· 7
1.1.1程序接口 ··· 7
1.1.2文件概念 ··· 9
1.1.3文件结构 ··· 9
1.2 建立和编辑程序··· 11
1.2.1新建一个程序 ···11
1.2.2建立、编译和联接程序 ···12
1.3替换程序 ···14
1.3.1程序修改 ···14
1.3.2编辑 ···14
1.3.2.1块函数 ···14
1.3.2.2拷贝(CTRL-C) ···14
1.3.2.3粘贴(CTRL-V) ···15
1.3.2.4剪切(CTRL-X) ···15
1.3.2.5删除 ···15
1.3.2.6搜索 ···16
1.3.2.7替换 ···16
1.4隐藏程序部分 ···19
1.4.1折合 ···19
1.4.1.1示例程序 ···20
1.5程序运行模式 ···22
1.6错误处理 ···24
1.7注释 ···27
2变量和声明
···
292.1变量和名称 ··· 29
2.2数据对象 ···31
2.2.1数据对象的声明和初始化 ···31
2.2.2简单数据类型 ···33
2.2.3阵列 ···35
2.2.4字符串 ···38
2.2.5结构 ···38
2.2.6列举类型 ···40
2.3数据操作 ···42
2.3.1操作 ···42
2.3.1.1算术操作 ···42
2.3.1.2几何操作 ···43
2.3.1.3关系操作 ···47
长沙工控帮教育科技有限公司
专家级编程
3.2点到点运动(PTP)··· 66
3.2.1一般说明(同步PTP)··· 66
3.2.2高级运动轮廓 ··· 67
3.2.3运动命令 ··· 68
3.3连续轨迹运动(CP运动=连续轨迹)··· 77
3.3.1速度和加速度 ··· 77
3.3.2方位控制 ··· 78
3.3.3线性运动 ··· 83
3.3.4圆弧运动 ··· 84
3.4计算机提前运行 ··· 86
3.5使用逼近定位运动 ··· 89
3.5.1PTP—PTP逼近定位 ··· 90
3.5.2LIN—LIN逼近定位 ··· 93
3.5.3CIRC-CIRC和CIRC-LIN逼近定位··· 96
3.5.4PTP—CP逼近定位··· 99
3.5.5改进的逼近定位 ··· 102
3.5.6逼近定位期间工具交换 ··· 103
3.6示教点 ··· 104
3.7运动参数 ··· 105
4 KRL辅助
···
1064.1位置说明 ··· 107
4.2[PTP]定位··· 110
4.3[LIN]直线移动··· 112
4.4[CIRC]圆弧移动 ··· 114
5程序执行控制
···
1165.1程序分支 ··· 116
5.1.1跳跃指令 ··· 116
5.1.2条件分支 ··· 117
5.1.3转换 ··· 118
5.2循环 ··· 119
5.2.1计数循环 ··· 119
5.2.2跳出循环 ··· 121
5.2.3非跳出循环 ··· 122
5.2.4无穷循环 ··· 124
5.2.5循环执行的过早结束 ··· 124
5.3等待指令 ··· 125
5.3.1等待一个事件 ··· 125
5.3.2等待时间 ··· 127
5.4停止程序 ··· 128
5.5确认消息 ··· 129
6输入/输出指令
···
1306.1一般说明 ··· 130
6.2二进制输入/输出··· 131
长沙工控帮教育科技有限公司
6.3.1信号声明 ···134
6.3.2在终点设置输出 ···136
6.4脉冲输出 ···139
6.5模拟输入/输出 ···141
6.5.1模拟输出 ···141
6.5.2模拟输入 ···144
6.6预先定义的数字输入 ···146
7子程序和函数
···
1487.1声明 ···148
7.2子程序和函数调用和参数传输 ···151
8中断处理
···
1568.1声明 ···157
8.2激活中断 ···159
8.3停止现在的运动 ···163
8.4取消中断事务 ···164
8.5循环标志的使用 ···167
9触发轨迹相关的开关动作
···
1689.1在轨迹的起点或终点开关动作 ···168
9.2在轨迹的任意点开关动作 ···172
9.3技巧 ···177
9.3.1重叠触发语句 ···177
10数据表
···
17810.1局部数据表 ···178
10.2全局数据表 ···179
11外部编辑器
···
18211.1启动外部编辑器 ···183
11.2操作控制 ···185
11.3“文件”菜单 ···187
11.3.1打开 ···187
11.3.2存储 ···187
11.3.3打印 ···187
11.3.4关闭文件 ···188
11.3.5退出 ···188
11.4“编辑”菜单 ···189
长沙工控帮教育科技有限公司
专家级编程
11.5.1镜像··· 190
11.5.2手动输入··· 191
11.5.3程序段改变··· 195
11.5.4清除文件列表··· 195
11.5.5TCP和Frame调节··· 196
11.6“Hot Edit”菜单··· 197
11.6.1Base,TCP和World··· 197
11.6.2TTS(修改坐标系) ··· 199
11.6.2.1定位TTS ··· 200
11.6.3限制··· 202
11.6.3.1限制--Base/World··· 202
11.6.3.2限制—TTS ··· 203
11.7“ExtExtras”菜单 ··· 203
11.7.1文件—镜像··· 203
11.7.2文件—手动输入··· 205
11.7.2.1使用现有的参考文件··· 206
11.7.2.2创建新的参考文件··· 208
11.7.3设置软件限位开关··· 209
11.8“选项”菜单··· 210
11.8.1输出设置··· 210
11.9“帮助”菜单··· 212
11.9.1版本··· 212
11.9.2驻留在顶部··· 212
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
1 KRL程序的一般信息
1.1 程序的结构和建立1.1.1 程序接口
转换到专家级别则用户界面转换到如下图示
普通用户看不见所有的系统文件,专家级别可在程序窗口看见和编辑系统文件。对 于专家级别来说,不但可以看见文件名和注释,还可以看见文件扩展名、属性和大 小。
以上屏幕中显示了程序窗口中路径“R1”下的文件和目录。
长沙工控帮教育科技有限公司
专家级编程
当KRC1软件被安装在目录“KRC:\R1\MADA\”:时,下列文件可作为标准。
File Meaning
$MACHINE.DAT 控制器和机器人的系统数据列表和系统变量
$ROBCOR.DAT 机器人动态模型的系统数据列表和数据 MACHINE.UPG 用于将来升级的系统文件
ROBCOR.UPG 用于将来升级的系统文件 下列文件可在目录“KRC:\R1\SYSTEM\”:下找到
File Meaning
$CONFIG.DAT 系统数据列表和一般数据 BAS.SRC 运动控制的基本软件包 IR_STOPM.SRC 故障时服务功能所使用的程序 SPS.SUB 监视使用的提交文件
下列文件可在目录“KRC:\R1\TP\”:下找到
File Meaning
A10.DAT 模拟参考电压弧焊时使用的应用程序工艺软件包 A10.SRC
A10_INI.DAT 初始化模拟参考电压弧焊时使用的应用程序工艺软件 A10_INI.SRC 包
A20.DAT 数字程序号弧焊时使用的应用程序工艺软件包 A20.SRC
A50.DAT 使用LIBO(through-the--arc)传感器时使用的应用程
A50.SRC 序工艺软件包
ARC_MSG.SRC 弧焊时编程消息时使用的程序 ARCSPS.SUB 弧焊时使用的提交文件
BOSCH.SRC 点焊和Bosch点焊计时器PSS5200.521C串行接口时使 用的程序
COR_T1.SRC 工具修改程序(老版本) CORRTOOL.DAT 工具修改程序
CORRTOOL.SRC
FLT_SERV.DATFLT_SERV.SRC 弧焊时用户定义故障服务函数时使用的程序
H50.SRC 夹手软件包
H70.SRC Touch传感器软件包 MSG_DEMO.SRC 用户消息的举例和程序 NEW_SERV.SRC 改变FLT_SERV误差响应的程序 P00.DAT 与PLC联结的程序软件包
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
PERCEPT.SRC 调用PERCEPTRON协议时使用的程序 USER_GRP.DAT 用户定义夹手控制时使用的程序 USER_GRP.SRC
USERSPOT.DAT 用户定义点焊时使用的程序 USERSPOT.SRC
WEAV_DEF.SRC 弧焊时weave运动时使用的程序 下列文件可在目录“KRC:\R1:下找到
通过中央 PLC 控制机器人的程序,通过程序号选择程序
1.1.2文件概念
KRL程序由SRC和DAT文件组成。
有关程序建立的更多消息见本章[建立和编辑程序]一节。
“SRC”文件包含实际的程序代码,有两个变量:DEF和DEFFCT(带返回值)。而
“DAT”文件包含特定的程序数据。它们的区别基于KRL文件概念:除处理顺序不同 外,程序包含工业机器人完成的动作也不同。也可能是特殊的运动顺序,打开和关 闭夹手,或复杂的顺序,例如有关焊枪限制的控制。
对于个别情况,程序测试是有用的或必要的。KRL文件概念完全适合于机器人编程的 特殊要求。
1.1.3文件结构
文件是编程师编程的一个单位,文件存储在硬盘或存储器(RAM)中。KRL中的任何程 序由一个或多个文件组成,简单的程序仅包含一个文件,而比较复杂的任务最好使
用多个文件组成的程序。
有关子程序和函数的详细信息见[子程序和函数]一章
KRL文件的内部结构由声明部分、指令部分和最多255个局部子程序和函数组成。
长沙工控帮教育科技有限公司
专家级编程
DEF NAME(x1:IN) 声明
指令
END
声明 程序执行前已经检查过声明,即在编译期间检查声明。声明部分不可能有指令,第一 个指令开始于指令部分。
指令 与声明不同,指令是动态的,程序处理过程中执行指令。
数据列表 一个机器人程序可能仅包含一个单个的程序文件或一个程序文件和相关的数据表。数 据表和文件具有相同的公共名,区别仅在于扩展名不同。例:
文件:PROG1.SRC 数据表:PROG1.DAT
数据表中只能用“=” 指令分配值,如果数据表和文件具有相同的名称,数据表 中声明的变量和SRC文件中声明的变量的使用完全相同
详细的信息见[数据表]一章。
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
1.2建立和编辑程序
1.2.1新建一个程序
机器人程序可以不包含数据表,对于专家级别来说,文件和数据表也不是同时自 动建立。要新建一个程序,按“New”软键,则打开下列窗口:
提示选择一个模板,使用箭头键选择并按按键“OK”或回车键确认。
不能在所有目录随便建立可用的模板。
有关模板的更多信息见操作资料中的操作手册[导航]一章的[附录]部分.
单独的模板:
Module:
包含框架程序的一个SRC文件和DAT文件被创建。
Expert:
仅包含标题DEF…和END的一个SRC文件和DAT文件被创建。
Cell:
此时,仅创建一个包含SRC的框架程序。该程序用于通过中央PLC控制机器人。
Function:
此时,一个包含标题DEF…和END的函数(SRC文件)被创建。
Submit:
创建一个SUB文件的框架程序。Submit文件包含可以使用的指令,例如,用于循环监视
长沙工控帮教育科技有限公司
专家级编程
选择完成对应的模板后则提示输入新建文件的文件名
文件名 文件扩展名 注释
(最多24个字符) (SRC,DAT或SUB)
文件名是最重要的,最多可以达到24个字符,文件扩展名是自动加上的。如果要增 加注释,则使用右箭头移动光标到相应的文本框后输入文本。
按软键“OK”或回车键确认输入。
如果要在SRC文件中插入菜单-驱动命令,则强制加入数据表。
1.2.2 编辑,编译和链接程序
通过菜单“新建”建立一个文件后,则可以使用编辑器编辑该文件,可使用软键“编 辑”完成该操作。关闭编辑器后,则整个程序代码被编译,也就是说,原文的KRL代 码被转换为能让控制器理解的语言。
为保留程序、分支的清晰,例如,在许多级之间的交叉,可在编辑器中使用空-栏。
编译 该处理中,编译器检查代码句法上和语法上的错误,如果检查到错误,则产生对应的 消息和扩展名为“.ERR”.的错误文件
仅当程序中没有错误时才可被选择和执行。
有关编辑错误处理的更多信息见[错误处理]一节。
链接编辑器
当通过软件“选择”装入一个程序后,建立程序所需要的所有文件和数据表被链接到 一起。链接期间,检查模型是否存在,是否已经被编译和存在错误。当传输参数时,编辑 器检查所传输参数的类型兼容性。如果链接期间出现错误,则产生扩展名为“.ERR”
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
您也可以使用一般文本编辑器写一个KRL程序,然后通过“装载”软键装入系统存储器中。
这时,您必须确保完成所有的必要的初始化(例如:轴速度) 。
下面的简单程序是一个定义轴速度和加速度的举例 DEF PROG1()
:---声明部分---- INT J
:---指令部分---
$VEL_AXIS[1]=100 ;定义轴速度
$VEL_AXIS[2]=100
$VEL_AXIS[3]=100
$VEL_AXIS[4]=100
$VEL_AXIS[5]=100
$VEL_AXIS[6]=100
$ACC_AXIS[1]=100 ;定义轴加速度
$ACC_AXIS[2]=100
$ACC_AXIS[3]=100
$ACC_AXIS[4]=100
$ACC_AXIS[5]=100
$ACC_AXIS[6]=100
PTP{A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
FOR J=1 TO 5 PTP {A1 4}
PTP {A2 -7,A3 5}
PTP {A1 0,A2 -9,A3 9}
ENDFOR
PTP {A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
END
长沙工控帮教育科技有限公司
专家级编程
1.3 改变程序
专家级别的图形用户界面上改变程序有两种基本的方法:
程序修改(PROKOR) 编辑器
1.3.1 程序修改
程序修改是标准的方法。当程序被选择或停止正在运行的程序时,则自动激活PROCOR 模式。
此时,您可以输入或编辑仅影响一个程序行的命令,也就是说,不检查结构(循环 等)或变量声明—使用inline格式或ASCII代码(专家级别下)。
如果选择了不正确的输入,则该程序行立即被删除,且消息窗口出现错误消息。
1.3.2 编辑器
如果要编辑或插入特定的KRL命令或程序结构,可使用编辑器。即使当编辑器关闭时,
已经编译完全部的代码,当一些行interaction(交互作用)时仍可能检查到错误(例 如不正确的声明变量)。
1.3.2.1 块功能
该功能仅当编辑器在“专家级别”用户级时才有用,使用块功能可选择要改 变的内容,使用“编辑”软键。如何第一次转换到“专家级别”用户级的说明见 [配置系统]的“用户级别”一节。
首先定位闪烁编辑光标在要移动程序部分的开始或结束处,然后当向上或向下移动 光标时按下键盘上的“Shift”键。这样就可选择一个可在以后的步骤中使用块功能
编辑的程序部分,选择的部分以高亮标示。
按下菜单键“程序“,从打开的菜单中选择期望的功能。
如果键盘或数字键盘用于块功能,则必须通过按键盘上的“NUM”键取消NUM功能。
状态行相应的显示是开关关。
1.3.2.2 拷贝(CTRL--C)
选择的程序部分被拷贝到剪贴板上用于进一步编辑,也可插入其它地方。
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
您也可以选择按下数字键盘上的CTRL键和键盘上的C键,然后同时释放两个键。
1.3.2.3 粘贴(CTRL--V)
移动编辑光标到要重新插入先前“剪切”或“拷贝”的程序部分的位置。
然后选择选项“块粘贴”,则先前选择的程序部分被插入到编辑光标的下面。
您也可以选择按下数字键盘上的CTRL键和键盘上的V键,然后同时释放两个键。
1.3.2.4 剪切(CTRL--X)
如果从菜单中选择“块剪切”,则选择的程序部分被拷贝到剪贴板且该部分从程序 中被删除。
您也可以选择按下数字键盘上的CTRL键和键盘上的X键,然后同时释放两个键。
1.3.2.5 删除
选择的区域从程序中移走,该情况下不拷贝该区域到剪贴板,因此删除的程序部分 将永久消失。
长沙工控帮教育科技有限公司
专家级编程
因此,一个必须通过软键栏应答的需要确认的请求将出现在消息窗口。
Cancel “删除”动作被取消:
Yes 选择的区域被永久删除:
No “删除”功能被取消。
如果从菜单中选择“删除”选项,则从程序中删除选择的程序部分且不被拷贝到剪 贴板。
1.3.2.6 搜索
更多的信息见操作手册资料的用户编程[程序编辑]一章的[使用程序编辑器工作]一节。
1.3.2.7 替换
“搜索和替换”仅在专家级别模式且连接编辑器有效,该功能搜索程序(非折叠行 或打开的折叠)中的可见部分。使一个特定的字符串被另一个特定的字符串替换。
通过“程序”菜单中的“替换”选项选择该操作。
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
则打开下列窗口:
软键栏的变化。
在搜索行中输入字符串,然后使用箭头键向下移动到替换行,输入要替换字符串的术语。
长沙工控帮教育科技有限公司
专家级编程
当按下软键“取消”,则更换功能被终止,该动作完成的更换多少处将显示在消息窗口。
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
1.4 隐藏程序部分
不像一般编辑器,KCP编辑器允许程序内容根据需要显示。对于普通用户,例如仅可 以看见程序的重要内容,但是对于专家级别用户可看见整个程序。
1.4.1折叠
KUKA操作界面使用特有的技术,从而可以直观明了的显示某个程序。以KRL注释格式 的指令可以显示程序的后续部分。这样,程序被合理地分成若干个段落,类似于文 件夹,所以称为“折合”。
缺省时“折合”是“关闭”的,且只能由专家级别用户“打开”,然后用户才可以 在KUKA图形用户界面(KUKAGUI)上看见信息。专家级用户在指示范围内装入相关的 声明或指令“FOLD”和“:ENDFOLD”就可以使KRL块让一般用户看见。
通过按菜单键“程序”,然后选择“折合”和需要的命令,可以使程序中的折合显 示或隐藏。
编辑器中的程序 选择的程序
可使用下列选项:
Current FOLD opn/cls 打开或关闭编辑光标定位行的折合 All FOLDs opn 打开程序的所有折合
All FOLDs cls 关闭程序的所有折合
如果选择打开折合的程序被复位,则折合自动关闭。
Of the sequence...
:FOLD RESET OUT
长沙工控帮教育科技有限公司
专家级编程
...当折合关闭时,在用户界面上仅可以看见“RESET OUT”单词。例如,对于一般 用户您可以使声明和初始化部分不可见。
1.4.1.1程序举例
DEF FOLDS( )
:FOLD DECLARATION;%附加信息
:---声明部分---
EXT BAS (BAS_COMMAND:IN,REAL:IN) DECL AXIS HOME
INT I
:END FOLD
:FOLD INITIALISATION
:---初始化---
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM( ) INTERRUPT ON 3
BAS(#INITMOV,0)初始化速度,
:加速度,$BASE,$TOOL,等 FOR I=1 TO 16
$OUT[I]=FALSE ENDFOR
HOME={AXIS:A10,A2-90,A390,A40,A530,A60}
:END FOLD
:---主程序部分--- PTP HOME:BCO运行
LIN{X 540,Y 630,Z 1500,A 0,B 90,C 0}
PTP HOME END
该举例程序在屏上幕显示如下:
同一程序使用折合打开时的显示
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
在折合关闭状态,仅关键词“FOLD”后的部分可见,而打开折合则可以看见所有的指令 和声明。
对于编辑器来说“折回”仅仅是一个指令。因为其前面的分号,所以编译器把折合语句看 作是一般注释。
长沙工控帮教育科技有限公司
专家级编程
1.5 程序运行模式
程序运行模式定义如何执行程序 程序不停止
一步一步执行运动指令 单步执行。
所有的程序运行模式如下表说明
运行模式 说明 GO
执行程序中的所有指令,直到程序结束。
MSTEP 运动步(运动指令)
程序一次执行一个运动指令,也就是说,每个运动指令后插入一个 STOP。
执行的程序不作前置处理。
ISTEP 增量步进(单步)
程序一步一步执行,也就是说,每个指令后插入一个STOP(包括空行)。
执行的程序不作前置处理。
PSTEP
程序单步(程序单步) 子程序被完整地执行。
执行的程序不作前置处理。
CSTEP 连续步进(运动指令)
程序一次执行一个运动指令,也就是说,每个运动指令后插入一个 STOP且精确定位。
执行的程序作前置处理。也就是说,定位为粗定位。
可在KCP上使用状态键或通过变量“$PRO_MODE”选择程序运行模式GO,MSTEP和ISTEP。
另一方面,程序运行模式PSTEP和CSTEP只能通过变量“$PRO_MODE”来设置。要修改该状 态,首先激活菜单函数“Monitor”-->“Variable”-->“Single”,然后在“名称”的 文本输入框中输入变量“$PRO_MODE”和“新值”文本输入框中输入期望的新值。
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
程序运行模式“#PSTEP” 和“#CSTEP”只能通过变量修改功能选择,不能使用状态键选 择。
更多更详细的信息见[变量和声明]一章的[数据对象]一节中的(列举类型).
长沙工控帮教育科技有限公司
专家级编程 1.6 错误处理
如果在编译和链接期间发生错误,则导航中会产生错误消息和指出包含错误的文件。
则建立文件“ERROR.SRC”(不正确的), 下面是该文件的一个例子:
当关闭编辑器时,一个包含错误出现次数的通知消息将出现在消息窗口。
同时,这些错误文件将以红十字叉标记
可使用下列软键栏:
软键“打开”将文件装入编辑器,软键“EditDAT”打开编辑器中的Dat文件。如果要删 除包含错误的文件,则按软键“删除”:也可以按“新建”软键建立一个新文件。
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
软键栏的变化
注*1
显示的行号对应程序中的绝对行号,就如同普通编辑器中显示的一样。为使错误显示的 行号与KCP中的行号一致,必须打开所有的折合,激活详细视图和DEF行。这样的显示会 使程序缺乏清晰性,所有信息即使一些不需要的信息也都显示。有关详细视图和DEF行的 更多信息见[隐藏程序部分]一节。
显然,根据错误显示可发现下列错误:
■ SRC文件中的3行包含错误;
■ 包含错误的行的行号为52,53和56;
■ 52行的错误消息是
-- 2263: 循环变量的类型不是INT:
■ 53行的错误消息是
按软键“观看 ERR”打开下面的画面
标题栏用于显示文件的名称
摘要说明
错误号码
包含错误的行的行号和列号
包含错误的源文本行 错误说明=摘要说明
长沙工控帮教育科技有限公司
专家级编程
使用菜单“监视”→“变量”→“修改”,您可以在线显示错误号的含义。要这样做 的话,在状态窗口的“Name”文本输入框中输入字符“$”后跟错误号。本例子中,输 入“$2263”,然后按回车键。
如果现在将SRC文件(“ERROR.SRC”存在的条件下)装入编辑器,您必须进行适当的修改。
闪烁光标已经自动定位在包含错误的第一行,使得修改非常方便。确保关闭受限制的可 见性和可以看见DEF—行。细节可见[隐藏程序部分]。
在这个例子中,折合尚未打开,如果要打开它们,使用菜单命令“程序”-->“折 合”-->“打开全部折合”。
在程序的开头缺少行 “INT I”,该行必须在行“INI”之前插入。只有当行“DEFERROR()”
可见时才有可能进行该操作。
插入下列行修改该错误 INT I
在INI行之前插入,删除行10的等号之一 I=I+1
在该处插入行
删除等号
关闭编辑器,存储修改后的文件,按错误列表中的软键“刷新”;如果已经排除完了所有 的错误,则错误列表消失。
长沙工控帮教育科技有限公司
1 KRL 程序的一般信息(续)
1.7 注释
对于任何计算机程序来说,注释都是一个重要的部分。使您的程序清晰和容易被其 他人理解。注释不影响程序的执行速度。
注释可在程序的任何位置插入。通常在其前面加“:”举例来说:
…
PTPP1 :运动起点
…
:--复位输出--- FORI=1TO16
$OUT[I]=FALSE ENDFOR
…
长沙工控帮教育科技有限公司
2 变量和声明(续)
长沙工控帮教育科技有限公司
专家级编程
2变量和声明
2.1变量和名称
除使用常量,即以数字、符号等格式直接指定值外,也可以在KRL程序中使用变量和其 它格式的数据。
在工业机器人的编程中,需要变量来完成传感器处理,例如,使传感器提供的不同位置 的值在程序中存储和计算。通过执行算术操作来计算一个新的位置。
程序中的变量用一个名称来表示,该名称在一定范围内可自由选择。
名称 KRL中的名称
最大长度为24个字符。
可以包含字母(A-Z)、数字(0-9)和符号‘—’和‘$’。
必须以字母开始。
不要使用关键字。
因为所有的系统变量(见2.4节)以符号‘$’开头,所以该符号在自定义名称中不能 作为第一个符号。
KRL中正确的名称举例如下 SENSOR_1
NOZZLE13 P1_TO_P12
变量被看作是一个固定的存储器区域,变量的内容可以通过变量名称来寻址。当执行 程序时,变量通过存储器位置(地址)和存储器内容(值)来表示。
值分配 使用等号(=)给变量分配值。语句 QUANTITY=5
这样就将值5输入存储器区域的地址QUANTITY中。准确的地址对编程者来说没有意义,
该工作由编译器自动完成。重要的是存储器的内容在程序中可以通过名称随时寻址。
长沙工控帮教育科技有限公司
2 变量和声明(续)
变量周期 变量的周期即该时间段内变量在存储器内存在。取决于变量是在SRC文件或数据表中 声明:
■SRC文件中声明的变量
周期受程序运行时间的限制。执行完成后存储器区域再分配,则变量值丢失。
■数据表中声明的变量 (见数据表一章)
周期与程序运行时间无关,只要该数据表存在,该变量就存在。因此这种变量是 永久保持的(直到系统关机)
长沙工控帮教育科技有限公司
专家级编程
2.2 数据对象
数据对象是可命名的存储器单元。存储器单元可能由不同数目的存储器单元(字节、
字等)组成。如果这些数据对象由编程者通过名称声明,则建立了一个变量。变量 占用一个或多个存储器位置,该数据可被程序写和读。存储器位置可自由选择和名 称的符号化命名使得编程更加容易和更加清晰,同时增强程序的可读性。
下面的例子在于说明术语“数据类型”:一个存储器位置由8位组成。
00110101
这样组合的位如何解释?一样的位组合是代表二进制位的53或ASCII字符的“5”?
数据类型
要明确回答这个问题需要一个重要的信息,即数据对象的数据类型的说明。对于上 述例子来说,类型可能是整数或字符。
介绍数据类型除与计算机相关的外,编程者必须学习数据类型的使用,因为正确的 类型只适合于特定的应用。
2.2.1 数据对象的声明和初始化
DECL 给一个数据类型分配一个变量名称和保留存储器空间,在KRL中须使用DECL声明来完 成。使用
DECL INT QUANTITY,NUMBER
您有可能声明,例如,两个变量QUANTITY和NUMBER为INTEGER数据类型。
这样编译器就知道这两个变量和相关的数据类型,当使用该变量时,可检查该数据 类型是否允许操作。
声明变量,如例子所述,首先是关键字DECL,其后跟的是数据类型和分配该数据类 型的变量列表。
当声明变量和阵列为预定数据类型时,关键字DECL可以省略。不包括简单数据类型INT,
REAL,CHAR和BOOL(见2.2.2一节),结构数据类型POS,E6POS,FRAME,AXIS和E6AXIS(见 2.2.5一节)是预定的,
对于数据类型是POS的变量(非阵列),声明可以省略。POS数据类型是变量的标准数据 类型。
自由可定义结构或列举类型的声明中关键字DECL是包括缺少的。(见节2.2.5和2.2.6)。
初始化
当变量声明完成后,它的值第一次是不可用的,因为根据存储器位置的不同该值可能 不同。要使变量可以开始工作,必须预设定一个特定的值。第一次给变量分配值称
长沙工控帮教育科技有限公司
2 变量和声明(续)
仅数据表中允许直接在声明行中初始化变量。
图.1机器人程序的基本结构
更多消息见[数据表]一章。
长沙工控帮教育科技有限公司
专家级编程
2.2.2 简单数据类型
简单数据类型,意思是指在大多数编程语言中可使用的许多基本数据类型。相对结构数 据类型来说(见节2.3--2.2.6),简单数据类型包含一个单个的值。KRL中可识别的数据 类型及数据类型值的范围如下表。
数据类型 整数 实数 布尔 字符
关键字 INT REAL BOOL CHAR
含义 整数 浮点数字 逻辑型 1个字符
值的范围 -231¼231-1 +1.1E-38… TRUE,FALSE ASCII字符
±3.4E+38
表1 简单数据类型
INT 整数型数据类型是整数系列中的一个子集,它只能是一个子集,因为没有计算可以返回 理论上的无穷大的整数。对于整数型KRC...中提供32位,所以为正数231个整数,数字0 看作为正数。使用
NUMBER=-23456
则将值-23456分配给变量NUMBER
如果将一个实数值分配给一个整数型变量,则该值一般被圆整(x.0到.49向下圆整,
x.5到x.99向上圆整)。意思是语句 NUMBER=45.78
则将值46分配给整数变量。
另外:整数相除的结果从小数点后被切掉,举例:7/4=1
二进制系统 十六进制系 统
虽然人们以十进制系统思考和计算,但计算机仅认识0和1,可以表示为状态关和开。一 个状态(关或开代表一位)。考虑速度的原因,计算机通常接受一个由0和1组成的整包。
典型包的大小是8位(=一字节),6位或13位。对于计算机操作,使用二进制系统(数 字系统使用两个基本的0和1)或十六进制系统(数字系统使用字符0-9和A-F代表16)。
KRL中可使用反逗号(’)和二进制前缀B或十六进制前缀H表示二进制或十六进制整数。
D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 H 0 1 2 3 4 5 6 7 8 9 A B C D E F 10
长沙工控帮教育科技有限公司
2 变量和声明(续)
在KRL,可以有三种不同的途径将数字90分配给一个整数变量:
INTEG=90:十进制系统
INTEG=’B1011010’:二进制系统
INTEG=’H5A’:十六进制系统
Bin→Dec 二进制系统转换到十六进制系统如下:
Hex→ Dec 十六进制系统到十进制系统转换操作如下:
实数 以浮点形式表示,标准格式将一个数字分成固定点部分和一个指数。结果如下,举例 说明::
5.3 看作是 0.53000000E+01 -100 看作是 -0.10000000E+03
0.0513 看作是 0.51300000E-01
当使用实数值进行计算时,由于浮点后限制的位置数字和固有的错误,必须特别小心。
通常的代数法则是在所有情况下永远不要使用。根据代数法则,例如:
1/3X3=1
如果计算机执行该计算,可能的结果是0.99999999E+00,比较该数字和数字1可以看 出结果是错误的。对于机器人领域的特殊用法,可以产生足够的精度。考虑到等于实 数的逻辑测试,仅可在小的容许范围内进行。
允许分配给实数变量的例子:
REALNO1=-13.653 REALNO2=10
REALNO3=34.56E-12
如果将一个整数值分配给一个实数变量,则自动将类型转换为实数类型。根据以上的 说明变量REALNO2的值是10.0
布尔 布尔变量用于逻辑状态的说明(例如,输入/输出)。值仅有真或假。
STATE1=TRUE STATE2=FALSE
长沙工控帮教育科技有限公司
专家级编程
字符型 字符型变量可以代表符合ASCII字符规定的一个准确的字符。给一个字符型变量分配 的ASCII字符,必须位于括号(”)内。
CHAR1=”G”
CHAR2=”?”
有关存储输入字符串的信息,见节2.2.4。
2.2.3 阵列 术语“阵列“指的是相同数据类型对象的组合产生的一个数据对象;通过下标可以寻址 阵列中的独立的元素。声明如下
DECL INT OTTO[7]
阵列指针
您可以存储,例如,7个不同的整数在阵列OTTO[]中。通过指定相关的下标(第一个 下标永远是数字1),您可以访问阵列中每个单独的元素。
OTTO[1]=5: 数字5分配给第一个元素 OTTO[2]=10: 数字10分配给第二个元素 OTTO[3]=15: 数字15分配给第三个元素 OTTO[4]=20: 数字20分配给第四个元素 OTTO[5]=25: 数字25分配给第五个元素 OTTO[6]=30: 数字30分配给第六个元素 OTTO[7]=35: 数字35分配给第七个元素
可以将阵列OTTO[]想象为一个包含7个间隔的架子。根据以上的 分配,填充元素如下:
图2 一维阵列的表示
如果阵列中的所有元素都初始化为同一个数字,例如0,您不必要编程每个分配,可
长沙工控帮教育科技有限公司
2 变量和声明(续)
●阵列可能是任何数据类型。单独的元素也可能有复杂的数据类型(例如,阵列组成 的阵列)。
●仅整数型数据类型允许作为下标。
●除常量和变量外,算术表达式也允许作为下标(见节2.3.1)。
●下标起始值通常为1。
2维阵列 除已经讨论过的一维阵列,也就是说仅有一个下标,在KRL中还可以使用两维或三维 阵列。采用
DECL REAL MATRIX[7,3]
您可以声明一个两维5×4的阵列,包含5×4=20个实数元素。可以表达该阵列为5列和 4行的矩阵。程序顺序如下
I[3]=0
FOR COLUMN=1 TO 7 FOR ROW=1 TO 3
I[3]=I[3]+1
MATRIX[COLUMN,ROW]=I[3]
ENDFOR ENDFOR
根据元素在矩阵中的顺序分配值。得到下列矩阵分配:
图.3两维阵列的表示
长沙工控帮教育科技有限公司
专家级编程
3维阵列 三维阵列可以看作是一个接一个的一些两维矩阵。第三维指示矩阵所处位置的级别
(见图4)。一个三维阵列可简单地声明为一维或两维阵列,例如:
DECL BOOL ARRAY_3D[5,3,4]
初始化顺序如下:
FOR LEVEL=1 TO 3 FOR COLUMN=1 TO 5
FOR ROW=1 TO 4
ARRAY_3D[LEVEL,COLUMN,ROW]=FALSE ENDFOR
ENDFOR ENDFOR
图.4三维阵列的表示
长沙工控帮教育科技有限公司
2 变量和声明(续)
2.2.4 字符串
使用字符型数据类型,您仅可以存储一个独立的字符。要使用一串字符,例如字,
您只需简单地将一个一维阵列的数据类型定义为字符型:
DECL CHAR NAME[8]
如同通常一样,您可以寻址阵列NAME[ ]中的单个的元素,例如:
NAME[3]=”G”
G
当然,您也可以直接输入全部字符串:
NAME[ ]=”ABCDEFG”
分配阵列NAME[ ]的前七个元素为字母A,B,C,D,E,F和G:
A B C D E F G
2.2.5 结构
如果要组合不同的数据类型,阵列则不适合,必须使用联接的更多形式。使用声明 语句STRUC,预先定义好的不同数据类型或预定数据类型的组合构成一个新的复合数 据类型。
STRU 特殊情况,其它复合和阵列也可以构成复合的一部分。
复合使用的一个典型例子是标准数据类型POS。它由文件$OPERATE.SRC中声明的6个 实数值和2个整数值组成:
STRUC POS REAL X,,Y,Z,A,B,C,INT S,T
点分离 如果,例如您现在使用结构数据类型的一个POSITION变量,您可以使用分离点给个 别的元素分配值:
POSITION.X=34.4 POSITION.Y=-23.2 POSITION.Z=100.0 POSITION.A=90 POSITION.B=29.5 POSITION.C=3.5 POSITION.S=2 POSITION.T=6
集合 或使用所谓的集合共同分配值:
POSITION={X34.4,Y-23.2,Z100.0,A90,B29.5,C3.5,S2,T6}
长沙工控帮教育科技有限公司
专家级编程
● 集合的值可以是简单的常量或它们自己的集合。
● 不是必须在集合中指定结构中的所有组成。
● 成分的指定顺序不必依照它们定义的顺序。
● 集合中每个成分可能只包含一次。
● 在由结构组成阵列的情况下,一个集合定义一个单独的阵列元素的值。
● 结构类型的名称可在一个集合的开头指定-以冒号分开。
因此对于POS变量允许下列分配,例如:
POSITION={B100.0,X29.5,T6}
POSITION={A54.6,B-125.64,C245.6}
POSITION={POS:X230,Y0.0,Z342.5}
对于POS、E6POS、AXIS、E6AXIS和FRAME结构缺少的成分不能被改变。而对于其它集 合,则不存在的成分被设置为无效的成分。
建立您自己的结构变量的步骤使用下列例子解释:
在一个弧焊的子程序中,在变量S_PARA中转换下列信息:
REAL V_WIRE 焊丝速度 INT CHARAC 特征0...100%
BOOL ARC 带/不带弧 (用于模拟)
变量S_PARA必须由3个不同数据类型的元素组成。首先,必须建立一个满足这个要求的新 的数据类型:
STRUC WELDTYPE REAL V_WIRE,INT CHARAC,BOOL ARC
建立了一个名称为WELDTYPE的新的数据类型(WELDTYPE不是一个变量!)。WELDTYPE由 V_WIRE、CHARAC和ARC三个成分组成。您现在可以任何新数据类型的变量,例如:
DECL WELDTYPE S_PARA
这样您就建立了一个数据类型为WELDTYPE的变量S_PARA。可以通过点分开单独寻址各个 成分和通过集合-如上说明来寻址。
S_PARA.V_WIRE=10.2 S_PARA.CHARAC=66S_PARA.A RC=TRUE
长沙工控帮教育科技有限公司
2 变量和声明(续)
预定义结构
根据机器人轴1…6指定轴的运动,结构AXIS的成分A1...A6是角度值(旋转轴)或平 移值(平移轴)。
在结构E6AXIS中使用附加成分E1...E6可寻址外部轴。
在结构FRAME您可以定义空间的3个位置值(X,YandZ)和3个空间方位(A,B和C)。空 间中的一个点可以用术语位置和方位明确地被定义。
有的使用几个轴位置的机器人可以寻址一个和空间中的相同点,结构POS中的整数型 变量S和T用于明确地定义一个轴的位置。
更多信息可见[运动编程]的[运动命令]一节的状态(S)和Turn(T).
在结构E6POS使用成分E1...E6可寻址外部轴。
几何数据类型 AXIS,E6AXIS,POS,E6POS和FRAME的类型也称为几何数据类型,因为它们提供编程 师一个简单的方法用来说明几何关系。
更多信息见[运动编程]一章的 [不同坐标系的应用]一节。
2.2.6列举类型
列举数据类型有有限的常量组成。该常量可自由选择名称和由用户自定义。该数据 类型(列举变量)的改变仅可以在这些常量值之间变化。
这可以用基本系统变量$MODE_OP来解释,其中存储当前选择的操作模式。可选择模 式T1,T2,AUT和EX。
也可以将$MODE_OP声明为整数型变量,分配各模式一个数字,然后在$MODE_OP中存 储该数字,可是这样看起来不是太清楚。
ENUM 一个更好的解决方法是使用列举类型。在文件
$OPERATE.SRC中产生一个名称为MODE_OP的列举数据类型:
ENUM MODE_OP T1,T2,AUT,EX,INVALID
用于声明列举类型的命令因此称为列举。列举类型变量MODE_OP仅有值T1,T2,AUT,
EX或INVALID。该变量也使用关键字DECL声明:
DECL MODE_OP $MODE_OP
长沙工控帮教育科技有限公司
专家级编程
您现在可以使用一般分配命令,分配数据类型为MODE_OP的四个值其中的一个给列举 变量$MODE_OP ,为了与简单的常量相区分,在初始化或询问时,自定义列举常量前 缀“#”符号。例如:
#符号 $MODE_OP=#T1
使用ENUM,您现在可以产生任何自定义数据类型的数字。
长沙工控帮教育科技有限公司
2 变量和声明(续)
2.3 数据处理
要处理不同的数据对象,使用已制定的规则,可以有许多操作和函数。机器人编程语言的 能力依赖于允许的数据对象和对它们的处理能力。
2.3.1 操作
术语“操作”指的是一般数学操作,而不是象SIN(30)之类的函数,该函数提供300的正弦 值。在操作5+7中,5和7称为操作数,+则称为操作。
操作数 在每次操作中,编译器要检查操作数的合法性。例如,7-3是两个整数相减的合法操 作,而5+“A”则是整数和字符相加的不合法操作。
在许多操作中,例如5+7.1,也就是整数和实数相加,必须进行类型匹配,整数值5 被转换为实数值5.0。处理该主题的更多细节在各自的操作中讨论。
2.3.1.1算术操作
算术操作涉及的类型是整数型和实数型。在KRL中允许4个基本的算术操作(见表3)。
操作 说明
+ 加法或正号 减法或负号
* 乘法 / 除法
表3算术操作
如果两个操作数的数据类型都是整数则算术操作的结果为整数。如果整数相除的结 果不是整数,则小数点后的数据被去掉。如果两个操作数至少有一个是实数,则结 果的数据类型也可能是实数。(见表4)
操作数 整数 实数
整数 整数 实数
实数 实数 实数
表4算术操作的结果
长沙工控帮教育科技有限公司
专家级编程
下列程序例子用于说明以上问题:
DEF ARITH( )
;---声明部分--- INT A,B,C
REAL K,L,M
;---初始化部分---
;初始化时所有变量不分前后!
A=2 ;A=2
B=9.8 ;B=10 C=7/4 ;C=1 K=3.5 ;K=3.5
L=0.1E01 ;L=1.0 M=3 ;M=3.0
:---主程序部分--- A=A*C ;A=2
B=B-’HB’ ;B=-1 C=C+K ;C=5
K=K*10 ;K=35.0 L=10/4 ;L=2
L=10/4.0 ;L=2.5 L=10/4. ;L=2.5 L=10./4 ;L=2.5 C=10./4. ;C=3 M=(10/3)*M ;M=9.0 END
2.3.1.2几何操作
KRL中几何操作以冒号“:”表示。完成数据类型为FRAME和POS的操作数的框架联接
(逻辑操作)。
两个框架的联接是坐标系的通常转换。因此FRAME结构和POS结构的联接仅影响POS结 构内的框架。转换时成分S和T不受影响,因而不必再分配一个值,然而在POS操作和 FRAME操作中值X,Y,Z,A,B和C通常必须再分配一个值。
框架联接 框架操作是求左和右的值。最右边的结果的数据类型往往是操作数的数据类型(见 表5)。
左边操作数(参考CS) 操作 右边操作数(目标CS) 结果
POS : POS POS
POS : FRAME FRAME
FRAME : POS POS
长沙工控帮教育科技有限公司
2 变量和声明(续)
如果左边的操作数的数据类型是POS,进行类型匹配。POS结构指定的位置被转换为框 架。意思是系统检查该位置的刀具框架。
使用一个简单的例子解释几何操作机能的模式。(见图5)
在一间房间有一台桌子,房间坐标系定义为固定坐标系,其原点在房间的左前角。
桌子位置平行于房间的墙,桌子的左前角定位在距离前面墙600mm和左边墙450mm处,
桌子高800mm。
桌子上是一个立方体工件,工件坐标系的原点在工件的一个角,如图35所示。为让 零件在以后的操作中获得最优处理,工件坐标系Z轴方向向下。工件坐标系相对桌子 坐标系的位置是X=80mm,Y=110mm和Z=55mm。
图.5几何操作机能的模式
现在的任务就是定义工件坐标系和房间坐标系的相对关系。首先必须先定义下列框 架变量:
FRAME TABLE,WORKPIECE,BASE
房间坐标系已经由系统明确地指定。桌子坐标系和工件坐标系现在根据给定的约束 初始化。
TABLE={X450,Y600,Z800,A0,B0,C0}
WORKPIECE={X80,Y110,Z55,A-40,B180,C0}
长沙工控帮教育科技有限公司
专家级编程
使用几何操作得到工件坐标系和房间坐标系的相对关系 BASE=TABLE:WORKPIECE
在我们的案例中,BASE定义如下:
BASE={X530,Y710,Z855,A140,B0,C-180}
另一个可能是:
BASE={X530,Y710,Z855,A-40,B180,C0}
仅在附加成分TABLE和WORKPIECE的特殊情况下使用成分BASE,这是由于桌子坐标系 相对于房间坐标系不旋转。一般来说,成分的简单附加是不可能的!框架连接也是 不可交换的,意思是如果参考框架和目标框架交换,则结果一般也交换!
更多信息见[运动编程]一章的[不同坐标系的应用]一节。
另一个说明几何操作的例子是:不同坐标系和坐标系的联接在该例子中被寻址。为 了说明方位的变化,刀具中心点在各个坐标系中被移动,首先是在X方向的一个短距 离,然后是Y轴,最后是Z轴。
长沙工控帮教育科技有限公司
2 变量和声明(续)
DEF GEOM_OP( );
---声明部分 ---
EXT BAS(BAS_COMMAND:IN,REAL:IN)
DECL AXIS HOME: 变量HOME的类型为AXIS DECL FRAME MYBASE[2]: 阵列类型为FRAME : ---初始化---
BAS (#INITMOV,0) ;初始化速度,
;加速度 ,$BASE,$TOOL,等
HOME={AXIS:A10,A2-90,A390,A40,A530,A60};设置基本坐标系
$BASE={X1000,Y0,Z1000,A0,B0,C0}
REF_POS_X={X100,Y0,Z0,A0,B0,C0} ;参考点 REF_POS_Y={X100,Y100,Z0,A0,B0,C0}
REF_POS_Z={X100,Y100,Z100,A0,B0,C0} ;定义自己的坐标系 MYBASE[1]={X200,Y100,Z0,A0,B0,C180}
MYBASE[2]={X0,Y200,Z250,A0,B90,C0}:
---主程序部分--- PTP HOME ;$BASE坐标系中的运动 PTP $Base ;直接定位到原点$BASE-CS WAIT SEC2 ;等待2秒
PTP REF_POS_X ;x方向移动100mm PTP REF_POS_Y ; y方向移动100mm
PTP REF_POS_Z ; z方向移动100mm ; 在$BASE-CS坐标系中运动偏置MYBASE[1]
PTP MYBASE[1]
WAIT SEC2
PTP MYBASE[1]:REF_POS_X PTP MYBASE[1]:REF_POS_Y
PTP MYBASE[1]:REF_POS_Z ; 在$BASE-CS坐标系中运动偏置MYBASE[2]
PTP MYBASE[2]
WAIT SEC 2
PTP MYBASE[2]:REF_POS_X PTP MYBASE[2]:REF_POS_Y
PTPMYBASE[2]:REF_POS_Z ;在$BASE-CS坐标系中运动偏置MYBASE[1]:MYBASE[2]
PTP MYBASE[1]:MYBASE[2]
WAIT SEC 2
PTP MYBASE[1]:MYBASE[2]:REF_POS_X PTP MYBASE[1]:MYBASE[2]:REF_POS_Y
PTP MYBASE[1]:MYBASE[2]:REF_POS_Z ;在$BASE-CS坐标系中运动偏置 MYBASE[2]:MYBASE[1]
PTPMYBASE[2]:MYBASE[1]
WAIT SEC 2
PTP MYBASE[2]:MYBASE[1]:REF_POS_X PTP MYBASE[2]:MYBASE[1]:REF_POS_Y PTP MYBASE[2]:MYBASE[1]:REF_POS_Z PTP HOME
END
长沙工控帮教育科技有限公司
专家级编程
2.3.1.3关系操作
使用的关系操作列表在见表6,它可能组成一个逻辑表达式。比较的结果的数据类型 永远是布尔型,因为比较只可能是真或假。
操作 说明 允许的数据类型
== 等于 INT,REAL,CHAR,ENUM,BOOL
<> 不等于 INT,REAL,CHAR,ENUM,BOOL
> 大于 INT,REAL,CHAR,ENUM
< 小于 INT,REAL,CHAR,ENUM
>= 大于或等于 INT,REAL,CHAR,ENUM
<= 小于或等于 INT,REAL,CHAR,ENUM
表6关系操作
程序执行指令中可使用比较指令(见节5),比较的结果为布尔变量。
等于或不等于仅限于实数时成立,由于比较的值在计算中存在圆整误差,所以同样 的代数公式可以得出不同的值。
●允许INT,REAL和CHAR型操作数的组合。
●ENUM类型仅可以与相同的ENUM类型组合。
●ABOOL类型仅可以与相同的BOOL类型组合。
数字值(INT,REAL)和字符值(CHAR)可能进行比较,因为每个ASCII字符都对应一个 ASCII代码。该代码是一个定义了字符序列中的字符顺序的数字。
在它们的声明中,列举类型的常量以它们出现的顺序编号,关系操作指的则是这些 编号数字。
允许简单的和复杂的比较,举例说明如下:
…
BOOL A,B
长沙工控帮教育科技有限公司
2 变量和声明(续)
2.3.1.4逻辑操作
这些操作用于执行布尔变量的逻辑操作,常量和简单的逻辑表达式,看作是关系操 作组成的,例如,表达式
(A>5)AND(A<12)
仅当A的范围是5和12之间时,值为真。这样的表达式在结构中频繁使用来检查程序 的执行(见节5)。逻辑操作列表见表7中
操作 操作数数量 说明
NOT 1 非
AND 2 逻辑与
OR 2 逻辑或
EXOR 2 异或
表7逻辑操作
逻辑操作的操作数类型必须是布尔型,结果也必然是布尔型。逻辑操作的不同结果 见表8。
操作 NOT A A AND B A OR B A EXOR B A=TRUE B=TRUE FALSE TRUE TRUE FALSE A=TRUE B=FALSE FALSE FALSE TRUE TRUE A=FALSE B=TRUE TRUE FALSE TRUE TRUE A=FALSE B=FALSE TRUE FALSE FALSE FALSE
表8逻辑操作真值表
逻辑操作举例:
…
BOOLA,B,C
…
A=TRUE :A=TRUE
B=NOT A :B=FALSE
C=(A AND B) OR NOT (B EXOR NOT A) :C=TRUE A=NOT NOT C :A=TRUE
…
长沙工控帮教育科技有限公司
专家级编程
2.3.1.5位操作
使用位操作(见表9),则数字的单独的位进行逻辑操作可组合成数字,单独的位的操 作组合可看作是两个布尔值的逻辑操作组合,位的值为1看作是真,值0则为假。
数字5和12 一位一位与的结果为4,一位一位或的结果为13,一位一位异或的结果为 9:
一位一位反不是简单的所有位取反,而B_NOT是操作数加1而后符号改变,例如:
B_NOT 10=-11 B_NOT -10=9
使用位操作,例如使数字I/O信号组合(见6.3).
操作 操作数数量 说明
B_NOT 1 一位一位反
B_AND 2 一位一位与
B_OR 2 一位一位或
B_EXOR 2 一位一位异或
表9逻辑位操作
通过整数ASCIIA代码,ASCII字符也可以被寻址,操作数的数据类型除INT外还可能 是CHAR型。而结果永远是INT类型。
长沙工控帮教育科技有限公司
2 变量和声明(续)
位操作使用的举例:
… INT A
…
A=10 B_AND 9 :A=8 A=10 B_OR 9 :A=11 A=10 B_EXOR 9 :A=3 A=B_NOT 197 :A=-198 A=B_NOT ’HC5’ :A=-198 A=B_NOT ’B11000101’ :A=-198
A=B_NOT “E” :A=-70
…
假设我们定义了一个8位数字量的输出。您可以通过整数型变量DIG来寻址。要设置位0,
2,3和7,可简单地编程如下 设置位 DIG=’B10001101’B_OR DIG
所有其它位保持不变。
如果要屏蔽位1,2和6,编程 屏蔽位 DIG=’B10111001’B_ANDDIG
所有其它位保持不变。
您可以简单地使用位操作函数检查单独的位是否输出,表达式为 滤出位 (’B10000001’B_ANDDIG)==’B10000001’
位0和7设置为TRUE,其它位为FALSE.
如果您仅想测试至少位0和7之一设置为1,则一位一位与的结果必须大于0:
(’B10000001’B_ANDDIG)>0
长沙工控帮教育科技有限公司
专家级编程
2.3.1.6 操作优先级
如果使用包含几个操作的复杂的表达式,您必须考虑单独操作的不同的优先级(见 表10),因为不同的表达式以它们的优先级顺序执行。
优先级 操作 1 NOT B_NOT 2 * / 3 + - 4 AND B_AND 5 EXOR B_EXOR 6 OR B_OR
7 == <> < > >= <=
表10操作优先级
一般规则:
首先处理相等的表达式。
不相等的表达式以它们的优先级顺序求值。
逻辑操作和相同优先级的操作从左到右执行。
例:
… INT A,B BOOL E,F
… A=4 B=7 E=TRUE F=FALSE
…
E=NOT E OR F AND NOT(-3+A*2>B) ;E=FALSE A=4+5*3-B_NOT B/2 ;A=23 B=7B_EXOR 3 B_OR 4 B_EXOR 3 B_AND 5 ;B=5 F=TRUE==(5>=B)AND NOT F ;F=TRUE
…
长沙工控帮教育科技有限公司
2 变量和声明(续)
2.3.2 标准函数
计算特定的数学问题,在KRL中预定了许多标准函数(见表e11)。它们可不需声明而直接 使用。
说明 函数 函数的数
据类型
函数值的范围 函数的数 据类型
结果的范围
绝对值 ABS(X) REAL --∞…+∞ REAL 0…+∞
平方根 SQRT(X) REAL 0…+∞ REAL 0…+∞
正弦 SIN(X) REAL --∞…+∞ REAL -1…+1 余弦 COS(X) REAL --∞…+∞ REAL -1…+1 正切 TAN(X) REAL --∞…+∞* REAL --∞…+∞
反余弦 ACOS(x) REAL -1…+1 REAL 00…180 反正切 ATAN2(Y,X) REAL --∞…+∞ REAL -900…+900
*900的倍数,也就是说.X≠(2k-1)*90,K∈N 表11算术标准函数 绝对值 ABS(X)函数计算X的绝对值,例如:
B=-3.4
A=5*ABS(B): A=17.0 平方根 SQRT(X) 计算数字X的平方根,例如:
A=SQRT(16.0801): A=4.01 正弦、余弦、正切
三角函数SIN(X),COS(X)和TAN(X)计算角度X的正弦、余弦、正切,例如:
A=SIN(30) ;A=0.5 B=2*COS(45) ;B=1.41421356 C=TAN(45) ;C=1.0
±900和±900的倍数(±2700,±4500,±6300...)的正切值是无限大。如果要计算这些 值则会产生一个错误消息。
反余弦 ACOS(X)是函数COS(X)的逆运算:
A=COS(60) ;A=0.5 B=ACOS(A) ;B=60
反正弦 对于正弦的逆运算,即反正弦没有标准函数,然而根据关系SIN(X)=COS(900--X)可以很 容易计算出该值。
A=SIN(60) ;A=0.8660254 B=90-ACOS(A) ;B=60
反正切 角度的正切值指的是正三角形的邻边(X)除以对边(Y)。使用正切函数,如果知道三 角形两边的长度,也可以计算出邻边和斜边之间的夹角T
对于整圆,分量X和Y的符号是很重要的。如果仅考虑商,使用反正切函数只能计算00到 1800之间的角度。所有的袖珍计数器则是:反正切的正值对应角度00到900,负值对应角 度900到1800。
长沙工控帮教育科技有限公司
专家级编程
对于X和Y,角度所处的象限可以明确地定义值的符号(见图6),因此可以计算第III 和IV象限的角度。要计算函数ATAN2(Y,X)的反正切,这两个条件是必要的,例如:
A=ATAN2(0.5,0.5) :A=45 B=ATAN2(0.5,-0.5) :B=135 C=ATAN2(-0.5,-0.5) :C=225 D=ATAN2(-0.5,0.5) :D=315
图.6函数ATAN2(Y,X)中X和Y的使用
更多信息见[子程序和函数]一章。
长沙工控帮教育科技有限公司
2 变量和声明(续)
2.4 系统变量和系统文件
处理复杂的机器人应用的一个重要的前提条件是一个自由的和容易使用的可编程控 制器。
为了满足该需求,机器人控制器的功能性必须在机器人语言中可编程。机器人控制 器全部的功能仅当控制参数完整地和集成在机器人程序中时才可使用。通过预定系 统变量和文件,在KRC...中得到了最好的解决。
预定变量的例子是$POS_ACT(当前机器人位置),$BASE(基本坐标系)或$VEL.CP(CP速 度)。更详细的说明和。 所有预定变量的列表见培训手册。
所有预定变量的列表见单独资料[系统变量]。
系统变量被完整地集成在KRL的变量概念中。系统变量拥有相对应的数据类型,可以 象其它变量一样可在程序中读和写,没有数据的类型的限制。当前机器人的位置,
例如,仅可以读而不能写。控制器检查和限制该状态。
基于安全观念的允许,您有可能会写系统数据。从KCP或编程系统中可以装载和改变 大量的系统数据,这样就建立一个宽范围的诊断能力
写系统变量的例子是$TIMER[ ]和$FLAG[ ]。
计时器 16个计时器变量$TIMER[1]…$TIMER[16]可用于测量时间顺序,可用作“秒表”。开 始和停止计时使用系统变量$TIMER_STOP[1]…$TIMER_STOP[16]:
$TIMER_STOP[4]=FALSE 开始计时器4,举例。
$TIMER_STOP[4]=TRUE
开始计时器4。使用一般变量分配可在任何时候复位有关的计时器变量。举例来说:
$TIMER[4]=0
如果计时器变量值从负向正变化,对应的标记则设置为TRUE(暂停条件),举例来说:
$TIMER_FLAG[4]=TRUE
当控制器启动时,所有的计时器变量预设置为0,标记
$TIMER_FLAG[1]…$TIMER_FLAG[16] 预设置为FALSE,变量$TIMER_STOP[1]¼
$TIMER_STOP[16] 预设置为TRUE。
计时器变量的单位是毫秒(ms)。$TIMER[1]…$TIMER[16]和$TIMER_FLAG[1]¼
$TIMER_FLAG[16]以12ms循环更新。
长沙工控帮教育科技有限公司
专家级编程
标记 1024个标记$FLAG[1]…$FLAG[1024]被用作全局标记。这些BU布尔变量预设置为FALSE。
您可以随时在用户界面上通过“监视”菜单看标记的当前值。
循环标记 KRC...中可用32个循环标记$CYCFLAG[1]…$CYCFLAG[32],控制器启动后预设为FALSE。
机器人中标记仅是循环被激活。在提交文件中允许循环标记,但是它们不循环求值。
循环标记可在子程序、函数和中断子程序中定义和激活。
$CYCFLAG[1]…$CYCFLAG[32]的数据类型为BOOL型。任何布尔表达式可分配给循环标记。
下列是允许的:
G布尔系统变量
G在数据表中声明和初始化过的布尔变量。
不允许的是
G函数返回的布尔值 语句
$CYCFLAG[10]=$IN[2] AND $IN[13]
布尔表达式“$IN[2]AND$IN[13]”循环求值。例如,一旦输入12或输入13变化,
$CYCFLAG[10]也变化,上述表达式执行后与程序指针的位置无关。
定义过的所有的循环标记保持有效直到选择一个模态或通过复位进行程序块选择。所有 的循环标记保持有效直到程序的最后。
更多信息见[中断处理]一章的 [循环标记的使用]一节。
$符号 预定变量一般选择一个容易记忆的名称。以$符号开始和有意义的英文缩写组成。它们象 一般变量一样处理,所以您不必记忆任何不寻常的命令和稀有的选项。
为避免发生混乱,您在声明自己的变量的时候应该以$符号开头。
有的预定变量针对整个KRC...控制器(例如$ALARM_STOP用于定义输出到到PLC的急停信 号PLC).其它,然而仅用于机器人(例如$BASE用于基本坐标系)。
长沙工控帮教育科技有限公司
2 变量和声明(续)
机器人驱动器中有关控制的数据存储在目录“Steu”中,有关机器人的数据存储在目录
“R1”中,并可在KUKA GUI上显示。
图7KUKA图形用户界面上的不同级别
当编程KRC...,您可以建立程序文件和数据表。程序文件是数据定义和可执行指令。而 数据表仅包含数据定义和可能的初始化。
更多信息见[数据表]一章。
除了编程期间建立的数据表外,在KRC...中还有KUKA定义的和控制软件一起的数据表。
这些数据表被称为预定数据表,主要包含预定变量。
您自己并不删除和建立预定数据表,当软件安装时自动产生,然后永远可以使用。就象 预定数据的名称一样,预定数据表的名称也以$符号开始。
KRC...中存在以下预定数据表:
● $MACHINE.DAT
是预定数据表,包含专有的系统变量。适配控制器和所连接机器人(运动信息,控制参 数等)的机床数据。控制系统和机器人系统中都有一个$MACHINE.DAT,您不可以新建或 删除现存的。
例如:
$ALARM_STOP 急停信号 (控制器特有)
$NUM_AX 机器人轴数 (机器人特有)
● $CUSTOM.DAT
仅在控制系统中存在的数据表。包含可以配置或参数化特定控制函数的数据。编程师 仅可以改变预定变量的值。不可以新建或删除现存的。
例如:
$PSER_1 串行接口1的协议参数
$IBUS_ON 激活可选的联络母线组
长沙工控帮教育科技有限公司
专家级编程
● $CONFIG.DAT
KUKA预定的数据表,不包含任何系统变量,然而,在控制级和机器人级都有一个
$CONFIG.DAT可用。其中可定义长时间有效的变量、结构、通道和信号,对许多程序普 通重要。
数据表分为以下几个程序块:
-- BAS -- AUTOEXT -- GRIPPER -- PERCEPT -- SPOT
A10 A50 A20
-- TOUCHSENSE -- USER
用户的全局声明应该输入USER程序块,因为仅该处的声明在以后的软件升级中被转移。
● $ROBCOR.DAT
文件$ROBCOR.DAT包含特定机器人的机器人动态模型的数据。在轨迹计划编排中需要这 些数据。在文件中您不可以新建一个新变量或删除现存的。
表12 预定数据表的摘要
数据表 系统 值分配
数据表 控制 机器人 at by
$MACHINE.DAT Y Y 试运转 KUKA/user
$CUSTOM.DAT Y 试运转 user/KUKA
$CONFIG.DAT Y Y 单元安装或变换 user/KUKA
$ROBCOR.DAT Y 运输 KUKA
表12 KRC...中预定的数据表
长沙工控帮教育科技有限公司
2 变量和声明(续)