快速入门 | 篇十一: 正运动技术运动控制器中断的应用​

点击蓝字  关注伺服与运动控制

之前正运动技术与大家分享了,运动控制器的固件升级、ZBasic程序开发、ZPLC程序开发、与触摸屏通讯和输入/输出IO的应用、运动控制器数据与存储的应用、运动控制器ZCAN、EtherCAT总线的使用、示波器的应用、多任务运行的特点等。
今天,我们来讲解一下正运动技术运动控制器中断(掉电中断、外部中断、定时器中断)的应用。

运动控制器中断的应用视频
以下是图文详解。

1、材料准备与控制器接线参考


1)材料准备

  • 电脑1台,安装ZDevelop3.01以上版本软件。

  • 控制器1个。

  • 24V直流电源1个。

  • 总线驱动器+电机(或步进驱动器+电机)若干。

  • 控制器接线端子若干。

  • 网线若干。

  • 连接线若干。

  • 输入输出设备、扩展模块、人机界面等根据实际需求选择。

2)控制器接线参考

2、中断概念

“中断”即CPU在执行程序的时候出现了某些异常或突发情况,需要紧急处理,CPU必须暂停当前的任务去处理紧急突发事件,处理完之后,返回原程序被打断的地方。
中断处理分为三个阶段:

1)中断响应

打开中断总开关,发送中断请求。
2)中断处理

中断处理包括两个部分的内容:保护断点和现场,执行中断程序处理。响应中断请求后转到中断程序的入口,执行中断程序。

3)中断返回
中断程序全部处理完成后结束中断,等待下次中断触发。

3、三种中断

控制器的中断分为三种,分别为掉电中断、外部中断、定时器中断。
使用中断前必须开启中断总开关,为了避免程序没有初始化完成便进入中断,控制器上电时中断开关缺省是关闭的。
这三类中断Basic编程与PLC编程方式均支持。        

1)掉电中断

必须是全局的SUB函数。控制器只有1个掉电中断。掉电中断执行的时间特别有限,只能写少数几条语句,将数据存储在VR里。
相关函数:INT_ENABLE,ONPOWEROFF。
2)外部中断
可设置上升沿触发或下降沿触发,必须是全局的SUB函数,目前只有中断IN口0-31可以使用。必须是支持PLC功能的固件才可使用。
相关函数:上升沿中断INT_ONn,下降沿中断INT_OFFn。
3)定时器中断
达到设定时间后执行定时器中断函数,必须是全局的SUB函数,定时器个数根据控制器型号,使用?*max打印查看。
相关函数:ONTIMERn,n的取值范围为:“0”-“定时器最大编号减1”。

4、中断函数

1)Basic中断相关函数

INT_ENABLE:中断总开关,1-开启,0-关闭

ONPOWEROFF:掉电中断

INT_ONn:外部输入中断,上升沿有效,n-输入口编号
INT_OFFn:外部输入中断,下降沿有效,n-输入口编号
ONTIMERn:定时器中断,n-定时器编号
GLOBAL SUB:定义中断函数
END SUB:中断结束返回主函数

2)PLC中断相关函数

EI:允许中断,同BASIC命令,INT_ENABLE=1开启

DI:禁止中断,同BASIC命令,INT_ENABLE=0关闭

ONPOWEROFF:掉电中断

INT_ONn:外部输入中断,上升沿有效,n-输入口编号

INT_OFFn:外部输入中断,下降沿有效,n-输入口编号

ONTIMERn:定时器中断,n-定时器编号

LBL:定义中断函数

IRET:中断结束返回主函数

5、三种中断使用(Basic)

三类中断运行时,中断程序单独占用一个任务号。

不同类型中断使用例程如下:

1)掉电中断中断使用

仅支持一个,掉电瞬间触发执行,执行时间短,只能写少数几条语句。

