前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KUKA子程序/函数怎么建立和使用方法

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

作者头像
用户4442670
发布2022-06-29 16:29:06
3.1K0
发布2022-06-29 16:29:06
举报
文章被收录于专栏:机器人小农机器人小农

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)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器人小农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档