0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

库卡机器人编程之干涉区间

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2020-08-07 16:39 次阅读

一.干涉的定义

机器人在作业过程中,或者在运行过程中,两个或两个以上的机器人同时占有同一区间位置而发生冲突叫干涉。因为干涉可能引起的后果有:

机器人的部件损坏 任何因干涉而造成的不良后果,都将为客户带来不
可估计的损失!
机器人程序混乱
加工中的工件损坏
周边其他设备设施的损坏

二.干涉区间

同一工位的机器人,在工作过程中,需要进入到同一个区域,但在进入的先后次序无严格的限定,一台机器人(Master)具有绝对优先的权利,即该机器人首先进入干涉区,作业完成之后另一台机器人(Slave)才可以进入该干涉区工作。任意一台机器人先进入(Master),在工艺上都允许(除了影响运行时间外),允许使用干涉区信号对控制机器人运行,防止机器人之间碰撞。对于有严格的工艺时序的干涉,采用互锁信号来控制。这种干涉区信号设置方法如图所示。 ⑴如图中,Rob2机器人为Master,Rob1机器人为Slave. Rob1和Rob2机器人在进入干涉区之前首先分别对彼此进行初始化(开启干涉区监控并释放干涉区)。 ⑵机器人进入干涉区三种情形:

1 Rob1机器人进入干涉区前,发送从机欲进入干涉区的请求信号,并检测Rob2作为主机是否发送欲进入干涉区的请求信号。如果主机Rob2进入干涉区的请求信号被激活,无论此时Rob2进入或则即将进入干涉区,此时Rob1都将停止运动并等待Rob2完成运动退出干涉区。
2 如果Rob1和Rob2同时发出欲进入干涉区的请求信号,Rob2机器人优先进入,此时Rob1都将停止运动并等待Rob2完成运动退出干涉区。
3 如果Rob1作为从机已进入干涉区时,Rob2若想进入干涉区,Rob2必须停止运动并等待Rob1完成运动退出干涉区。

⑶待进入干涉区的机器人必须等待已进入干涉区的机器人完成运动退出干涉区后方可进入。

三.干涉区间互锁编程思路:

创建名为Interlock的程序主要适用于存在有关联的机器人组之间互锁,该程序包含源代码SRC文件和数据文件DAT两个文件:

1.Interlock.dat数据文件说明:

①枚举类型互锁指令E_LOCKTYPE:

GLOBAL ENUM E_LOCKTYPE ENTER_LOCK_M,ENTER_LOCK_S,LEAVE_LOCK,CYC_CONTROL,RESET_LOCK

互锁命令 说明
ENTER_LOCK_M 作为主机器人进入干涉区
ENTER_LOCK_S 作为从机器人进入干涉区
LEAVE_LOCK 机器人退出干涉区
CYC_CONTROL 激活干涉区监控中断
RESET_LOCK 初始化并释放干涉区

②结构体型互锁信号S_LOCKSIG:

GLOBAL STRUC S_LOCKSIG INTROB_IN,INTROB_OUT

互锁信号 说明
ROB_IN 其他机器人许可当前机器人进入干涉区的输入信号:TRUE表示许可
ROB_OUT 当前机器人进入干涉区请求的输出信号:FALSE表示请求

③用于诊断的当前机器人激活干涉区号zLockNumber:

GLOBAL INT zLockNumber=3

④干涉区监控的中断及循环旗帜的定义:

GLOBALCONSTINTczCollInterrupt=1;定义干涉区监控的中断等级GLOBALCONSTINTczCycCollision=1 ;定义干涉区监控的循环旗帜号

⑤信号安全检测时间,与SPS扫描周期:

GLOBALCONSTREALcrDeadtime=0.200000003 ;信号安全检测时间,与SPS扫描周期

⑥干涉区互锁信号:

