• ABB安全区域和中断一起连用案例解析


    MODULE XXXX
      !定义临时全局区域数据
      VAR wztemporary conveyor;
      !定义全局区域形状数据
      VAR shapedata volume;
      !定义中断识别号
      VAR intnum empty;
      !定义全局区域形状设定数据位置点1和点2
      pers pos corner1:=[363.41,41.87,317.67];
      pers pos corner2:=[613.41,-258.13,567.67];
      !定义计算位置示教点
      VAR robtarget AnQua:=[[363.41,41.87,317.67],[0.261461,0.63764,0.229939,0.687155],[0,0,1,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
      !定义左右移动位置点
      TASK VAR robtarget Zuo_AnQuanDian:=[[444.89,-401.76,501.87],[0.0966565,0.923747,0.326119,0.176057],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
      TASK VAR robtarget You_AnQuanDian:=[[444.90,-164.34,501.86],[0.0966831,0.923746,0.32611,0.176061],[-1,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];


      !安全区域定义
      PROC AnQuanQuYu_CheShi()
        !计算安全区域大小
        corner1.x:=AnQua.trans.x;
        corner1.y:=AnQua.trans.y;
        corner1.z:=AnQua.trans.z;
        corner2.x:=AnQua.trans.x+250;
        corner2.y:=AnQua.trans.y-300;
        corner2.z:=AnQua.trans.z+250;
        !定义一个箱形全局区域
        WZBoxDef Outside, volume, corner1, corner2;
        !启用全局区域限制监控
        !WZLimSup Temp, conveyor, volume;
        !启用全局区域,设置数字信号输出
        WZDOSet Temp, conveyor, Before, volume, ZhongDuan1,1;
        !停用临时全局区域监控
        !WZDisable conveyor;
        !重新启用临时全局区域监控
        !WZEnable conveyor;
        !擦除临时全局区域监控
        !WZFree conveyor;

        !调用中断例行程序
        ZhongDuan;

        !移动左示教点(在安全区外,会触发安全区)
        Movej Zuo_AnQuanDian,v500,fine,tool0WObj:=wobj0;
        !Movej You_AnQuanDian,v500,fine,tool0WObj:=wobj0;
        !Movej Qian_AnQuanDian,v500,fine,tool0WObj:=wobj0;
        !Movej Hou_AnQuanDian,v500,fine,tool0WObj:=wobj0;

      ENDPROC


      !中断例行程序
      PROC ZhongDuan()
        !将中断与软中断程序相连
        CONNECT empty WITH QianHou_ZhongDuan;
        !当中断识别号ZhongDuan1置为1时,自动执行软中断程序(QianHou_ZhongDuan)。
        ISignalDO ZhongDuan1, 1, empty;
      ENDPROC


      !软中断程序
      TRAP QianHou_ZhongDuan
        !定义中断发生时的保存位置的程序点
        VAR robtarget p1;
        !停止机械臂的移动
        StopMove;
        ! 发生中断时,存储路径
        StorePath;
        !读取中断发生的位置保存给p1
        p1:=CRobT();
        !中断发生后执行网右走程序
        Movej Hou_AnQuanDian,v500,fine,tool0WObj:=wobj0;
        !中断结束后移动到发生中断时的位置
        MoveL p1,v500,fine,tool0WObj:=wobj0;
        !中断之后,恢复路径(继续从中断点移动到Zuo_AnQuanDian示教点)
        RestoPath;
        !重启机械臂移动
        StartMove;
        !完成程序的执行
        RETURN;
      ENDTRAP


    ENDMODULE

    程序的功能:首先给机器人规划一个安全工作区,如果机器人走出安全区就会置位数字输出信号(ZhongDuan1),
    当(ZhongDuan1)信号为1时就会触发中断使其执行(You_AnQuanDian)指令,让机器人无法移动到安全区外。

    注意:如果中断后执行的是StopMove(停止机械臂的移动指令)时,
    必须保存当前的位置执行StorePath(发生中断时,储存路径)指令,否则无法执行下一条移动指令。

  • 相关阅读:
    pycharm鼠标光标变成黑色方块
    华章8月书讯,夏日静心好读书
    测试既是一门科学,也是一门艺术
    计算机科学与技术专业教指委将成立“物联网工程专业教学研究专家组”
    【七夕送好书】转微博获赠书!
    孟岩谈《C++程序设计原理与实践》
    【有奖活动】华章IT15周年,评选您心中最有影响力的10种图书
    《测试之美》连载:创建开源的QA社区
    Web前端开发之“常见模块你真的很了解吗?”
    测试驱动开发简介
  • 原文地址:https://www.cnblogs.com/yangshunwang/p/8418072.html
Copyright © 2020-2023  润新知