1)机器人执行程序都是一行一行执行的,比如:

2)如果机器人在执行第17行的时候,收到了di01_PanelInPickPos信号,而运行到第19行的时候,di01_PanelInPickPos信号被PLC置为FALSE了,那么执行第4行的时候,机器人就会一直等待信号。
3)实际上,di01_PanelInPickPos信号曾经有过,只是机器人没有执行到waitdi语句。
4)可以使用中断来实现上述要求
5)创建一个bool变量flag1,置为false

6)创建一个中断号into1
7)新建一个新的trap_di,类型为中断trap,该类型trap_di不能直接运行,必须由IsignalXX类似指令触发

中断程序内容如下:


PROC rPick()
MoveL p10, v1000, fine, tool0\WObj:=wobjCNV;
MoveL p20, v1000, fine, tool0\WObj:=wobjCNV;
WaitDI di01_PanelInPickPos, 1;
MoveL p30, v1000, fine, tool0\WObj:=wobjCNV;
Set do32_VacuumOpen;
MoveL p40, v1000, fine, tool0\WObj:=wobjCNV;
ENDPROC
PROC rInitAll()
flag1 := FALSE;
IDelete intno1;
CONNECT intno1 WITH trap_di;
WHILE TRUE DO
MoveL p10, v1000, fine, tool0\WObj:=wobjCNV;
MoveL p20, v1000, fine, tool0\WObj:=wobjCNV;
!WaitDI di01_PanelInPickPos, 1;
WaitUntil flag1 = TRUE;
flag1 := FALSE;
MoveL p30, v1000, fine, tool0\WObj:=wobjCNV;
Set do32_VacuumOpen;
MoveL p40, v1000, fine, tool0\WObj:=wobjCNV;
ENDWHILE
ENDPROC
TRAP trap_di
flag1 := TRUE;
ENDTRAP
8)上述例子25-27行为设置语句,只需要运行一遍即可。
9) 25行删除中断号
10) 26行把中断号into1和中断程序trap_di连接
11)27行设置触发条件,即di01_PanelInPickPos由0变1,会自动触发运行trap_di程序(对于trap_di的扫描,后台一直运行,所以即使机器人没有运行到相关di语句,有了信号也会触发)
12) 这样即使程序运行到25行,PLC 发过信号,机器人运行到26行di信号没有,但执行过中断程序(执行中断过程,机器人运动不停),flag1被置为true。
13)机器人运行到32行,由于flag1为true,即收到过信号,机器人可以运行
14)33行,把flag1重新置为false。
往期精彩回顾:
▼东莞机器人之家,关注有惊喜 ▼
小编微信☜
公众号二维码☞
文章都看完了
不点个
吗