SIGNAL giRobotInterlock $IN[89] TO $IN[104] ;许可当前机器人进入干涉区的输入信号组SIGNALgoRobotInterlock$OUT[89]TO$OUT[104] ;当前机器人进入干涉区请求的输出信号组DECLS_LOCKSIGTABLE_LOCK[16];定义机器人干涉区的互锁表TABLE_LOCK[1]={ROB_IN89,ROB_OUT89};机器人干涉区的互锁1TABLE_LOCK[2]={ROB_IN 90,ROB_OUT 90} ;机器人干涉区的互锁2TABLE_LOCK[3]={ROB_IN 91,ROB_OUT 91} ;机器人干涉区的互锁3TABLE_LOCK[4]={ROB_IN 92,ROB_OUT 92} ;机器人干涉区的互锁4TABLE_LOCK[5]={ROB_IN93,ROB_OUT93};机器人干涉区的互锁5TABLE_LOCK[6]={ROB_IN94,ROB_OUT94};机器人干涉区的互锁6TABLE_LOCK[7]={ROB_IN95,ROB_OUT95};机器人干涉区的互锁7TABLE_LOCK[8]={ROB_IN 96,ROB_OUT 96} ;机器人干涉区的互锁8TABLE_LOCK[9]={ROB_IN 97,ROB_OUT 97} ;机器人干涉区的互锁9TABLE_LOCK[10]={ROB_IN 98,ROB_OUT 98} ;机器人干涉区的互锁10TABLE_LOCK[11]={ROB_IN 99,ROB_OUT 99} ;机器人干涉区的互锁11TABLE_LOCK[12]={ROB_IN 100,ROB_OUT 100} ;机器人干涉区的互锁12TABLE_LOCK[13]={ROB_IN 101,ROB_OUT 101} ;机器人干涉区的互锁13TABLE_LOCK[14]={ROB_IN 102,ROB_OUT 102} ;机器人干涉区的互锁14TABLE_LOCK[15]={ROB_IN103,ROB_OUT103};机器人干涉区的互锁15TABLE_LOCK[16]={ROB_IN 104,ROB_OUT 104} ;机器人干涉区的互锁16

2.Interlock.src源程序文件说明:

①Interlock源程序包含以下子程序:

子程序名 说明
ANTI_COLLISION 互锁程序
STOP_ROB 互锁程序中的中断程序
Msg_Anticoll 互锁激活的信息提示程序
SetMsg 设置信息提示的程序

②互锁程序ANTI_COLLISION(eiLockType:IN,ziLockNum:IN):

传递参数 类型 取值 说明
eiLockType E_LOCKTYPE #ENTER_LOCK_M 作为主机请求进入干涉区
#ENTER_LOCK_S 作为从机请求进入干涉区
#LEAVE_LOCK 离开干涉区
#CYC_CONTROL 干涉区初始化:激活互锁中断
#RESET_LOCK 干涉区初始化:重置输出信号
ziLockNum INT 1…16 互锁序号:与TABLE_LOCK相对

●#ENTER_LOCK_M程序逻辑:

1 禁用干涉区监控中断;
2 判断从站机器人是否已在该干涉区:
1.若该值为真,表示与之对应的机器人不在该干涉区,此时输出进入干涉区请求信号假值;
2.若该值为假,则表示与之对应的机器人在该干涉区,此时中间变量nbOK置为假,并提示信息-主机该干涉区被其他从机器人激活,并等待从站机器人在该干涉区的信号为真,输出从站机器人在该干涉区激活多久的信息;在循环中等待从站机器人在该干涉区的信号为真,此时输出进入干涉区请求信号;
3 激活干涉区监控中断;

●#ENTER_LOCK_S程序逻辑:

1 禁用干涉区监控中断
2 中间变量nbOK置为假,并提示信息-该干涉区被主机器人激活,进入循环判断,判断主机器人是否已激活 该干涉区:
若该值为真,输出进入干涉区请求信号假值;等待一个时间在判断判断主机器人激活该干涉区:如果该值为真,则将中间变量置真,并退出循环;若该值为假,则将输出进入干涉区请求信号真值,让主机器进入干涉区,该从机器人继续等待主机器人激活该干涉区值为真;
3 输出进入干涉区请求信号假值;
4 激活干涉区监控中断;

●#LEAVE_LOCK程序逻辑:

1 如果机器人不在路径上,则等待机器人在路径上;
2 输出进入干涉区请求信号真值;

●#RESET_LOCK程序逻辑:

1 等待机器人在路径上;
2 输出进入干涉区请求信号真值;

●#CYC_CONTROL程序逻辑:

1 定义因互锁引起的停机中断;
2 关闭中断;
3 定义中断中的循环旗帜;
4 开启中断;
5 激活中断;

代码:

