快速入门 | 篇十:运动控制器多任务运行特点
供稿:深圳市正运动技术有限公司
- 关键词:正运动,运动控制器
- 摘要:之前正运动技术与大家分享了,运动控制器的固件升级、ZBasic程序开发、ZPLC程序开发、与触摸屏通讯和输入/输出IO的应用、运动控制器数据与存储的应用、运动控制器ZCAN、EtherCAT总线的使用、示波器的应用等。
之前正运动技术与大家分享了,运动控制器的固件升级、ZBasic程序开发、ZPLC程序开发、与触摸屏通讯和输入/输出IO的应用、运动控制器数据与存储的应用、运动控制器ZCAN、EtherCAT总线的使用、示波器的应用等。
今天,我们来讲解一下正运动技术运动控制器多任务运行特点。
教学视频
1、材料准备与控制器接线参考
材料准备:
1)电脑1台,安装ZDevelop3.01以上版本软件
2)控制器1个
3)24V直流电源1个
4)总线驱动器+电机(或步进驱动器+电机)若干
5)控制器接线端子若干
6)网线若干
7)连接线若干
8)输入输出设备、扩展模块、人机界面等根据实际需求选择
控制器接线参考:
2、多任务概念
任务是执行I/O刷新和用户程序等一系列指令处理的功能,一个任务是指一个正在运行的程序。
如果多个程序模块能够互不干扰的同时运行,则称为多任务。
多任务可以将复杂的程序分成几个部分,分别开任务来同时执行,每个部分的任务是独立的,这样就可以使程序的复杂运动过程变得简单明了。
ZMC运动控制器支持多任务编程,每个任务都有自己唯一的编号,此编号没有优先级意义,只是标识当前程序属于哪一个任务。
不同型号支持的任务数有所不同,支持的具体任务数量,可在连接控制器之后,在ZDevelop软件菜单栏“控制器状态”查看或在线命令发送?*max指令查看,如下图,表示该控制器支持22个任务,任务编号范围为0-21。
3、多任务优势
1)程序模块化:用户可以将程序编写成多个较小的、特定的程序,来实现客户设备指定的功能。
2)并发性:每个任务可以独立运行,任务开启后,不受其他任务的影响。
3)简化错误处理:划分多任务运行后错误处理变得简单,只需处理出错的任务。
4)命令交互:程序处于运行状态时,用户也可以随时进行命令交互,如在线修改运动参数,在线命令栏发送指令等,其他程序不受影响。
同一项目下的文件或SUB子程序可使用指令相互调用,只需将要调用任务的文件设为主任务,即给该文件设置自动运行任务号,被调用的文件不设置自动运行即可。
控制器支持多个文件任务同时运行,一个文件里面可以启动多个任务,也可以跨文件启动任务。
4、多任务状态查看
多任务状态有三种:正在运行、停止和暂停,任务状态查看有如下3种方式。
1)任务指令查看
PROC_STATUS:任务状态查看,只读参数,一次读取一个任务的状态。
返回值:0-任务停止,1-任务正在运行,3-任务暂停中。
示例:PRINT PROC_STATUS(0) '打印任务0状态
2)任务窗口查看
在菜单栏“调试”-“启动/停止调试”打开任务窗口,如下图。
任务窗口可以查看已经开启的任务的任务编号、任务运行状态、任务所在的文件和运行行号。
任务窗口看不到未使用的任务。
3)打开菜单栏“调试”-“故障诊断”窗口。
可查看控制器的支持的所有任务编号的状态、任务所处的文件和运行的行号。
此窗口也可以显示各任务报错的故障信息。
5、多任务指令
多任务操作指令有:
END:当前任务正常结束
STOP:停止指定文件运行的任务
STOPTASK :停止指定任务
HALT :停止所有任务
RUN :启动新任务运行一个文件
RUNTASK:启动新任务运行一个SUB或者运行一个带标签的程序
PAUSETASK:暂停指定任务
RESUMETASK:恢复指定任务,恢复后任务从停止处继续往下执行。
?*MAX:可以查看控制器支持的文件总数与任务总数。
开启任务时注意任务编号的填写,任务不能重复开启。
6、任务启动
任务启动有三种方式,分别是自动运行任务号设置、RUN指令和RUNTASK指令。
1、自动运行任务号:控制器上电后首先执行带自动运行任务号的文件,自动运行任务号Basic文件可设置多个,PLC文件和HMI文件仅支持一个。自动运行文件为并行运行,上电后同时开启。
2、RUN指令将文件作为一个任务启动。
示例:RUN "TuXing_001.bas",2 '将TuXing_001.bas文件作为任务2启动
3、RUNTASK指令将SUB子程序或带标签程序作为一个任务启动。可跨文件开启全局定义的SUB子程序,要开启任务的标签程序只能存在本文件内。
示例:RUNTASK 1,task_home '以任务1启动task_home子程序
使用指令开启任务时,程序扫描执行到该指令后再开启任务。
7、任务停止
停止任务指令有STOPTASK,STOP,HALT三种。
任务停止再启动就会从头执行任务。
开启任务时,一般先使用STOPTASK停止任务,再RUNTASK开启,避免任务出现重复开启报错。
1、STOPTASK支持停止文件任务、SUB子程序任务和带标签的任务。
示例:STOPTASK 2 '停止任务2
2、STOP指令支持停止Basic文件任务,推荐使用STOPTASK指令,操作更简单。
3、HALT指令停止所有任务
示例:HALT '停止项目内的所有任务
快速停止所有任务还可以使用软件菜单栏的“紧急停止”按钮。
8、任务暂停与恢复
暂停任务使用PAUSETASK指令,恢复任务使用RESUMETASK指令。恢复后任务从暂停处继续向下执行。
暂停的任务支持停止。
1、PAUSETASK:暂停指定任务
示例:PAUSETASK 1 '暂停任务1
2、RESUMETASK:恢复指定任务
示例:RESUMETASK 1 '继续运行任务1
9、任务调用框架
程序下载运行,首先启动带自动运行任务号的文件,自动运行任务号可设置多个,也可以只设置一个,其他的文件任务采用RUN指令开启。
根据要调用的程序所处位置,在自动运行的文件中加入RUN或RUNTASK指令调用其他任务执行。
多任务调用的框架如图下所示。
10、程序模块化
程序编程参考框架:
编程时进行模块划分,部分程序块在需要时才调用执行,减少程序扫描时间,提高控制器的执行效率。
程序下载运行,启动带自动运行任务号的文件,自动运行的程序一般称为主程序,执行程序初始化、参数定义、逻辑处理和启动其他任务。
在自动运行的文件中加入RUN或RUNTASK指令启动其他任务执行。
11、Basic和PLC任务相互调用
1)Basic调用PLC任务
RUN指令调用PLC文件。
RUNTASK指令调用PLC内LBL指令定义的子程序。
2)PLC调用Basic任务
PLC内使用EXE或EXEP(脉冲执行)指令,调用Basic的任务指令,从而调用Basic文件任务或子程序任务。
12、多任务演示例程
例程包括两个文件,主任务TASK0由文件自动任务号启动。
回零任务TASK1和运动任务TASK2由主任务TASK0里的任务指令启动。
SUB子程序的调用也在主任务中开启。
文件一:Main.bas
RAPIDSTOP(2)
WAIT IDLE
GlobalInit '参数定义
AxesInit '轴参数初始化
WHILE 1
IF SCAN_EVENT(IN(0))> 0 THEN '启动主运动
STOPTASK 2
'Basic开启任务调用basic文件
RUN "TuXing_001.bas",2 '以任务2运行主运动程序
ENDIF
IF SCAN_EVENT(IN(1))> 0 THEN '停止
sub_stop
ENDIF
IF SCAN_EVENT(IN(2))> 0 THEN '回零
RUNTASK 1,task_home '以任务1启动回零
ENDIF
WEND
END '主程序结束
'''参数定义
GLOBAL SUB GlobalInit()
'主程序
GLOBAL CONST AXISNUM = 3 '总轴数
GLOBAL g_state'控制器状态
g_state = 0 '0--初始状态;1--待机;2--回零;3--运行
GLOBAL deal_home '回零标志
deal_home = 0
END SUB
''' 轴参数以及IO的定义
GLOBAL SUB AxesInit()
BASE(0,1,2)
DPOS=0,0,0
MPOS=0,0,0
UNITS=100,100,100 '脉冲当量
ATYPE=1,1,1 '步进方式
SPEED=100,100,100
LSPEED=0,0,0 '起始速度
CREEP=10,10,10 '回零反找速度
ACCEL=1000,1000,1000
DECEL=1000,1000,1000
SRAMP = 20,20,20 'S曲线时间设置
DATUM_IN=8,9,10 '原点输入配置
REV_IN=-1,-1,-1 '负向限位,与原点连到一起
FWD_IN=-1,-1,-1 '正向限位
ALM_IN = -1,-1,-1
'特殊IO反转改为常开输入
INVERT_IN(8,ON)
INVERT_IN(9,ON)
INVERT_IN(10,ON)
MERGE = ON '缺省配置以主轴0进行的为连续插补
CORNER_MODE = 2 '启动拐角减速
DECEL_ANGLE = 15 * (PI/180)'开始减速的角度 15度
STOP_ANGLE = 45 * (PI/180)'降到最低速度的角度45度
END SUB
GLOBAL SUB task_home()
g_state = 2 '回零中
FOR i = 0 TO AXISNUM - 1
BASE (i) '选择参与运动的轴
CANCEL(2) '停止
WAIT IDLE
NEXT
FOR i=0 TO AXISNUM-1
SPEED(i)=50 '回零速度
HOMEWAIT(i)=100 '反找等待时间
DATUM(3) AXIS(i) '回零方式
NEXT
WAIT UNTIL IDLE(0) AND IDLE(1) AND IDLE(2)
WA 10
PRINT "回零完成..."
BASE(0,1,2)
DPOS=0,0,0
MPOS=0,0,0
g_state = 1 '回零完成,回到待机状态
deal_home = 1 '回零完成标志
END SUB
GLOBAL SUB sub_stop() '停止
STOPTASK 2 '停止运动主程序
STOPTASK 1
RAPIDSTOP(2)
WAIT IDLE
g_state = 1 '轴停止,回到待机状态
END SUB
文件二:TuXing_001.bas
'主运动程序模块,任务2
IF deal_home = 1 THEN '判断回零是否完成
g_state = 3 '运动中
PRINT "开始运动..."
TRIGGER
BASE(0,1,2)
MOVEABS(0,0,0)
MOVE(100) AXIS(2)
MOVECIRC(200,0,100,0,1) '半径100顺时针画半圆,终点坐标(300,100)
MOVE(0,-200)
MOVECIRC(-200,0,-100,0,1)
WAIT IDLE(0)
WAIT IDLE(2)
PRINT "结束运动..."
g_state = 1 '运动完成
ELSE
PRINT "轴未回零,请先回零..."
ENDIF
END
正运动技术运动控制器多任务运行特点就分享到这里,更多精彩内容,请关注我们的公众号。
本文由正运动小助手原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
关于正运动技术
正运动技术是一家专注于运动控制技术研发与应用的国家级高新技术企业,主要从事运动控制器、运动控制卡、IO扩展模块、运动显控一体机等系列产品的研发、生产、销售和服务。
公司汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校致力于运动控制技术研究与应用,是国内工控领域发展最快的企业之一,也是国内完整掌握运动控制核心技术和实时工控软件平台技术的企业。