应用案例
p1 | p2 | p3 | p4 | p5 |
---|---|---|---|---|
x560 | x660 | x760 | x860 | x960 |
y-1022 | y-1022 | y-1022 | y-1022 | y-1022 |
z2111 | z2111 | z2111 | z2111 | z2111 |
kukaPTP home vel=100% DEFAULT PTP P1 vel=100% PDAT1 TOOL[0] Base[0] xp2=$pos-act xp2.x =xp2.x+100 PTP P2 vel=100% PDAT1 TOOL[0] Base[0] xp3=$pos-act xp3.x =xp3.x+100 PTP P3 vel=100% PDAT1 TOOL[0] Base[0] xp4=$pos-act xp4.x =xp4.x+100 PTP P4 vel=100% PDAT1 TOOL[0] Base[0] xp5=$pos-act xp5.x =xp5.x+100 PTP P5 vel=100% PDAT1 TOOL[0] Base[0]
使用fold折叠
kukaPTP home vel=100% DEFAULT ;fold PTP P1 vel=100% PDAT1 TOOL[0] Base[0] PTP P1 vel=100% PDAT1 TOOL[0] Base[0] ;fold PTP P2 vel=100% PDAT1 TOOL[0] Base[0] xp2=$pos-act xp2.x =xp2.x+100 PTP P2 vel=100% PDAT1 TOOL[0] Base[0] ;fold PTP P3 vel=100% PDAT1 TOOL[0] Base[0] xp3=$pos-act xp3.x =xp3.x+100 PTP P3 vel=100% PDAT1 TOOL[0] Base[0] ;fold PTP P4 vel=100% PDAT1 TOOL[0] Base[0] xp4=$pos-act xp4.x =xp4.x+100 PTP P4 vel=100% PDAT1 TOOL[0] Base[0] ;fold PTP P5 vel=100% PDAT1 TOOL[0] Base[0] xp5=$pos-act xp5.x =xp5.x+100 PTP P5 vel=100% PDAT1 TOOL[0] Base[0] ;endfold
函数 | 说明 |
---|---|
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) | 读取信息缓存器 |
kuka定义变量 Decl krlmsg_t mess #定义 Decl krlmsgpar_t para[3] #参数传递 Decl krlmsgopt_t option #信息选项 int handle #生成消息 程序使用 mess = {modul[]"kuka",.Nr001,msg_txt[]"it is a"} #作者,编号,提示内容 handle= set_krlmsg(#notify,mess,para[],option) 其中#notify表示要生成提示信息 如果要生成其他类型信息, #quit :确认信息;#state :状态信息;#waiting :等待信息 option={vl_stop true, clear_p_reset true, clear_p_saw true, log_to_db false} vl_stop: 生成信息时,是否打断预进指针,true为打断 clear_p_reset:生成信息后,进行程序复位或退出程序操作,这条信息是否删除, true 为删除 clear_p_saw :生成信息后,进行语句行选择操作后,这条信息是否删除, true 为删除 log_to_db:是否将信息记录到数据库中,true 为记录 para[1]={par_type#value} para[1].par_int=counter 其中parameter[1]表示%1;#value:表示%1使用了;int和counter:表示%1从一个叫做counter的整型变量获得数值 对于第二个占位符%2和第三个占位符%3,例子未使用,所以 para[2]={par_type #empty} para[3]={par_type #empty} 其中para[2]和para[3]分别表示%2和%3;#empty:表示未使用。因为这两个占位符没有使用,所以也不需要规定他们从哪里获得数值
kuka定义变量 DEF msg_notify() Decl krlmsg_t mess #定义 Decl krlmsgpar_t para[3] #参数传递 Decl krlmsgopt_t option #信息选项 int notify_address #生成消息 程序使用 mess = {modul[]"kuka",Nr 001,msg_txt[]"We start to run"} #作者,编号,提示内容 para[1]={par_type #empty} para[2]={par_type #empty} para[3]={par_type #empty} option ={vl_stop false,clear_p_reset false,clear_p_saw false,log_to_db false} notify_address= set_krlmsg(#notify,mess,para[],option) halt END
kuka定义变量 DEF msg_notify_var() Decl krlmsg_t mess #定义 Decl krlmsgpar_t para[3] #参数传递 Decl krlmsgopt_t option #信息选项 int notify_address,num #生成消息 num=7 程序使用 mess = {modul[]"kuka",Nr 1357,msg_txt[]"We start to move No %1 workpiece"} #作者,编号,提示内容 para[1]={par_type #value} para[1].par_int=num para[2]={par_type #empty} para[3]={par_type #empty} option ={vl_stop false,clear_p_reset false,clear_p_saw false,log_to_db false} notify_address= set_krlmsg(#notify,mess,para[],option) halt END
kuka定义变量 DEF msg_quit() Decl krlmsg_t mess #定义 Decl krlmsgpar_t para[3] #参数传递 Decl krlmsgopt_t option #信息选项 int quit_address,num1,num2 #生成消息 bool check num1=2 num2=5 程序使用 mess = {modul[]"kuka",Nr 1358,msg_txt[]"Part %1 and %2 stop,please confirm."} #作者,编号,提示内容 para[1]={par_type #value} para[1].par_int=num1 para[2]={par_type #value} para[2].par_int=num2 para[3]={par_type #empty} option ={vl_stop true,clear_p_reset true,clear_p_saw false,log_to_db false} quit_address= set_krlmsg(#quit,mess,para[],option) loop cheack=exists_krlmsg(quit_address) #检查消息是否还在 if not check then #不在了 exit endif endloop halt END
kuka定义变量 DEF msg_start() Decl krlmsg_t mess #定义 Decl krlmsgpar_t para[3] #参数传递 Decl krlmsgopt_t option #信息选项 int start_address #生成消息 bool clear 程序使用 mess = {modul[]"kuka",Nr 1360,msg_txt[]"Program is running."} #作者,编号,提示内容 para[1]={par_type #empty} para[2]={par_type #empty} para[3]={par_type #empty} option ={vl_stop false,clear_p_reset true,clear_p_saw false,log_to_db false} start_address= set_krlmsg(#state,mess,para[],option) halt clear=clear_krlmsg(start_address) halt END
kuka定义变量 DEF msg_waiting() Decl krlmsg_t mess #定义 Decl krlmsgpar_t para[3] #参数传递 Decl krlmsgopt_t option #信息选项 int waiting_address,a #生成消息 bool clear a=12 程序使用 mess = {modul[]"kuka",Nr 1361,msg_txt[]"Waiting for input signal %1."} #作者,编号,提示内容 para[1]={par_type #value} para[1].par_int=a para[2]={par_type #empty} para[3]={par_type #empty} option ={vl_stop false,clear_p_reset true,clear_p_saw false,log_to_db false} waiting_address= set_krlmsg(#waiting,mess,para[],option) halt loop if $in[12]==true then clear=clear_krlmsg(waiting_address) exit else if not exists_krlmsg(waiting_address)then exit endif endif endloop halt END
kuka定义变量 DEF dlg() Decl krlmsg_t mess #定义 Decl krlmsgpar_t para[3] #参数传递 Decl krlmsgopt_t option #信息选项 Decl krlmsgdlgsk_t sk[7] #7个按键 int dlg_address,answer #生成消息 bool check loop answer=0 程序使用 mess = {modul[]"kuka",Nr 1367,msg_txt[]"Program finished,continue?"} #作者,编号,提示内容 para[1]={par_type #empty} para[2]={par_type #empty} para[3]={par_type #empty} option ={vl_stop false,clear_p_reset false,clear_p_saw false,log_to_db false} sk[1]={sk_type #value,sk_txt[]"continue"} sk[2]={sk_type #empty} sk[3]={sk_type #value,sk_txt[]"end"} sk[4]={sk_type #empty} sk[5]={sk_type #empty} sk[6]={sk_type #empty} sk[7]={sk_type #empty} dlg_address= set_krldlg(mess,para[],sk[],option) loop check=exists_krldlg(dlg_address,answer) if not cheack then exit endif endloop if answer ==3 then exit endif endloop END
定义一个一维数组,数组内有12个元素
数组内的值全部初始化为字符”+“
程序启动后
1秒后将第一个数组元素变成字符”-“
再过1秒后第二个元素变成字符”-“
以此类推,直到最后一个元素变成”-“
kuka# dat文件里声明字段 decl char name[12] # src 文件 DEF array() int i ;name[]="++++++++++++" for i =1 to 12 name[i]="+" endfor for i =1 to 12 wait sec 1 name[i]="-" endfor END
定义一个结构体用于描述一个箱子 需要表示出这个箱子的长宽高、内装瓶子数量以及箱子的颜色
箱子长度55.9 、宽度40.8 高度38.3 初始内装瓶子数3个,颜色为白色
5秒后,再装进3个瓶子
再经过5s 箱子颜色被喷为红色
要求箱子的状态变化在程序运行中可以实时更新
在R1 System 目录下$config.dat 中 user Globals 定义变量
kukastruc box real length,width,height,int bottle,char color[10] #构建结构体 decl box kiste #箱子名称
kukaDEF struc_example() kiste={length 55.9,width 40.8,height 38.3,bottle 3,color[]"white"} wait sec 5 kiste.bottle=kiste.bottle+3 wait sec 5 kiste.color[]="red" END
把上面结构体练习中的箱子颜色由字符数组改为枚举
箱子可以选择的颜色为白色,红色,黑色,蓝色
其他的要求和上面的一样
在R1 System 目录下$config.dat 中 user Globals 定义变量
kukaenum color white,red,black,blue #构建枚举 decl box kiste #箱子名称
kukaDEF struc_example() kiste={length 55.9,width 40.8,height 38.3,bottle 3,box_color #white} wait sec 5 kiste.bottle=kiste.bottle+3 wait sec 5 kiste.box_color=#red END
编写一个函数,函数要实现:两个数相除,求其余数
即取余数算法,只考虑两个数都是正整数的情况
kuka# 新建Function函数功能块 deffct int func_example(a:in,b:in) while a>=b a=a-b endwhile return a endfct
kukaDEF test() INI SPTP HOME vel=100% DEFAULT TOOL [1] Base[0] SPTP P1 vel=100% PDAT1 TOOL [1] Base[0] SPTP P2 vel=100% PDAT1 TOOL [1] Base[0] SPTP P3 vel=100% PDAT1 TOOL [1] Base[0] SPTP HOME vel=100% DEFAULT TOOL [1] Base[0] END
kukaDEF test() INI SPTP HOME vel=100% DEFAULT TOOL [1] Base[0] SPTP XP1 WITH $TOOL=TOOL_DATA[1],$BASE=BASE_DATA[2],$LDAD=LDAD_DATA[1] SPTP XP2 SPTP XP3 WITH $APO.CDIS=300 C_SPL SPTP HOME vel=100% DEFAULT TOOL [1] Base[0] END
5*5 每个格子横竖之间的间距为100mm,只有左上角第一个格子位置允许示教 横为j 竖为i
kukaDEF motion_example() decl e6pos tuopan[5,5] IIN SPTP HOME vel=100% DEFAULT TOOL [1] Base[0] SPTP P1 vel=100% PDAT1 TOOL [1] Base[0] for i =1 to 5 for j =1 to 5 tuopan[i,j]=xp1 tuopan[i,j].x=xp1.x+100*(j-1) tuopan[i,j].y=xp1.y+100*(x-1) endfor endfor for i =1 to 5 for j =1 to 5 slin tuopan[i,j] with endfor endfor SPTP HOME vel=100% DEFAULT TOOL [1] Base[0] END