聊聊KUKA机器人高级编程:中断

发布者:快乐旋律最新更新时间:2024-01-25 来源: 机器人及PLC自动化应用作者: Lemontree 手机看文章 扫描二维码
随时随地手机看文章

  INTERRUPT … DECL … WHEN … DO … :声明中断

  对于定义的事件,例如输入,控制中断当前程序并处理定义的子程序。事件和子程序用INTERRUPT…DECL,WHEN O定义。子程序完成后,中断的程序将在中断点继续。异常:RESUME。由中断调用的子程序称为中断程序。

  运行动作不中断运行和准备好的运动通常不会被中断打断。与中断程序并行,机器人继续执行主程序中已经准备好的所有动作。

  如果在此期间中断程序被完全处理,则主程序在没有移动停止的情况下继续,即在没有延长处理时间的情况下。

  最大数量/BRAKE最多可以同时声明64个中断。中断的声明可以随时被新的声明覆盖。可以选择使用BRAKE声明中断。BRAKE语句在到声明的中断时立即执行。这意味着当进入中断程序时,制动过程已经开始。

 
语法 INTERRUPT > DECL Prio WHEN Er-eignis DO Unrprogm

GLOBAL 可选 无 GLOBAL > 只在程序和下级程序中已知 有 GLOBAL > 在上级程序中同样已知
PRIO 中断的优先级和“编号” 1 = 最高优先级,128 = 最低优先级 通过系统和附加的工艺程序包,已使用相应的中断。 已声明的中断可通过变量显示 ($RINT_LIST[]) 确定。
条件 布尔变量的边沿变化 (FALSE > TRUE, TRUE > FALSE) 布尔运算的边沿变化 比较的边沿变化 ("$COUNT_I[31]>=5")
中断程序 全局或局部子程序(中断例程)。 示例:INTERRUPT DECL 23 WHEN NOT $IN[703] DOSAFE_Start_SPALT()

示例1
  如果$IN[12]为true,则声明优先级为23的中断调用子程序UP1。20和VALUE被传递给子程序。
  INTERRUPT DECL 23 WHEN $IN[12]==TRUE DO UP1(20,VALUE)
  示例2
  在的路径上有两个物体,其位置由连接到输入端6和7的两个检测。之后,应接近确定的两个位置。
  为此,将两个检测到的位置存储为点P_1和P_2。在主程序的第二部分中,将探讨这些要点。
  当机器人检测到用INTERRUPT、DECL、When…DO定义的事件时,它总是将当前机器人位置保存在系统变量$AXIS_INT(特定于轴)和$POS_INT(笛卡尔)中。
  主要方案:
  DEF PROG()
  ...  INTERRUPT DECL 10 WHEN $IN[6]==TRUE DO UP1() 
  INTERRUPT DECL 20 WHEN $IN[7]==TRUE DO UP2() 
  ... 
  INTERRUPT ON
  LIN START 
  LIN END 
  INTERRUPT OFF 
  LIN P_1
  LIN P_2 
  ...  END
  本地中断程序1:
  DEF UP1()
  P_1=$POS_INT 
  END
  本地中断程序2:
  DEF UP2()
  P_2=$POS_INT 
  END
   INTERRUPT ON/OFF: 启用或禁用中断
  此语句启用或禁用中断。
  在声明之后,中断最初处于非活动状态。中断必须被激活,这样它才能对定义的事件做出响应。
  INTERRUPT Akon
 

Aktion •ON:激活中断。   •OFF:禁用中断。
Nummer 类型:INT   要引用操作的中断的编号(=优先级)。   数字可以省略。在这种情况下,ON或OFF指的是所有声明的中断。

