首先我们编写正常搬运程序。
当中断时要执行的程序。
中断程序。这里面是有运动指令的。
正常程序加入中断定义后。用di01为1时触发中断程序。
很显然这样写是不能完美应对的。中断发生时,并不是人为地,恰当的时候触发中断,而是很多随机性,可能在搬运过程的任何时候触发中断。
因处理完紧急事情还要回来继续“加班”,所以第一件事是要把之前做的事停下来,做好记录,回来继续做。
然后我们把它分成两种情况,一种是夹具上已有产品,另一种是夹具上没有产品。当夹具上已经有产品了,那么直接放到P30即可,如果没有产品,则去拿到产品后再放到P30。
因为已经处理好事情了,那么要恢复路径,回到中断的地方继续执行。
如果出现中断后停机的情况,那么在主程序运动指令的转弯半径要进行修改。
在中断程序加入路径保存和恢复,优先要做的事。
中断程序解释
TRAP intmove
StopMove; 停止移动
StorePath; 保存路径
IF DO01= 1 THEN 如果夹具上有产品
pnowpos := CRobT(); 读取当前位置,并保存在pnowpos
MoveL Offs(pnowpos,0,0,50), v1000, z50, tool0; 移动到当前位置上方。
MoveL Offs(p30,0,0,100), v1000, z50, tool0; 到达放料点上方
MoveL p30, v100, fine, tool0; 到达放料点
Reset DO01; 关闭夹具
WaitTime 0.5; 缓冲一下,让夹具充分打开
MoveL Offs(p30,0,0,100), v1000, z50, tool0; 来到放料点上方
ELSE 否则,即如果夹具上没有产品
pnowpos := CRobT(); 读取当前位置,并保存在pnowpos
MoveL Offs(pnowpos,0,0,50), v1000, z50, tool0; 移动到当前位置上方。
MoveL Offs(p10,0,0,100), v1000, z50, tool0; 来到取料点上方
MoveL p10, v100, fine, tool0; 到达取料点
Set DO01; 打开夹具
WaitTime 0.5;缓冲一下,让夹具充分夹紧
MoveL Offs(p10,0,0,100), v1000, z50, tool0;来到取料点上方
MoveL Offs(p30,0,0,100), v1000, fine, tool0;来到放料点上方
MoveL p30, v100, fine, tool0;
Reset DO01;关闭夹具
WaitTime 0.5;缓冲一下,让夹具充分打开
MoveL Offs(p30,0,0,100), v1000, fine, tool0;来到放料点上方
ENDIF
MoveJ pnowpos, v1000, z50, tool0; 来到发生中断停下来的位置
RestoPath; 恢复路径
StartMove; 开始移动
ENDTRAP
联系客服