欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ABB机器人——设置定时检测机器人状态

程序员文章站 2022-07-14 22:25:50
...

问题描述:

当机器人从位置A到位置B时,如果正常运行是6s,我们要检测这段代码,如果运行时间大于6s了,要默认其出现了问题或者是中间有什么东西阻碍了。所以要对该段代码进行时间检测。设定大于7s时,执行回原位操作。

解决方案:

用到中断指令;

    VAR clock clock_test;      //时间变量
    VAR num time_all;         //统计时间
    VAR num time;              //时间变量
    PROC Main()
        IDelete iclock_test;
        CONNECT iclock_test WITH Clock_time;
        ITimer 0.2,iclock_test;
        ISleep iclock_test;

iclock_test 为中断代号
Clock_time为中断函数
需用CONNECT将中断代号与中断程序连接起来

下面是中断函数

TRAP Clock_time
        ClkStop clock_test;
        ClkStart clock_test;
        time:=ClkRead(clock_test);
        time_all :=time_all+time;
        TPWrite "TIME IS:"+valtostr(time_all)+"s";
        IF time_all >7 THEN
            TPWrite "TIME IS SO LONG, GOHome !!1";
            IDelete iclock_test;
            RobAutoHome;
            rInitDate;
        endIF
    ENDTRAP

结合执行代码段的函数来一起分析

ClkReset clock_test;  //将时钟复位
ClkStart clock_test;   //开启时钟
IWatch iclock_test;    //启用中断指令
Move\L,610,RelTool(ther_pos_ok,0,0,1400),vVeryFast1,fine,tool_check\WObj:=wobj0;   
ISleep iclock_test;   //停止中断指令

在执行代码段上方使用时钟指令,复位并开启时钟
然后启用中断,
在执行MOVE指令时会每隔0.2s触发一下中断指令
这里讲一下为什么用time和time_all,因为在指令里用来ClkStop指令会把时钟关闭,如果不用time_all我们只能监测到第一次触发中断时获取的时间,后面都不会变,所以我们在停止时钟后,把时间保存下来后,再重新开启时钟,这样可以形成一个闭环,累加time就是总的时间了。
运行效果如下:
ABB机器人——设置定时检测机器人状态
由于我们没有想到更好的办法,所以用了时间累加的方法,如果有更好建议的,欢迎赐教!

相关标签: ABB机器人