同时,最多可以有32个中断处于活动状态。应特别注意: •如果INTERRUPT ON省略了该数字,则所有声明的中断都将变为活动中断。但是,不得超过允许的32个数字。
  •当触发器调用子程序时,只要子程序尚未映射,它就算作活动中断。
  如果中断声明是一个包含布尔变量的事件,例如。B.定义的输入:
  •在这种情况下,中断是通过更改状态来触发的,例如$In[x]==通过从FALSE更改为TRUE来触发。在INTERRUPT ON的情况下,状态必须不存在,因为这样中断就不会被触发。
  •此外,在这种情况下必须注意:状态变化必须最早根据INTERRUPT ON执行插值。
  (这可以通过在INTERRUPT ON后编程WT SEC 0.012来实现。如果不需要提前停止,也可以在WAIT SEC前编程CONTINUE。)
  原因是INTERRUPT ON需要一个插值时钟(=12ms),直到中断被实际激活。如果状态事先发生变化,则中断无法检测到变化。
  示例1
  优先级为2的中断被激活。(中断必须已声明。)
  INTERRUPT ON 2
  示例2
  就而言,在使用粘合剂的过程中会执行非卷筒纸忠实的紧急停止。通过程序停止施胶,并且在释放(通过输入10)之后将胶枪重新定位在幅材上。
  DEF PROG()
  ...  INTERRUPT DECL 1 WHEN $STOPMESS DO STOP_PROG()
  LIN P_1
  INTERRUPT ON
  LIN P_2
  INTERRUPT OFF
  ... END
  DEF STOP_PROG()
  BRAKE F
  GLUE=FALSE
  WAIT F $IN[10]
  LIN $POS_RET
  GLUE=TRUE
  END
    INTERRUPT DISABLE/ENABLE:锁定或释放中断
  此语句锁定或释放活动中断。
  行为:
  当定义的事件d发生时,锁定的中断不响应。h.它不调用已定义的子程序。然而,机器人控制器会记住事件已经发生。当中断再次被释放时,它随后会对事件做出响应。
  示例1
  图中所示过程的先决条件是中断已声明并处于活动状态:
  INTERRUPT DECL 1 WHEN $IN[7]==TRUE DO UP1()
  ... INTERRUPT ON 1
  1 中断被锁定。
  2 定义的事件发生:输入7变为TRUE。
     中断没有响应,因为它被锁定了。
  3 再次释放中断。
     它响应并调用定义的子例程。
  4  输入7再次变为FALSE。
  示例2
  图中所示过程的先决条件是中断已声明并处于活动状态:
  INTERRUPT DECL 1 WHEN $IN[7]==TRUE DO UP1()
  ... INTERRUPT ON 1
  1中断被锁定。
  2定义的事件发生:输入7变为TRUE。
  中断没有响应,因为它被锁定了。
  3输入7再次变为FALSE。
  4再次释放中断。
  它响应并调用定义的子例程。这就是$IN[7]是否不再为真。决定性因素是定义的事件在中断被锁定时(至少)发生过一次
  BRAKE: 从中断程序中停止机器人
  制动器停止机器人。
  BRAKE只能在中断程序或中断声明中使用。
  在中断声明中使用BRAKE提供了这样的优点,即在检测到中断时立即启动制动响应。制动反应不仅在进入中断程序并用制动器处理线路后才开始。这意味着制动响应独立于解释器。
  在机器人停止之前,中断程序不会继续。一旦中断程序完成,机器人继续移动。
  BRAKE 
  语法:
  • BRAKE; STOP 2
  • BRAKE F; STOP 1
  语法:
  RESUME
  RESUME 只允许用于中断程序中。
  RESUME 通常与BRAKE 一起编程。
    实例
  机器人应该在轨道上搜索零件。该部件由输入端15处的传感器检测。在找到零件后,机器人不应继续到轨道的终点,而是返回到中断位置并拾取零件。然后,主要方案应该继续下去。
  主程序PROG():
  DEF PROG()
  INI
  ...  INTERRUPT DECL 21 WHEN $IN[15] DO FOUND()
  PTP HOME 
  ...  SEARCH() ... 
  END
  使用制动和恢复停止移动,
  基本上在一个子程序中。因此,搜索路径不是直接在主程序中编程的,而是在子程序search()中编程的。
  带有搜索路径的子程序SEARCH():
  DEF SEARCH()
  INTERRUPT ON 21
  SPLINE
    SPL START_SEARCH 
    SPL IN_BETWEEN
    SPL END_SEARCH 
  ENLINE
  WAIT FOR TRUE
  ... END
  前导指针不得位于RESUME语句时声明当前中断的级别。为了防止这种情况发生,WAIT FOR TRUE(等待为真)触发提前停止。
  中断程序FOUND():
  DEF FOUND() 
  INTERRUPT OFF 21
  BRAKE 
  LIN $POS_INT 
  ... ; RESUME
  END
  制动过程使机器人稍微远离触发中断的地方。LIN$POS_INT使机器人返回到触发中断的位置。
  这里使用了运动类型LIN,因为中断程序不能包含样条曲线运动。
  LIN$POS_INT之后,机器人抓取零件。(示例中此处未编程。)
  RESUME使主程序在夹持零件后继续。如果没有RESUME,子程序SEARCH()将在END之后继续。
  大众版本下
    global interrupt decl 23 when $in[611]==true do zs1()
  global interrupt decl 25 when $in[611]==true do zs2()
  case 204
  see=$nullframe
  see1=$nullframe
  see2=$nullframe
  see2.z=80
  if par10 then
  $out[611]=true
  wait sec 1
  interrupt on 23

  wait sec 0
  see1=$pos_t
  lin see1

    interrupt on 25
    endif
  def zs2()
  $out[611]=false
  $out[580]=false
  interrupt off 25
  brake
  see=$pos_act
  lin $pos_int
  lin_rel {x -15}
  lin_rel {z -68}
  wait sec 0.2
  $out[579]=true
  lin_rel {z 70}
  see1=$pos_int
  lin see
  end
      审核编辑:黄飞

 

引用地址:聊聊KUKA机器人高级编程:中断

上一篇:小型商用机器人,如何做到小而强呢?
下一篇:库卡与TÜV莱茵合作引领移动机器人行业高质量发展

小广播
最新机器人文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关:

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved