ABB机器人编程之中断指令
ABB的中断指令有:CONNECT,ISignalDI,ISignalAI,ISleep,IDisable,
ITimer,IDelete,ISignalDO,ISignalAO,IWatch,IEnable
中断指令-CONNECT
CONNECT Interrupt
WITH Trap routine
Interrupt: 中断数据名称
(intnum)
Trap routine: 中断处理程序 (Identifier)
应用﹕
将机器人相应中断数据连接到相应的中断处理程序是机器人中断功能必不可少的组成部分﹐必须同指令ISignalDI﹑ISignalDO﹑ISignalAI﹑ISignalAO﹑或ITmer联合使用
实例﹕
VAR intnum intInspect
Proc main( )
...
CONNECT intInpect WITH rAlarm;
ISignalDI di01_Vacuum,0,intInspect;
...
ENDPROC
TRAP rAlarm
TPWrite "Grip Error";
Stop;
WaitDI di01_Vacuum,1;
ENDTRAP
限制﹕
中断数据的数据类型必须为变量(VAR)﹐一个中断数据不允许同时连接到多个中断处理程序﹐但多个中断数据可以共享一个中断处理程序﹐
当一个中断数据完成连接后﹐
这个中断数据不允许再次连接到任何中断处理程序(包括已经连接的中断处理程序)﹐如果需要再次连接到任何中断处理程序﹐必须先使用指令IDelete将原连接去除。
Error Handler:
ERR_ALRDYCNT
中断数据已经被连接到中断处理程序﹔
ERR_CNTNOTVAR
中断数据的数据类型不是变量﹔
ERR_INOMAX
没有更多的中断数据可以使用﹔
中断指令-IDelete
IDelete Interrupt
Interrupt: 中断数据名称 (intnum)
应用﹕
将机器人相应中断数据与相应的中断处理程序之间的连接去除﹔
实例﹕
...
CONNECT IntInspect WITH rAlarm;
ISingalDI di01_Vacuum,0,intInspect;
...
IDelete intInspect;
限制﹕
执行指令IDelete后
﹐当前中断数据的连接被完全清除﹐如需再次使用这个中断数据必须重新使用指令CONNECT连接到相应的中断处理程序﹔
在下列情况下﹐中断程序将自动去除﹕
-重载新的运行程序﹔
-机器人运行程序被重置﹐程序指针回到主程序的第一行(Start From Beginning);
-机器人程序指针被移到任意一个例行程序的第一行(Move PP to Routine);
中断指令-ISignalDI
ISingalDI [Single],Signal,
TriggValue,Interrupt
[single]: 单次中断信号开关 (switch)
Signal: 触发中断信号
(singaldi)
TriggValue: 触发信号值
(dionum)
Interrupt: 中断数据名称
(intnum)
应用﹕
使用相应的数字输入信号触发相应的中断功能8﹐1必须同指令CONNECT联合使用
实例﹕
...
CONNECT int1 WITH iroutine1;
IsignalDIsingle di01,1,int1; //中断功能在单次触发后失效
...
CONNECT int2 WITH iroutine2;
ISignalDI di02,1,int1; //中断功能持续有效﹐只有在程序重置或运行指令IDelete后才失效
限制﹕
当一个中断数据完成连接后﹐ 这个中断数据不允许再次连接到任何中断处理程序(包括已经连接的中断
处理程序)﹐如果需要再次连接到任何中断处理程序﹐必须先使用指令IDelete将原连接去除;
PROC main( )
CONNECT int1 WITH r1;
ISignalDI di01,1,int1;
…..
IDelete int1;
ENDPROC
中断指令-ISignalDO
ISingalDO [Single],Signal,
TriggValue,Interrupt
[single]: 单次中断信号开关 (switch)
Signal: 触发中断信号
(singaldi)
TriggValue: 触发信号值
(dionum)
Interrupt: 中断数据名称
(intnum)
应用﹕
使用相应的数字输入信号触发相应的中断功能﹐必须同指令CONNECT联合使用
实例﹕
...
CONNECT int1 WITH iroutine1;
IsignalDOsingle di01,1,int1; //中断功能在单次触发后失效
...
CONNECT int2 WITH iroutine2;
ISignalDO di02,1,int1;
//中断功能持续有效﹐只有在程序重置或运行指令IDelete后才失效
...
限制﹕
当一个中断数据完成连接后﹐ 这个中断数据不允许再次连接到任何中断处理程序(包括已经连接的中断
处理程序)﹐如果需要再次连接到任何中断处理程序﹐必须先使用指令IDelete将原连接去除;
PROC main( )
CONNECT int1 WITH r1;
ISignalDO dO01,1,int1;
…..
IDelete int1;
ENDPROC
中断指令-ISignalAI
ISingalAI [Single],Signal,Condition,HighValue
LowValeu,DeltaValue,[Dpos][DNeg],Interrupt
[single]: 单次中断信号开关 (switch)
Signal: 触发中断信号
(singaldi)
Condition: 中断触发状态
(aiotrigg)
HighValue: 最大逻辑值 (num)
LowValue: 最小逻辑值 (num)
DeltaValue: 中断恢复差值 (num)
[DPos]: 正值中断开关 (switch)
[DNeg]: 负值中断开关 (switch)
Interrupt: 中断数据名称
(intnum)
中断触发状态﹕
AIO_ABOVE_HIGH 仿真量信号逻辑值大于最大逻辑值(HighValue)
AIO_BELOW_HIGH 仿真量信号逻辑值小于最大逻辑值(HighValue)
AIO_ABOVE_LOW 仿真量信号逻辑值大于最小逻辑值(LowValue)
AIO_BELOW_LOW 仿真量信号逻辑值小于最小逻辑值(LowValue)
AIO_BETWEEN 仿真量信号逻辑值处于最小逻辑值(LowValue)和最大逻辑值(HighValue)之间
AIO_OUTSIDE 仿真量信号逻辑值大于最大逻辑值(HighValue)或者小于最小逻辑值(LowValue)
AIO_ALWAYS
总是触发中断﹐与仿真量信号逻辑值处于最小逻辑值(LowValue)与最大逻辑值(HighValue)无关
应用﹕
使用相应的仿真量输入信号触发相应的中断功能﹐必须同指令CONNECT联合使用﹔
实例﹕
...
CONNECT int1 WITH iroutine1;
ISignalAISingle ai1﹐AIO_BETWEEN,2,1,0,int1; //中断功能在单次触发后失效
...
CONNECT int2 WITH iroutine2;
ISignalAI ai2﹐AIO_BETWEEN,1.5,0.5,0,int1;
...
CONNECT int3 WITH iroutine3;
ISignalAI ai3﹐AIO_BETWEEN,1.5,0.5,0.1,int3;
//中断功能持续有效﹐只有在程序重置或运行IDelete后才失效
限制﹕
当前最大逻辑值(HighValue)与最小逻辑值(LowValue)必须是仿真量信号所定义的逻辑值范围内﹔
最大逻辑值(HighValue)必须大于最小逻辑值(LowValue);
中断复位差值(DeltaValue)必须为正数或0﹔
指令ISignalDI的限制﹐仍然适用﹔
中断指令-ISignalAO
ISingalAO [Single],Signal,Condition,HighValue
LowValeu,DeltaValue,[Dpos][DNeg],Interrupt
[single]: 单次中断信号开关 (switch)
Signal: 触发中断信号
(singaldi)
Condition: 中断触发状态
(aiotrigg)
HighValue: 最大逻辑值 (num)
LowValue: 最小逻辑值 (num)
DeltaValue: 中断恢复差值 (num)
[DPos]: 正值中断开关 (switch)
[DNeg]: 负值中断开关 (switch)
Interrupt: 中断数据名称
(intnum)
中断触发状态﹕
AIO_ABOVE_HIGH 仿真量信号逻辑值大于最大逻辑值(HighValue)
AIO_BELOW_HIGH 仿真量信号逻辑值小于最大逻辑值(HighValue)
AIO_ABOVE_LOW 仿真量信号逻辑值大于最小逻辑值(LowValue)
AIO_BELOW_LOW 仿真量信号逻辑值小于最小逻辑值(LowValue)
AIO_BETWEEN 仿真量信号逻辑值处于最小逻辑值(LowValue)和最大逻辑值(HighValue)之间
AIO_OUTSIDE 仿真量信号逻辑值大于最大逻辑值(HighValue)或者小于最小逻辑值(LowValue)
AIO_ALWAYS
总是触发中断﹐与仿真量信号逻辑值处于最小逻辑值(LowValue)与最大逻辑值(HighValue)无关
应用﹕
使用相应的仿真量输入信号触发相应的中断功能﹐必须同指令CONNECT联合使用﹔
实例﹕
...
CONNECT int1 WITH iroutine1;
ISignalAOSingle ao1﹐AIO_BETWEEN,2,1,0,int1; //中断功能在单次触发后失效
...
CONNECT int2 WITH iroutine2;
ISignalAO ao2﹐AIO_BETWEEN,1.5,0.5,0,int1;
...
CONNECT int3 WITH iroutine3;
ISignalAO ao3﹐AIO_BETWEEN,1.5,0.5,0.1,int3;
//中断功能持续有效﹐只有在程序重置或运行IDelete后才失效
限制﹕
当前最大逻辑值(HighValue)与最小逻辑值(LowValue)必须是仿真量信号所定义的逻辑值范围内﹔
最大逻辑值(HighValue)必须大于最小逻辑值(LowValue);
中断复位差值(DeltaValue)必须为正数或0﹔
指令ISignalDI的限制﹐仍然适用﹔
中断指令-ISleep
ISleep Interrupt;
Interrupt: 中断数据名称 (intnum)
应用﹕
使机器人相应中断数据暂时失效﹐直到执行指令IWatch后才恢复。
实例﹕
...
CONNECT intInspect WITH rAlarm
ISingalDI di01_Vacuum,0,intInspect; //中断监控
...
ISleep intInspect; //中断失效
...
IWatch intInspect; //中断监控
...
Error Handler:
ERR_UNKINO 无法找到当前的中断数据
中断指令-IWatch
IWatch Interrupt;
Interrupt: 中断数据名称 (intnum)
应用﹕
激活机器人已失效的相应中断数据﹐正常情况下﹐与指令ISleep配合使用。
实例﹕
...
CONNECT intInspect WITH rAlarm
ISingalDI di01_Vacuum,0,intInspect; //中断监控
...
ISleep intInspect; //中断失效
...
IWatch intInspect; //中断监控
...
Error Handler:
ERR_UNKINO 无法找到当前的中断数据
中断指令-IDisable
IWatch Interrupt;
Interrupt: 中断数据名称 (intnum)
应用﹕
使机器人相应中断功能暂时不执行﹐直到执行IEnable后﹐才进入中断处理程序﹐此指令使用于机器人正在执行不希望被打断的操作其间﹐例如﹕通过通信口读写数据。
实例﹕
...
IDisable;
FOR i FROM 1 TO DO
character[i]:=ReadBin(sensor);
ENDFOR
IEnable;
...
应用﹕
开始执行被机器人暂停的相应中断功能﹐正常情况下﹐与指令IDisable配合使用﹐此指令用于机器人正在执行不希望被打断的操作期间﹐例如﹕通过通信口读写数据。
中断指令-IEnable
IEnable Interrupt;
Interrupt: 中断数据名称 (intnum)
应用﹕
开始执行被机器人暂停的相应中断功能﹐正常情况下﹐与指令IDisable配合使用﹐此指令用于机器人正在执行不希望被打断的操作期间﹐例如﹕通过通信口读写数据。
实例﹕
...
IDisable;
FOR i FROM 1 TO DO
character[i]:=ReadBin(sensor);
ENDFOR
IEnable;
...
中断指令-ITimer
IWatch [Single],Time,Interrupt;
[Single]: 单次中断开关
(switch)
Time: 触发中断时间s (num)
Interrupt: 中断数据名称 (intnum)
应用﹕
定时处理机器人相应中断数据﹐此指令常使用于通过通信口读写数据等场合。
实例﹕
...
CONNECT timeint WITH check_serialch;
ITimer 60,timeint;
...
Trap check_serialch
WriteBin ch1,buffer,1;
IF ReadBin(ch1Time:=5)<0 THEN
TPWrite “Communication
is broken”;
EXIT;
ENDIF
ENDTRAP
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com