示例:
'主程序INT_ENABLE = 1DPOS(0)=VR(0)        '上电读取保存的数值,恢复坐标DPOS(1)=VR(1)DPOS(2)=VR(2)END     '主程序结束
GLOBAL SUB ONPOWEROFF () '掉电中断 VR(0) = DPOS(0) '保存坐标到VR VR(1) = DPOS(1) VR(2) = DPOS(2)END SUB

2)外部中断上升沿/下降沿)中断使用

支持PLC功能的控制器才可以使用外部中断,必须是全局的SUB过程。INT_ONn()上升沿触发,INT_OFFn()下降沿触发,n是IN输入编号,只能选择控制器自带的编号0-31。

示例:

INT_ENABLE=1           '开启中断END      '主程序结束
GLOBAL SUB INT_ON0 () '外部上升沿中断程序 PRINT "输入IN0上升沿触发"END SUB
GLOBAL SUB INT_OFF0 () '外部下降沿中断程序 PRINT "输入IN0下降沿触发"END SUB

3)定时器中断使用

定时器中断支持同时开启多个,中断个数由定时器个数决定,必须是全局的SUB过程。ONTIMERn()中n是定时器编号。

定时器开启:TIMER_START(定时器编号,定时时间ms)

定时器结束:TIMER_STOP (定时器编号)     

定时器状态:value = TIMER_IFEND (定时器编号),只读参数,返回值:0-正在定时,1-定时完成。

示例:

INT_ENABLE=1           '开启中断TIMER_START(0,100)      '定时器0开启,100ms后执行一次END
GLOBAL SUB ONTIMER0() '中断程序 PRINT "ontimer0 enter" 'TIMER_START(0,100) '希望周期执行中断,在SUB里再次打开定时器END SUB


6、三种中断使用(PLC)

在PLC编程中,使用LBL指令定义要调用的中断函数,中断函数与Basic通用。

PLC编程下三类中断使用的简单示例如梯形图程序所示。

外部中断使用时要注意X编号为8进制,如:LBL @INT_ON8定义的外部中断的触发条件为X10的上升沿,实际接线使用IN8输入口。

中断程序运行时,占用一个任务号,此任务号为自动分配,不用手动设置。

如下图,运行定时器中断时的任务状态。

7、中断使用注意事项

1)必须支持PLC功能的固件才能使用外部中断。

2)中断函数编写为全局SUB过程。 

3)各中断之间无优先级,支持中断嵌套,多个中断可以同时执行,同一时间处理的中断函数不宜过多。

控制器内部只有一个任务在处理所有的中断信号响应,有一个固定的中断任务号,如果中断处理函数过多,并且中断处理函数的代码太长,会造成所有的中断响应变慢,甚至是中断堵塞,影响其他中断执行。

解决办法:
1)尽量减少中断的数量,很多应用都可以用循环扫描来处理。
2)如果有一个中断处理函数特别长的话,调用一个单独的任务来处理中断中的复杂任务,这样就不会堵塞其他的中断响应。
中断中开启任务运行例程如下,定时器中断0的大段代码以任务3运行,此时定时器中断0和定时器中断1均能正常触发,不存在中断堵塞的情况。

例程:

INT_ENABLE=1           '开启中断TIMER_START(0,1000)      '定时器0开启TIMER_START(1,1100)      '定时器1开启END
GLOBAL SUB ONTIMER0() '中断处理函数 RUNTASK 3, MyIntHandler() '开任务运行END SUB
GLOBAL SUB MyIntHandler() DELAY 1000 '假设大量的堵塞性代码 WAIT UNTIL IN(0) <> 0 ?"第一个中断"END SUB
GLOBAL SUB ONTIMER1() '中断处理函数 ?"第二个中断"END SUB


8、中断演示例程(Basic)

