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就是总的时间了。
运行效果如下:
由于我们没有想到更好的办法,所以用了时间累加的方法,如果有更好建议的,欢迎赐教!
推荐阅读