中断 -- kuka机器人一个使用不多但却又不得不用的功能
中断什么时候用?
制动机器人和取消运动
当出现诸圆棚拿如输入等定义的事件时,控制器中断当前程序,并处理一个定义的子程序。
需停住机器人时
需要时废弃当前的轨迹规划,运行一条新的轨迹
中断程序的编写规则
中断必须先声明
由中断而调用的子程序被称为中断程序。
最多同时允许声明 32 个中断。
在同一个时间最多允许有 16 个中橘搭断激活。
注意中断的有效性
Prio: 优先级
有优先级 1、2、4 - 39 和 81 - 128 可供选择。
优先级 3 和 40 - 80 是预留给系统应用的。
某些情况下中断 19 预留给制动测试。
如果多个中断同时出现,则先执行最高优先级的中断,然后再执行优
先级低的中断。(1 = 最高优先级)
中断声明
GLOBAL INTERRUPT DECL Prio WHEN Ereignis DO Interruptprogramm
GLOBAL:全局
这里的全局和全局变量稍有不同。
看下图来理解一下GLOBAL
白底黑字为程序;彩色代表所影响的范围
这段程序声明了中断1/8/23/2
其中1/8在主程序中声明,因此interrupt1,8在main程序以及其调用的子程序中都有效
其中2在sub()程序中声明,并且加入global,因此interrupt2main程序及sub()程序中都有效
interrupt 23 声明在sub()程序中,因此仅对sub()程序有效
那如果此时有另和渣外一个主程序,在没有调用sub()的情况下interrupt2则没有效果
Prio:优先级
有优先级 1、2、4 - 39 和 81 - 128 可供选择。
优先级 3 和 40 - 80 是预留给系统应用的。
某些情况下中断 19 预留给制动测试。
如果多个中断同时出现,则先执行最高优先级的中断,然后再执行优
先级低的中断。(1 = 最高优先级)
以洞凯段计数器中断为例,不加while(1)或者足够长的for循环次数,程序就会在计满数(溢出标志tf=1)之前扫描结束。也就是说,程孙竖序都执行完了,中断请求还没发出来,当然进不了中断服务程纳誉序。加循环是让程序停到那里等中断请求,希望帮到你。首先中断函数中一般是要杜绝循环的,也不用延时的。
延时通过定时器定时来实现,中断多次进入就能实现重复多次处理。
设置一个位变量,每次进入后取反升简锋,根据它的值来给P2口服不同的值。
启动前给flag赋值1,n赋值10,然后启动咐带定时计数器,设置合适的初值,使其定时为500
bit flagint n
void hi() interrupt 2 using 2
{
if(n-->0)
吵晌 if(flag)
P2 = 0xf8
else
P2 = 0x07
flag = ~ flag
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)