HI各位小伙伴你们好,又到了小农说机器人的时间了。前段时间有人反映说小农越来越懒了,推文也不写技术文章了。听得我是十分的惭愧。所以今天必须来点没啥技术含量的。
kuka
子程序和函数
任何一个程序猿在头发掉光以前都应该学过了什么是子程序和函数。在机器人领域这个概念其实没那么的清晰,kuka机器人当中任何一个程序都可以调用其它的程序,或者这里我们叫做模块,编程人员可以设置一个模块为主程序,哪怕他的名字叫做子程序。
当然还区分全局子程序和局部子程序
全局顾名思义就是谁都能调用的程序叫全局子程序。
局部就是指写在某个模块下面的程序,叫做局部子程序,这个程序只能在该模块下使用。
那么函数这里可以叫做功能块,就是不能执行运动指令的模块并且不能单独运行的功能块。或者简单点叫功能。它没有dat文件,而且会有一个返回值给调用它的程序。
当然也分为全局函数和局部函数啦。
1
子程序/函数
代码语言:javascript复制DEF mainPROG( )
;此为主程序
...
END
_______________________________________
DEF PROG1( )
;此为局部子程序 1
...
END
_______________________________________
DEF PROG2( )
;此为局部子程序 2
...
END
_______________________________________
DEF PROG3( )
;此为局部子程序 3
...
END
先来看看局部子程序,写在模块END行后面的就是局部子程序啦,在整个文件中子程序是可以被主程序调用的。并且可以互相调用。还可以进行参数的传递。
再来看看局部函数其实就是在DEF后面加上了FCT,并且给予这个函数的返回类型。你可以把他想象成一个会运算的变量。
因为使用的时候需要用一个同类型的变量接收它的返回值
代码语言:javascript复制DEF mainPROG( )
;此为主程序
INT I
I = PROG2( )
END
_______________________________________
DEFFCT BOOL PROG1( )
;此为局部子程序 1
...
ENDFCT
_______________________________________
DEFFCT INT PROG2( )
;此为局部子程序 2
...
ENDFCT
_______________________________________
DEFFCT REAL PROG3( )
;此为局部子程序 3
...
ENDFCT
了解了局部子程序在看全局子程序就想到容易了。把每个独立的模块直接当成子程序就噢可了
代码语言:javascript复制DEF 子程序( )
;这是主程序
主程序( )
END
代码语言:javascript复制DEF 主程序( )
;这是子程序
END
所以全局子程序可以很自由的进行调用了。那么在看看全局函数
代码语言:javascript复制DEF MAINPROG( )
BOOL B1
B1 = FUNC1( )
END
代码语言:javascript复制DEFFCT BOOL FUNC1()
ENDFCT
1
子程序和函数的使用
好像很多朋友更喜欢实例演示,所以话不多说,直接上
代码语言:javascript复制DEF MAIN1( )
;这是一个相机的拍照抓取程序
PTP HOME
LOOP ;主循环
PICK1();调用抓取程序1
DROP1();调用放置程序1
PICK2();调用抓取程序2
DROP1();调用放置程序1
ENDLOOP
END
代码语言:javascript复制DEF PICK1( )
;这是抓取程序1
PTP P1
POS_N = CAMERA(1);调用相机拍照,传入拍照程序号,返回位置信息
XPN = PDAT(POS_N);调用计算程序,传入相机获取的位置信息,返回给xpn
PTP XPN;运行到xpn(计算完成的位置)进行抓取工作
GRIP(#CLO)
。。。
END ;完成后返回主程序
_______________________________________
DEFFCT POS PDAT(N);每个程序的计算不同因此建立局部。。。
P.X = N.X P.X
P.Y = N.Y P.Y
P.Z = N.Z P.Z
P.A = N.A P.A
P.B = N.B P.B
P.C = N.C P.C
RETURN P
ENDFCT
代码语言:javascript复制DEF PICK2( )
;这是抓取程序2
PTP P1
POS_N = CAMERA(2);调用相机拍照,传入拍照程序号,返回位置信息
XPN = PDAT(POS_N);调用计算程序,传入相机获取的位置信息,返回给xpn
PTP XPN;运行到xpn(计算完成的位置)进行抓取工作
GRIP(#CLO)
。。。
END ;完成后返回主程序
_______________________________________
DEFFCT POS PDAT( );每个程序的计算不同因此建立局部
。。。
RETURN P
ENDFCT
代码语言:javascript复制DEF DROP1()
;这是放置程序1
PTP P1
XPN = DDAT( )根据抓取得便宜计算放置的便宜量
PTP XPN
GRIP(#OPN)
。。。
END ;放置完成回到主程序
_______________________________________
DEFFCT POS DDAT( );每个程序的计算不同因此建立局部
。。。
RETURN P
ENDFCT
代码语言:javascript复制DEFFCT POS CAMERA(N:IN);为更多程序使用所以建立为全局
;这是相机触发程序
$OUT[N] = TRUE
WAIT FOR $IN[N]==TRUE
RETURN SIGNAL_N
ENDFCT
代码语言:javascript复制DEF GRIP(N:IN)
SWITCH N
CASE #OPN
OPEN( )
CASE #CLO
CLOS( )
ENDSWITCH
END
DEF OPEN( )
$OUT[2]=TRUE
WAIT FOR $IN[2]
END
DEF CLOS( )
$OUT[2]=FALSE
WAIT FOR NOT $IN[2]
END
1
程序解释
洋洋洒洒写了一堆代码,不过聪明的你应该能看出来这是一个程序的框架,所以该如何解释你看着来吧
另外KUKA是有很多的系统函数的,这些函数不需要我们来写,直接拿来用就是了
绝对值ABS(x)
根SQRT(x)
正弦SIN(x)
余弦COS(x)
正切TAN(x)
反余弦ACOS(x)
反正切ATAN2(y,x)
声明时确定字符串长度StrDeclLen(x)
初始化后的字符串变量长度StrLen(x)
删除字符串变量的内容StrClear(x)
扩展字符串变量StrAdd(x,y)
比较字符串变量的内容StrComp( x,y,z)
复制字符串变量StrCopy(x,y)
生成信息Set_KrlMsg(a,b,c,d)
生成对话Set_KrlDLg(a,b,c,d)
检查信息Exists_KrlMsg(a)
检查对话Exists_KrlDlg(a,b)
删除信息Clear_KrlMsg(a)
读取信息缓存器Get_MsgBuffer(a)