KUKA子程序/函数怎么建立和使用方法

2022-06-29 16:29:06 浏览数 (1)

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)

0 人点赞