1. 机器人希望从下图位置Target_10往Target_20走,在到达Target_20前20mm(位于Target_50位置)时判断信号,若信号di0为1则机器人继续走到Target30,信号di0为0则机器人走到目标点Target_40
3. 若采用如下代码
4. 若采用如下代码,则机器人会在13行等待机器人运行完毕再往下执行,机器人动作准确,但机器人会在Target_20点停止。
5. 实际希望机器人在行进时在Target_20前20mm位置处判断信号为1,机器人轨迹如上图黑色轨迹,即机器人会在Target_20处以z10效果圆滑过去,而不会走到Target_20点。
6. 可以利用TriggInt,配合TriggL来实现,即在目标点前几mm处触发中断,中断内机器人判断信号并修改标志位,TriggL下一句判断标志位后继续运动。整个运动过程中,转弯半径不使用fine,以避免机器人停止。
TriggInttrigg1,5,intno1 表示在目标点前5mm触发中断程序
7. 具体代码如下:
VAR intnum intno1;
VAR triggdata trigg1;
VAR bool flag1;
VAR bool flag2;
PROC Path_30()
flag1:=FALSE;
flag2:=FALSE;
Idelet intno1;
CONNECT intno1 WITH tr_read;
TriggInt trigg1,20,intno1;
!目标点前20mm触发中断,也可使用提早时间等
MoveL Target_10,v1000,z10,MyTool\WObj:=wobj0;
TriggL Target_20,v50,trigg1,z10,MyTool\WObj:=wobj0;
!目标点前20mm触发中断
waituntil flag2=TRUE;
!等待flag2,阻止预读
IF flag1 THEN
MoveL Target_30,v100,z10,MyTool\WObj:=wobj0;
ELSE
MoveL Target_40,v100,z10,MyTool\WObj:=wobj0;
ENDIF
ENDPROC
TRAP tr_read
IF di0=1 THEN
flag1:=TRUE;
!执行中断时判断信号
ELSE
flag1:=FALSE;
ENDIF
flag2:=TRUE;
!完成信号读取并修改标志位flag2
ENDTRAP
了解更多可咨询:ABB机器人配件服务商