DEF Interlock( )END;-------------Interlock Active----------------------GLOBAL DEF ANTI_COLLISION(eiLockType:IN, ziLockNum:IN)DECL E_LOCKTYPE eiLockTypeDECL INT ziLockNumDECL BOOL nbOKCONTINUEIF VARSTATE("ziLockNum")<>#INITIALIZED THEN MsgQuit("Lock area not initialized") HALT ELSE IF ziLockNum>16 OR ziLockNum<1 THEN MsgQuit("Lock area msut be 1 to 16!") HALT ENDIFENDIFSWITCH eiLockType ; --- Enter Collision Zone as Master --- CASE #ENTER_LOCK_M WAIT SEC 0 INTERRUPT DISABLE czCollInterrupt ; Disable Monitoring IF ($IN[TABLE_LOCK[ziLockNum].ROB_IN]) THEN $OUT[TABLE_LOCK[ziLockNum].ROB_OUT]=FALSE ELSE nbOK=FALSE MSG_ANTICOLL(ziLockNum) REPEAT IF ($IN[TABLE_LOCK[ziLockNum].ROB_IN]) THEN nbOK=TRUE ELSE nbOK=FALSE ENDIF WAIT SEC 0.01 ; Sampling 100 ms UNTIL (INSTRUCTION_OK==TRUE) $OUT[TABLE_LOCK[ziLockNum].ROB_OUT]=FALSE ENDIF INTERRUPT ENABLE czCollInterrupt ; Enable Monitoring ; --- Enter Collsion Zone as Slave --- CASE #ENTER_LOCK_S WAIT SEC 0 INTERRUPT DISABLE czCollInterrupt ; Disable Monitoring nbOK=FALSE MSG_ANTICOLL(ziLockNum) REPEAT IF ($IN[TABLE_LOCK[ziLockNum].ROB_IN]) THEN $OUT[TABLE_LOCK[ziLockNum].ROB_OUT]=FALSE WAIT SEC crDeadtime IF ($IN[TABLE_LOCK[ziLockNum].ROB_IN]) THEN nbOK=TRUE ELSE nbOK=FALSE $OUT[TABLE_LOCK[ziLockNum].ROB_OUT]=TRUE ENDIF ENDIF WAIT SEC 0.01 ; Sampling 100 ms UNTIL (nbOK==TRUE) $OUT[TABLE_LOCK[ziLockNum].ROB_OUT]=FALSE INTERRUPT ENABLE czCollInterrupt ; Enable Monitoring ; --- Leave Collision Zone --- CASE #LEAVE_LOCK CONTINUE IF NOT $ON_PATH THEN WAIT FOR $ON_PATH ENDIF TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[TABLE_LOCK[ziLockNum].ROB_OUT]=TRUE; --- Initialize Collision Zone --- CASE #RESET_LOCK WAIT SEC 0 WAIT FOR $ON_PATH $OUT[TABLE_LOCK[ziLockNum].ROB_OUT]=TRUE ; --- Prepare for permanent Monitoring--- CASE #CYC_CONTROL GLOBAL INTERRUPT DECL czCollInterrupt WHEN NOT $CYCFLAG[czCycCollision] DO STOP_ROB( ) INTERRUPT OFF czCollInterrupt $CYCFLAG[czCycCollision]=TRUE $CYCFLAG[czCycCollision]=(((goRobotInterlock B_EXOR 'B1111111111111111') B_AND giRobotInterlock) == (goRobotInterlock B_EXOR 'B1111111111111111')) INTERRUPT ON czCollInterrupt INTERRUPT ENABLE czCollInterrupt; --- WARNING: Program Failure Interlocks --- DEFAULT HALT MsgNotify("Unknown Collision Setting!Please Switch Ti Mode!") WAIT FOR $T1ENDSWITCHENDGLOBAL DEF STOP_ROB ( ); *** Stop Movement by Interlock Monitoring*** BRAKE setmsg (99,3,0) WAIT FOR $CYCFLAG[czCycCollision]ENDGLOBAL DEF Msg_Anticoll(ziLockNum :IN)DECL INT ziLockNumDECL REAL nrTimernrTimer=0.0zLockNumber=ziLockNum;Message Outputsetmsg (ziLockNum,1,nzTimer) $TIMER_STOP[20]=TRUE$TIMER[20]=0$TIMER_STOP[20]=FALSEREPEAT WAIT sec .01UNTIL ($IN[TABLE_LOCK[ziLockNum].ROB_IN])==TRUE$TIMER_STOP[20]=TRUEnrTimer=$TIMER[20]nrTimer=nrTimer/1000.0setmsg (ziLockNum,2,nrTimer) ENDGLOBAL DEF SetMsg(ziLockNum:IN,ziMsg:IN,riPar:IN )DECL KrlMsg_T MsgDECL KrlMsgPar_T Par[3]DECL KrlMsgOpt_T OptDECL INT nzHandleDECL INT ziLockNum, ziMsgDECL REAL riPar;Select Msssage Text---------------------SWITCH ziMsg CASE 1 ;Interlock is Active Msg = {Modul[] "Interlock", Nr 007, Msg_txt[] "Interlock Area %1 is Active!"} CASE 2 ;Interlock was active Msg = {Modul[] "Interlock", Nr 008, Msg_txt[] "Interlock Area %1 was active %2[s] ago!"} CASE 3 ;Interlock Cycflag has triggered Msg = {Modul[] "Interlock", Nr 009, Msg_txt[] "Collision Monitoring has Triggered!"}ENDSWITCH;Configuration of message parameter --------Par[1] = {PAR_TYPE #VALUE, PAR_INT 0}Par[1].PAR_INT = ziLockAreaPar[2] = {PAR_TYPE #VALUE, PAR_REAL 00.0}Par[2].PAR_REAL = riPar;Message Options ------------------------------------Opt = {Vl_STOP FALSE, CLEAR_P_RESET TRUE, CLEAR_P_SAW FALSE, LOG_TO_DB TRUE};Message generation---------------------------nzHandle = SET_KRLMSG (#NOTIFY, Msg, Par[], Opt)END

