库卡机器人编程之变量及程序命名规范解析
版权归原作者所有,如有侵权,请与我联系删除
作为篇外话,也许有人好奇前面的文章我为什么弄成付费阅读而这篇却免费。首先,运维这个公众号以及出版《KUKA工业机器人基础入门及案例精析》纯粹处于个人兴趣,并未以此来谋利及发家致富,截至目前为止,实话实话,完全跟个人投入不成比(公众号营收不足千元),此外耗费个人大量空余时间😂.作为入坑快10年的老腊肉,也算经历过不少,真正搞机的不如倒买倒卖、会了徒弟饿死了师傅的现象不足为怪。所以,之前开通几篇付费文章就想看看到底有多少人愿意为别人的经验分享而买单,很感谢那些支持我的人。同时,希望大家明白知识无价,别人的知识经验不是凭空就有的,也是在九路十八弯下积累而来的,拒绝伸手党。台上一分钟,台下十年功,所以请理解那些因兴趣情怀来经营公众号或直播的搞技同行,多些支持,少些误解(如果愿意,记得转发打赏)。作为直男我想说,如果你也"眼红"这些真正想做事的人,欢迎加入自媒体来传经授道。书山有路勤为径,机海无涯苦作舟。
关于变量命名对于编程者都有自己的习惯,而别人却不一定懂得或理解,所以对于一个公司必须有统一的规范,否则调试编程人员需要去适应其他编程调试人员。基于之前在GB公司的工作经验,他们在公司标准化方面确实做得成熟,正是那段经历让我收获颇多。后面我也会分享Excel及Excel VBA或者Python在标准化上面的示例。(本文只是个人习惯,不代表其他人)
1.1 变量命名规则
KRL是KUKA的编程语言,在对机器人进行编程时,变量是在机器人程序运行中出现的各种计算值的存储器。每个变量都属于一个专门的数据类型,在应用前必须声明数据类型;变量按照存储位置可划分为局部变量和全局变量。一个全局变量,适用于所有程序。一个局部变量建立于某程序模块中,因此仅适用于此程序模块。变量定义规则如下:
①变量名称长度***多允许24个字符。
②变量名称允许含有字母 (A ~ Z)、数字 (0 ~ 9) 以及特殊字符"_" 和"$"。
③变量名称不允许以数字开头。
④变量名称不允许使用系统关键词。
⑤变量名称不区分大小写(但还是建议使用驼峰规则来定义变量)。
⑥变量命名***好没有下划线,推荐使用驼峰命名规则。当变量没有下划线时,可以在KCP快速访问变量,而且没必要变量名中是否有下划线。
⑦变量应根据其数据类型添加前缀,并且其名称应以简洁的方式简短地说明其功能
1.1.1 变量名称
1.输入输出信号变量:
①单个输入信号 (1 位)-以前缀i开始表示单个输入信号:
SIGNAL iVacuumOk $IN[1]
②多个输入信号(> 1 位)-以前缀gi开始表示输入信号组:
SIGNAL giSt12PlateType $IN[1281] TO $IN[1296]
③单个输出信号 (1 位)-以前缀o开始表示单个输入信号:
SIGNAL oErrorTarget $OUT[1265]
④多个输出信号(> 1 位)-以前缀go开始表示输出信号组:
SIGNAL goStartValueEnc1 $OUT[705] TO $OUT[721]
⑤模拟输入信号-以前缀ai开始表示模拟输入信号:
SIGNAL aiWeldVoltage $ANIN[1]
⑥模拟输出信号-以前缀ao开始表示模拟输出信号:
SIGNAL aoActPower $ANOUT[1]
2.布尔型变量-以前缀b开始表示布尔类型:
DECL BOOL bGripperEmpty= TRUE
3.有符号整形变量-以前缀z开始表示布尔类型:
DECL INT zTarget = 2
4.单精度浮点类型变量-以前缀r开始表示布尔类型:
DECL REAL rCenterOffset= 0.0
5.frame型变量-以前缀f开始表示布尔类型:
DECL frame fStackCorrection[2]
6.枚举型变量-以前缀e开始表示布尔类型:
DECL ENUM ePostion HOME,STACK12,STACK34,CULLET,DROPOFF_CONV,RAZING
DECL ePostion POSITION = #HOME
7.结构体类型变量-以前缀s定义结构体类型但变量定义前无任何前缀:
DECL STRUC sRackData INT nActType,…
DECL sRackData Stack[2]
Stack[1]= {nActType 1,…}
8.POS / AXIS/E6POS/E6AXIS位置类型变量-以前缀x定义变量:
①计算获得的变量-以前缀mx定义变量:
DECL POS mxAfterTouched[2]
②通过示教获得的位置变量-以前缀x定义变量:
DECL E6POS xStack12A = {X … }
9.字符及字符串类型变量-以前缀s定义变量:
DECL CHAR sCharacter= "A"
1.1.2 基本准测
1.对于所有变量类型,常量前面都带有c,然后紧接着变量前缀(见1.1.1):
DECL INT czCompMin = 30
2.对于所有变量类型,局部变量均以l (local)开头:
DECL INT lzCompMin = 30
3.对于所有变量类型,运行过程变量前面都带有一个n:
DECL INT nzActStack
4.对于通过外部信号插入程序的所有变量类型,若为输入信号,则第二个字符为i;若为输出信号,则第二个字符为o:
DECL BOOL biProgramEnd= FALSE
DECL INT zoPlateType = 1
5.坐标点/坐标位置命名规则必须保持标准化的点名称,以使运动易于阅读。
⑴起点/ 终点:例如xHomeA,xStack12A,等.
①从一个工站到另一个工站的运动永远不会使用起点。
②点的名称总是指定位置。
⑵从一个工站到另一个工站的运动:
每个起点基本上都有两条通向每个目标点的路径,只从Home位开始的这些工站除外:
① ServicePosition ②Cullet1 ③ Cullet2
例如:沿着路径A从原点Home到工站Stack12的运动路径: Home_Stack12(#A)
①起始预备点: xHome_Stack12A1 (***接近起点的点或距离终点***远的点)
②中间点: xHome_Stack12A2(注释掉,如果没有必要)
③中间点: xHome_Stack12A3 (注释掉,如果没有必要)
④终点预备点: xHome_Stack12A4 (距离终点***近的点)
⑤终点: xStack12A
例如:沿着路径A从工站Stack12到工站Stack34的运动路径: Stack12_Stack34(#A)
①起始预备点: xStack12_Stack34A1 (***接近起点的点或距离终点***远的点)
②中间点: xStack12_Stack34A2 (注释掉,如果没有必要)
③中间点: xStack12_Stack34A3 (注释掉,如果没有必要)
④终点预备点: xStack12_Stack34A4 (距离终点***近的点)
⑤终点: xStack34A
例如:沿着路径B从工站Stack12到工站Stack34的运动路径: Stack12_Stack34(#B)
①起始预备点: xStack12_Stack34B1 (***接近起点的点或距离终点***远的点)
②中间点: xStack12_Stack34B2 (注释掉,如果没有必要)
③中间点: xStack12_Stack34B3 (注释掉,如果没有必要)
④终点预备点: xStack12_Stack34B4 (距离终点***近的点)
⑤终点: xStack34B
1.1.3 变量位置/路径:
1. 必须在全局系统文件\R1\System\$Config.Dat中声明对外部设备或站的输入和输出
2. 全局变量必须在\R1\Program\Dat文件夹中的相应数据类型文件中声明,
例如,必须在文件b_bool.dat中声明一个布尔变量。
数据文件 说明
b_bools.dat 存放所有用户定义的全局Bool类型变量
z_intergers.dat 存放所有用户定义的全局Int类型变量
r_reals.dat 存放所有用户定义的全局Real类型变量
f_frames.dat 存放所有用户定义的全局frame类型变量
Structs.dat 存放所有用户定义的全局Struc类型变量
e_enums.dat 存放所有用户定义的全局Enum类型变量
x_Points_Movements.dat 存放所有直接运动或间接运算的全局且固定位置点变量
mx_Points.dat 存放所有可变的全局位置点类型变量
Strings.dat 存放所有用户定义的全局CHAR类型变量(如:报警信息)
3. 尽可能避免使用常量,而应使用变量.
4. 运动点:
①外部计算或模拟的点将传输到全局公共“DA文件”。点坐标和相关参考空间参数
(base,TOOL)必须在文件x_points_movements.dat中全局声明。
②计算和计算的点也存储在单独的全局公共“DAT文件”中。点坐标和相关参考空间参数(base,TCP)必须在以下文件中全局声明:x_points.dat
③可变点数据必须在mx_points.dat中声明。
1.2 子程序及函数
⑴ fl前缀: 局部函数
⑵ ul前缀: 局部子程序
⑶ ip前缀: 中断程序
⑷ o前缀: 将输出变量写入控制器输出信号的函数
⑸ i前缀: 从控制器输入信号读取输入变量的函数
了解更多机器人咨询请点击:库卡工业机器人