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

问题描述:

当机器人从位置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机器人——设置定时检测机器人状态_第1张图片
由于我们没有想到更好的办法,所以用了时间累加的方法,如果有更好建议的,欢迎赐教!

###6月17日补充:
上面的方法麻烦了,时钟没必要stop,也可以读取。故将中断函数改为如下即可:

中断函数

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

你可能感兴趣的:(ABB机器人)