四.互锁信号程序的使用:

1.初始化干涉监控:

ANTI_COLLISION(#CYC_CONTROL,0 )

2.重置并释放干涉区信号-依据自己需求:

ANTI_COLLISION(#RESET_LOCK,1)ANTI_COLLISION(#RESET_LOCK,2)ANTI_COLLISION(#RESET_LOCK,3)ANTI_COLLISION(#RESET_LOCK,4)ANTI_COLLISION(#RESET_LOCK,5)ANTI_COLLISION(#RESET_LOCK,6)ANTI_COLLISION(#RESET_LOCK,7)ANTI_COLLISION(#RESET_LOCK,8)

3.进入干涉区:

-作为主机器人进入:

ANTI_COLLISION(#ENTER_LOCK_M,3)ANTI_COLLISION(#ENTER_LOCK_M,4) ;三台机器人同时进入该区域ANTI_COLLISION(#ENTER_LOCK_M,5)

-作为从机器人进入:

ANTI_COLLISION(#ENTER_LOCK_S,3)ANTI_COLLISION(#ENTER_LOCK_S,4) ;三台机器人同时进入该区域ANTI_COLLISION(#ENTER_LOCK_S,5)

复杂的互锁建议最好由PLC来统一处理;

4.退出干涉区:

ANTI_COLLISION(#LEAVE_LOCK,3)

五.说明:

本文主要讲述绝对优先干涉区的设定,此种方法必须区分主次关系,主机器人获得绝对的优先处理的权力,而从机器人在遇到主从机器人同时进入干涉区时,获得的优先级低于主机器人,必须等待主机器人处理完退出干涉区之后才能进入。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    211

    文章

    28418

    浏览量

    207097
  • 源代码
    +关注

    关注

    96

    文章

    2945

    浏览量

    66747

原文标题:库卡机器人编程之干涉区间

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    鸿蒙机器人与鸿蒙开发板联动演示

    鸿蒙机器人与鸿蒙开发板联动演示,机器人的角色为迎宾机器人,开发板负责人宾客出现监听
    发表于 12-02 14:55

    焊接机器人编程技巧与注意事项

    随着工业自动化的快速发展,焊接机器人在现代制造业中扮演着越来越重要的角色。它们不仅提高了生产效率,还保证了焊接质量的一致性。 1. 理解焊接机器人的基本原理 在开始编程之前,了解焊接机器人
    的头像 发表于 11-25 09:44 268次阅读

    卡机器人发布JAKA MAX系列新品

    卡机器人近日震撼发布JAKA MAX系列工业协作机器人新品,标志着公司在智能制造领域迈出了重要一步。JAKA MAX系列搭载了前沿科技,其伺服驱动系统创新性地采用了新一代半导体碳化硅技术,结合EtherCAT高速实时总线,实现了性能与效率的双重飞跃。
    的头像 发表于 09-26 14:55 441次阅读

    里程碑!节卡机器人荣膺SGS最新版安全性能认证——国际领先的安全功能认证项目

    SGS为节卡机器人JAKA Zu 20和JAKA S系列新品颁发了CE/NRTL双认证,祝贺两款新品在跨越欧盟以及美国和加拿大市场客准入门槛,为世界各地的合作伙伴和客户提供了信心与保障。节卡机器人
    的头像 发表于 09-06 10:17 456次阅读
    里程碑!节<b class='flag-5'>卡机器人</b>荣膺SGS最新版安全性能认证——国际领先的安全功能认证项目

    工业机器人编程流程及注意事项

    工业机器人在现代制造业中扮演着越来越重要的角色。它们不仅提高了生产效率,还提升了产品质量和一致性。编程是使工业机器人能够执行特定任务的关键步骤。 1. 需求分析 在开始编程之前,首先需
    的头像 发表于 09-04 09:40 1062次阅读

    工业机器人常用的编程方式

    工业机器人编程是确保机器人能够执行特定任务的关键步骤。编程方式多种多样,每种方式都有其特定的应用场景和优势。 工业机器人
    的头像 发表于 09-04 09:26 814次阅读

    工业机器人的四种编程(示教编程、离线编程、自增强现实编程编程)剖析!

    当前机器人广泛应用于焊接、装配、搬运、喷漆及打磨等领域,任务的复杂程度不断增加,而用户对产品的质量、效率的追求越来越高。在这种形式下,机器人编程方式、编程效率和质量显得越来越重要。降
    的头像 发表于 08-30 12:14 2498次阅读
    工业<b class='flag-5'>机器人</b>的四种<b class='flag-5'>编程</b>(示教<b class='flag-5'>编程</b>、离线<b class='flag-5'>编程</b>、自增强现实<b class='flag-5'>编程</b>主<b class='flag-5'>编程</b>)剖析!

    卡机器人获TÜV莱茵北美cTUVus及CE指令符合性证书

    北京2024年8月27日 /美通社/ -- 8月23日,在2024世界机器人大会卡展台,国际独立第三方检测、检验和认证机构德国莱茵TÜV大中华区(简称"TÜV莱茵")为卡机器人产品
    的头像 发表于 08-28 14:00 337次阅读
    <b class='flag-5'>库</b><b class='flag-5'>卡机器人</b>获TÜV莱茵北美cTUVus及CE指令符合性证书

    世界机器人大会这些趋势值得关注:机器人迈入中高端应用场景,看节卡机器人如何做?

    在全球科技变革的新航海时代下,节卡机器人将以更灵活的本地化运营体系、更成熟的产品和解决方案,不断深化创新能力,把科技成果精准输送到各行各业中,促进全球工业和机器人行业向新向上。
    的头像 发表于 08-21 15:32 658次阅读
    世界<b class='flag-5'>机器人</b>大会这些趋势值得关注:<b class='flag-5'>机器人</b>迈入中高端应用场景,看节<b class='flag-5'>卡机器人</b>如何做?

    Al大模型机器人

    金航标kinghelm萨科微slkor总经理宋仕强介绍说,萨科微Al大模型机器人有哪些的优势?萨科微AI大模型机器人由清华大学毕业的天才少年N博士和王博士团队开发,与同行相比具有许多优势:语言
    发表于 07-05 08:52

    工业机器人任务编程基本流程

    是其中至关重要的一环。今天跟随创想智控焊缝跟踪小编一起了解工业机器人任务编程基本流程。 1. 任务分析与需求确定 在开始编程之前,首先需要对任务进行详细分析,并确定具体的需求。这一步骤包括明确任务的目标、工作环境
    的头像 发表于 07-02 10:41 560次阅读

    abb工业机器人编程语言是什么

    ABB工业机器人编程语言主要是RAPID(Robot Application Programming Interface for Development),它是一种高级编程语言,专门为工业
    的头像 发表于 06-16 16:49 2549次阅读

    卡机器人使用多久需要维护保养# 科技

    机器人电机
    jf_47473609
    发布于 :2024年05月13日 10:33:13

    卡与TÜV莱茵合作引领移动机器人行业高质量发展

    2024年1月19日,卡机器人(广东)有限公司(以下简称“卡”)与国际独立第三方检测、检验和认证机构德国莱茵TÜV大中华区(以下简称“TÜV莱茵”)举行战略合作签约仪式,并为卡K
    的头像 发表于 01-25 11:26 1062次阅读

    ABB机器人拓展其免费的Wizard简易编程软件的应用范围

    近日,ABB机器人拓展了其免费的Wizard简易编程软件的应用范围,除了协作机器人外,现在该软件也可应用于由OmniCore™控制器驱动的六轴工业机器人
    的头像 发表于 01-09 09:46 1061次阅读
    ABB<b class='flag-5'>机器人</b>拓展其免费的Wizard简易<b class='flag-5'>编程</b>软件的应用范围