ABB机器人的错误处理

ABB机器人的错误处理

    errnum 数据类型

      errnum用于描述在执行过程中,发生的所有可恢复的错误。例如程序执行时,被零除。    如果机器人程序执行过程中检测到一个错误,错误非致命,可以被错误处理程序处理。    这类错误的典型例子是过大的值或者被零除。     errnum类型的系统变量 errno,根据不同的错误性质,分配不同的值。错误处理程序可以通过读取这个变量来纠正错误,然后执行程序可以正确的方式继续运行。
     错误也可以通过使用RAISE指令在程序中创建。错误处理程序通过指定一个能检测到该特定类型的错误号(范围1-90内或通过BookErrNo指令预订)作为RAISE的参数。

示例:

       reg1 := reg2 / reg3;
       ...
      ERROR

      IF    ERRNO = ERR_DIVZERO    THEN
      reg3 := 1;
      RETRY;
      ENDIF

    如果REG3= 0,机器人除法时检测到发生的错误。这个错误可以被检测并通过分配REG3的值为1予以纠正。因此除法可再次被执行,程序可以继续执行。


      CONST errnum machine_error := 1;
      ...
      IF di1=0 RAISE machine_error;
      ...
      ERROR

    IF ERRNO=machine_error RAISE; 

      机器人通过信号DI1检测出现的错误。跳转到错误处理程序。调用的错误处理程序调,纠正这个错误。machine_error作为一个常数,用来让错误处理程序确切知道发生的是哪种错误的类型。

      预定义的错误类型

     系统变量  ERRNO 可以用于读取最后一次发生的错误。 许多预定义常量可以用来确定发生的错误类型。 (ABB编程手册 1179 page


     关于raise

      RAISE用于在程序中产生一个错误,并调用程序的错误处理函数。 RAISE 同样可以在错误处理函数中使用,将当前错误传送给调用程序的错误处理函数。
这个指令可以用于跳回高一层的程序结构,例如,底层的错误返给主程序的错误处理函数。

       参数
       RAISE [ Error no. ]
       Error no的数据类型为 errnum。Error number: 错误处理程序可以通过ERRNO系统变量查找1和90之间任意数字的错误。

      举例:

MODULE MainModule

        VAR errnum ERR_MY_ERR := -1;

        PROC main()

        BookErrNo ERR_MY_ERR;
            IF di1 = 0 THEN
                RAISE ERR_MY_ERR;
            ENDIF

        ERROR

        IF ERRNO = ERR_MY_ERR THEN
            TPWrite "di1 equals 0";
        ENDIF

        ENDPROC

ENDMODULE

       如果 di1 等于 0 产生一个错误. RAISE 会将程序推动到错误处理程序处执行。在这个程序中,用户创建了自己的错误号处理指定的错误。. 通过BookErrNo注册错误号并使用。

 MODULE MainModule
      VAR num value1 := 10;
      VAR num value2 := 0;
      PROC main()
          routine1;


          ERROR
          IF ERRNO = ERR_DIVZERO THEN
              value2 := 1;
              RETRY;     ! RETRY 指令用于当一个错误发生时,重新运行引起错误的指令。
          ENDIF
      ENDPROC

      PROC routine1()
          value1 := 5/value2;
   !当value2为0的时候,这将导致一个错误。

          ERROR
          RAISE;
      ENDPROC
ENDMODULE

  



       关于错误处理

       TRYNEXT - 跳过产生错误的指令,继续运行。 TRYNEXT 指令用于在产生一个错误后,程序运行产生错误的下一条语句。
       示例
         reg2 := reg3/reg4;
          ...
      ERROR
          IF ERRNO = ERR_DIVZERO THEN
          reg2:=0;
         TRYNEXT;
      ENDIF


      RETRY 指令用于从引起错误的地方恢复程序继续运行

      示例:

         reg2 := reg3/reg4;
         ...
      ERROR
        IF ERRNO = ERR_DIVZERO THEN
           reg4 :=1;
           RETRY;
        ENDIF

       reg3除以reg4,如果reg4等于0(零),那么跳转到错误处理程序,重新为reg4赋值。 然后RETRY从错误处理程序跳出,回到产生错误的除法指令,执行除法指令。


       错误处理程序与机器人运动示例(在机器人运动过程中产生某种错误时,如何在自动模式下恢复错误

PROC

        CONST robtarget service_pos := [...];
        VAR robtarget stop_pos;
        ...
     ERROR
        IF ERRNO = AW_WELD_ERR THEN
                ! Current movement on motion base path level is already stopped.
                ! New motion path level for new movements in the ERROR handler
        StorePath;
                ! Store current position from motion base path level
        stop_pos := CRobT(\Tool:=tool1, \WObj:=wobj1);

                ! Do the work to fix the problem
        MoveJ service_pos, v50, fine, tool1, \WObj:=wobj1;
        ...
                ! Move back to the position on the motion base path level
        MoveJ stop_pos, v50, fine, tool1, \WObj:=wobj1;
                ! Go back to motion base path level
        RestoPath;
                ! Restart the stopped movements on motion base path level,
                ! restart the process and retry program execution
        StartMoveRetry;
        ENDIF
ENDPROC



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象的七大原则

总脉络图: 一:单一职责原则(全称:“Single-Responsibility Principle”)又称 单一功能原则 核心:解耦和增强内聚性(高内聚,低耦合) 说明: 就一个类而言,应该只专注于做一…

福建工程学院寒假作业G题

涨姿势题就是所谓的优化题,在组队赛中,队伍发现了一题水题,那么应该交给谁去处理?作为处理水题的代码手,应该具备什么样的素养?1,要快,水题拼的就是速度!2,不…

excel 多列匹配相等后 引用值

2019独角兽企业重金招聘Python工程师标准>>> 场景 如图下,当A、B列与E、F列皮配上,C列则引用G列的值 原理 VLOOKUP只能查找单列值。我们可以把多列值拼接后形成一个虚拟列,然后VLOOKUP函数查找这个虚拟列进行匹配。 在C1处输入下…

【BUG调试】——OSError: Caught OSError in DataLoader worker process 0

目录 问题描述: 参考链接 问题分析 解决方案 出现情况 问题描述: 在使用pytorch搭建了VGG从头开始训练时出现了以下问题: OSError: Caught OSError in DataLoader worker process 0 参考链接 参考up主视频:4.2 使用pytor…

cvAdd()和 cvAddS()函数的使用

函数原型如下: voidcvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* maskNULL ); src1 第一个原数组 src2 第二个原数组 dst 输出数组 mask 操作的复盖面, 8-bit单通道数组; 只有复盖面指定的输出数组被修改。 函数 cvAdd 加一个数…

设计模式之接口隔离原则

这个原则想必大家从字面就可以猜出大体的含义,其实这个原则可以说是依赖倒置原则的一种进化补充,因为依赖倒置原则告诉我们实现类的各种依赖关系应该尽量隔离在抽象里面,同时底层的接口协议不应该依赖上层协议的变更而变更,所以我…

iOS 图解多线程

转载于:https://www.cnblogs.com/OnNineMonkey/p/5385963.html

Egret之位图字体

1 , 关于位图字体的制作 2 , egret官方提供的资源 看看cartoon-font.fnt的内容 {"file":"cartoon-font.png","frames":{ "A":{"x":1,"y":54,"w":21,"h":24,"offX":2,"offY&qu…

【机器视觉】——平面测量实际尺寸(像素尺寸转物理尺寸)

目录 方法一:比例尺法 方法:二:三角法 方法三:相机标定 以下方法均在平面的前提下进行 方法一:比例尺法 在一张纸上绘制一个带刻度的直线,将纸张放在摄像头下,抓取任意两点的像素坐标,计算像素距离pd,再根据刻度读取实际距离ad,根据两者可以求出缩放比例,即地图上…

图像处理基本算法-滤波

线性滤波器的向量表示: W是一个大小为m*n的滤波器的系数,Z为由滤波器覆盖的相应图像的灰度值。 线性滤波器所能是实现的就是乘积求和操作。 几种常见的滤波器: 平滑空间滤波器如均值滤波 统计排序滤波器如中值滤波 锐化空间滤波器如锐化…

20145122《Java面向对象程序设计》实验二实验报告

实验名称: Java面向对象程序设计 实验内容: 初步掌握单元测试和TDD理解并掌握面向对象三要素:封装、继承、多态初步掌握UML建模熟悉S.O.L.I.D原则了解设计模式 PSP时间 步骤耗时百分比需求分析1h12.5%设计1h12.5%代码实现3h37.5%测试1h12.5%分…

iOS中AutoLayer自动布局流程及相关方法

关于UIView的Layer,IOS提供了三个方法: 1、layoutSubviews 系统重写布局:在iOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),iOS5.1之后(iOS6开始)的版本,此方法的缺省实现是使用你设置在此view上面的co…

移动开发web第一天

一、适配问题解决方案:流式布局 viewport1、流式布局百分比布局,通过设置盒子的宽度为百分比来根据屏幕的大小进行伸缩,特点是不受固定像素的限制,内容向两侧填充2、viewport在移动端用来承载网页的这个区域,就是我们…

均值滤波 中值滤波 高斯平滑滤波

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素…

javaWeb开发总结 ---- 前端数据插入到后台

一,概述: 本文主要描述如何将数据通过表单提交到后台并插入到数据库.其中后台使用spring框架. 二,开发流程: 明确需求,即将什么数据插入到数据库平台搭建,配置spring, 数据库&#…

对clear float 的理解

之前自己对于清除浮动的用法比较模糊 ,如果用到的话,一般都是采用简单粗暴的方式解决,就是直接用overflow:hidden,但是越用久就会发现其实有BUG,这个BUG正是overflow:hidden带来的,因…

【机器视觉】——相机标定降低重投影误差方法

目录 一、标定结果分析 二、影响标定误差的原因 1、平面标定板黑白棋盘格的精度

linux 安装RedisLive

为什么80%的码农都做不了架构师?>>> RedisLive 用来监控Redis,便于redis性能分析 安装步骤: 1.安装pip(代码参考:https://github.com/pypa/pip) 官方网站:https://pypi.python.org/…

高斯滤波和双向滤波的区别与联系

1. 简介 图像平滑是一个重要的操作,而且有多种成熟的算法。这里主要简单介绍一下Bilateral方法(双边滤波),这主要是由于前段时间做了SSAO,需要用bilateral blur 算法进行降噪。Bilateral blur相对于传统的高斯blur来说…