'主程序BASE(0,1)ATYPE=1,1 '设为脉冲轴类型UNITS=100,100DPOS=0,0SPEED=100,100ACCEL=1000,1000DECEL=1000,1000SRAMP=100,100  
INT_ENABLE=1 '开启中断总开关TIMER_START(2,1000) '定时器2开启,1000ms后执行一次DPOS(0)=VR(0)  '上电读取保存的数值,恢复坐标DPOS(1)=VR(1)PRINT "dpos(0),dpos(1)",dpos(0),dpos(1)
WHILE 1    IF SCAN_EVENT(IN(0))>0 THEN         TRIGGERBASE(0,1)         MOVEABS(0,0)         MOVECIRC2(100,100,200,0)  '三点画半圆    ENDIF    WEND  '主程序结束
'中断程序,均为全局SUBGLOBAL SUB ONTIMER2() '定时器中断程序 PRINT "定时器中断2"       'TIMER_START(2,1000)  '在sub里打开定时器,中断周期执行END SUB
GLOBAL SUB INT_ON2 () '外部上升沿中断程序 PRINT "输入IN2上升沿触发..." END SUB
GLOBAL SUB INT_OFF2 () '外部上升沿中断程序 PRINT "输入IN2下降沿触发..."END SUB
GLOBAL SUB ONPOWEROFF () '掉电中断    VR(0) = DPOS(0)       '保存坐标到VR    VR(1) = DPOS(1)END SUB

9、中断演示例程(PLC)

PLC语句表代码:
//主程序  X0定时中断0,X1-定时中断1,X2-上升沿/下降沿中断,X3-关闭所有中断LBL @MAINLD M8002EIEXE @ PRINT  "VR(0)",VR(0)LD X0TMR T0 K2000LD T0OUT Y0LD X1ANI  Y1TMR T1 K3000LD T1OUT Y1LD X3DIFEND
//外部中断,由控制器上的输入口控制LBL @INT_ON2LD M8000EXE @ PRINT  "外部中断2上升沿"IRETLBL @INT_OFF2LD M8000EXE @ PRINT  "外部中断2下降沿"IRET
//定时器0中断,定时器到达预设值开启中断LBL @ONTIMER0LD M8000EXE @ PRINT  "定时器中断0"IRET
//定时器1中断,定时器到达预设值开启中断LBL @ONTIMER1LD M8000EXE @ PRINT  "定时器中断1"IRET
//掉电中断,控制器断电执行此中断LBL @ONPOWEROFFLD M8000MOV K12345 D0EXE @ VR(0)=MODBUS_REG(0)IRETEND

正运动技术运动控制器中断(掉电中断、外部中断、定时器中断)的应用就分享到这里,更多精彩内容,请关注我们的公众号。  
本文由正运动小助手原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。


往期精彩回顾

快速入门 | 篇十:运动控制器多任务运行特点
快速入门 | 篇九:如何进行运动控制器示波器的应用?
快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?
快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?
快速入门 | 篇六:如何进行运动控制器数据与存储的应用?
快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?
快速入门丨篇四:如何进行运动控制器与触摸屏通讯?
快速入门 | 篇三:如何进行运动控制器ZPLC程序开发?
快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?
快速入门 | 篇一:如何进行运动控制器固件升级?
运动控制卡应用开发教程之LabVIEW
运动控制卡应用开发教程之VC6.0
运动控制卡应用开发教程之使用Qt
正运动技术XPLC516E 的开放式Linux 平台使用(上)
正运动技术XPLC516E 的开放式Linux 平台使用(下)

关于正运动技术



正运动技术是一家专注于运动控制技术研发与应用的国家级高新技术企业,主要从事运动控制器、运动控制卡、IO扩展模块、运动显控一体机等系列产品的研发、生产、销售和服务。

公司汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校致力于运动控制技术研究与应用,是国内工控领域发展最快的企业之一,也是国内完整掌握运动控制核心技术和实时工控软件平台技术的企业。

– END –

热门文章

RS232与RS485,有什么区别?

伺服系统组成、概述与控制原理

ABB收购Codian Robotics

PID原理和参数调试

80页PPT掌握PLC程序设计

特别说明:此文章素材来源于“正运动技术” ,仅代表原作者观点,版权归原作者所有!经编者收集整理后,与大家一起分享学习!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

在线客服
在线客服
QQ客服