前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Interrupt怎么用

Interrupt怎么用

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

Hi 大家好,大家都知道kuka机器人的程序是顺序执行的,那么如何能实现某个信号的连续监控呢。或者说某个信号触发后,机器人就立即停止当前的任务去执行另外一个任务。

这就是我们这一期要说的INTERRUPT指令。

废话不说

首先是中断声明;

<GLOBAL> INTERRUPT DECL Prio WHEN Ereignis DO Interruptprogramm

<GLOBAL>:表示全局中断

注意是中断声明,INTERRUPT DECL

Prio:中断编号,同时也是优先级,优先级 1、2、4 - 39 和 81 - 128 可供选择。优先级 3 和 40 - 80 是预留给系统应用的

WHEN Ereignis :中断触发条件

DO Interruptprogramm:满足条件后调用的程序

举例:

INTERRUPT DECL 10 WHEN $IN[10] DO STOP_PROG( )

要注意的是GLOBAL的概念:

下图是官方资料中的配图,这图很好的说明了GLOBAL的用法。

就是说在一个子程序上声明中断,加上GLOBAL则上一层程序也有效。

接下来是启用中断

INTERRUPT ON/OFF/DISABLE/ENABLE < 编号>

ON:启用中断

OFF:停止启用

DISABLE:禁止/暂停

ENABLE:开通一个原本禁止的中断

ON/OFF这两个不说了,DISABLE/ENABLE这两个是用于已经启用的中断中进行暂停。

并且在DISABLE后仍然检查触发条件,但运行到ENABLE后才会执行中断程序。

DISABLE/ENABLE这种一般应用如下图,

程序运行启动中断ON当机器人进入机床前DISABLE,机器人从机床出来ENABLE,这样无论任何时候发生中断触发,机器人都不会停止在机床内部,确保了设备的安全。

中断程序

中断可以触发一个程序来执行中断后的运行

例如STOP_PROG( )这样的名字

在中断程序中有些语法是和普通程序模块不同的

不可以使用的:

不可以使用联机表单,

不可以使用带s的运动如sptp,slin

不可以使用Advance

不可以使用INI

允许使用的:

Brake(F)

Resume

举例:

代码语言:javascript
复制
GLOBAL INTERRUPT DECL 100 WHEN e_stop==FALSE DO robot_stop( )
INI
PTP HOME Vel= 100 % DEFAULT
INTERRUPT ON 100 ;数字在后,如不写则说明所有Interrupt都置ON
LOOP
…
…
ENDLOOP
INTERRUPT OFF 100 ;数字在后,如不写则说明所有Interrupt都置OFF
PTP HOME Vel= 100 % DEFAULT
END
;-------------------------------------
def robot_stop()
INTERRUPT OFF 100
BRAKE
WAIT FOR (E_stop)
CONTINUE
INTERRUPT ON 100
End

例2:

代码语言:javascript
复制
DEF CELL ( )
INIT
BASISTECH INI
$out[appl_run]=false
CHECK HOME
PTP HOME Vel= 100 % DEFAULT
AUTOEXT INI
LOOP
INTERRUPT DECL 100 WHEN $out[236]==TRUE do Backhome() ;声明中断100
...
INTERRUPT ON 100 ;打开中断100
P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )
SWITCH PGNO ; Select with Programnumber
CASE 9
P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
purge ( ) ; Call purge
DEFAULT
P00 (#EXT_PGNO,#PGNO_FAULT,DMY[],0 )
ENDSWITCH
INTERRUPT OFF 100 ;关闭中断100
ENDLOOP
END
;==========================================================
DEF Backhome() ;中断子程序
INTERRUPT OFF 100 ;中断生效后立即关闭中断防多次触发
$TIMER_STOP[2]=TRUE
$TIMER[2]=0
BRAKE ;终止当前动作
PTP XHOME ;返回Home点(中断中不能轨迹逼近)
...
RESUME ;返回声明程序层面的触发位置
END
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档