2.7 多任务处理
2.7.1 多任务定义
多任务是指系统可以同时执行多个程序。理论上可以同时执行的程序达到32个,出厂设置为8个。在系统中有一个程序存放区,该存放区分为32个任务区(也翻译为“插槽”,相当于一个档案柜有很多抽屉),每一个任务区存放一个程序。在软件中可以对每一程序设置“程序名”“循环运行条件”“启动条件”“优先运行行数”。如图2-16所示。
图2-16 程序的存放区域
以参数TASKMAX设置多任务运行的“最大程序数”。
2.7.2 设置多程序任务的方法
(1)任务区内程序的设置和启动
①如果同时运行的都是运动程序,则多个程序运行会造成混乱。所以将“运动程序”置于“第1任务区(插槽1)”。其他“数据运算型程序”置于第2~7区。
②程序的启动。可以在“第1任务区(插槽1)”内的程序通过指令启动其他任务区内的“程序”。相关指令如下:
XLoad——XLoad 2,“10”:指定任务区号和装入该任务区的“程序号”。
XRun——XRun 2:启动运行2号任务区(插槽)内程序。
XStp——XStp 2:停止执行2号任务区(插槽)内程序。
③样例程序。在图2-16中,各任务区程序之间可以通过“用户基本程序”、“全局变量”、“用户定义的全局变量”进行信息交换,这样也是实现各程序启动停止的方法和渠道。
a.任务区1程序
1 M_00= 0' M_00为"全局变量" 2 * L2 If M_00= 0 Then * L2' 对M_00进行判断 3 M_00= 0' 设置M_00= 0 4 Mov P1 5 Mov P2 100 GoTo * L2
b.任务区2程序(信号及变量程序)
1 If M_In(8)<>1 Then * L4' 对输入信号8进行判断,如果不等于1则跳到* L4 2 M_00= 1' 设置M_00= 1这个变量被任务区1的程序作为判断条件 3 M_01= 2' 设置M_01= 2 4 * L4
④程序的启动条件
a.可以设置程序的启动条件为“上电启动”或“遇报警启动”。“START”信号为同时启动各任务区内程序。
b.可以对每个任务区(插槽)设置“外部信号”进行启动。
在使用外部信号控制各任务区时,如果在2~7插槽中设置的程序为运动程序,则在发出相关的启动信号后,系统立即报警——“未取得操作权”。如果设置的程序为数据运算程序,则不报警。
(2)各任务区内的工作状态
各任务区内的工作状态如图2-17所示。每一任务区的工作状态可以分为:
图2-17 任务区内的工作状态及其转换
①“可选择程序状态”——本状态表示原程序已经运行完成或复位。在此状态下可以通过“指令XLOAD”或“参数”选择“装入”新的程序。
②“待机状态”——等待“启动”指令启动程序或“复位指令”回到“可选择程序状态”。
③“运行状态”——通过XSTP指令可进入“待机状态”。通过程序循环结束可进入“可选择程序状态”。
(3)对多任务区的设置
①设置程序名 在RT ToolBox软件中可通过参数设置各任务区内的程序名,如图2-18所示。
图2-18 在RT ToolBox软件中通过参数进行的设置
②同时启动信号 通过外部信号可以对各任务区进行“启动”“停止”。“START”信号为同时启动各任务区内程序。
③分别启动信号 通过外部信号可以对各任务区分别进行“启动”“停止”。S1 START~SnSTART分别为启动各任务区的信号。如图2-19所示。
图2-19 各任务区的“启动信号”
④分别停止信号 通过外部信号可以对各任务区分别进行“停止”。S1 STOP~SnSTOP分别为各任务区的停止信号。如图2-20所示。
图2-20 各任务区的“停止信号”
2.7.3 多任务应用案例
(1)程序流程图
图2-21为任务区1和任务区2内的程序流程图,两个程序之间有信息交流。
图2-21 在任务区1和任务区2内的程序
(2)各位置点的定义
图2-22是工作位置点示意图。
图2-22 工作位置点示意图
①P1抓取工件位置并暂停Dly 0.05s;
②P2放置工件位置并暂停Dly 0.05s;
③P3视觉系统前位置Cnt连续轨迹运行;
④P4视觉系统快门位置Cnt连续轨迹运行;
⑤P_01视觉系统测量得到的(补偿)数据;
⑥P20在P2点的基础上加上了“视觉系统(补偿)数据”的新工件位置点。
(3)任务区1内的程序
1 Cnt 1'——指令连续运行 2 Mov P2,10'——移动到P2点+ 10mm位置 3 Mov P1,10'——移动到P1点+ 10mm位置 4 Mov P1'——移动到P1点位置 5 M_Out(10)= 0'——指令输出信号(10)= OFF 6 Dly 0.05'——暂停0.05s 7 Mov P1,10'——移动到P1点+ 10mm位置 8 Mov P3'——移动到P3点位置——准备照相 9 Spd 500'——设置速度= 500mm/s 10 Mvs P4'——移动到P4点位置——进行照相 11 M_02# = 0'——设置(M_01= 1/M_02= 0,用作为程序2的启动条件) 12 M_01# = 1'——对程序2发出读数据请求 13 Mvs P2,10'——移动到P2点+ 10mm位置 14 * L2:If M_02# = 0 Then GoTo * L2'——判断程序2的数据处理是否完成,M_02= 1表示程序2的数据处理完成 15 P20= P2* P_01'——定义P20的位置= P2与P_01乘法运算 16 Mov P20,10'——移动到P20点+ 10mm位置 17 Mov P20'——移动到P20点位置 18 M_Out(10)= 1'——指令输出信号(10)= ON 19 Dly 0.05'——暂停0.05s 20 Mov P20,10'——移动到P20点+ 10mm位置 21 Cnt 0'——解除连续轨迹运行功能 22 End'——程序1结束
(4)获取位置数据
程序名2(任务区2内的程序)
1 * L1:If M_01# = 0 Then GoTo * L1'——检测程序1是否发出读位置数据请求,如果M_01= 1就执行以下读位置数据程序 2 Open"COM1:"As# 1'——打开通信口1,执行1 3 Dly M_03# '——暂停 4 Print# 1,"SENS"'——发出"SENS"指令,通知"视觉系统" 5 Input# 1,M1,M2,M3'——接收视觉系统传送的数据 6 P_01.X= M1'——M1为 7 P_01.Y= M2'——M2为 8 P_01.Z= 0.0' 9 P_01.A= 0.0' 10 P_01.B= 0.0' 11 P_01.C= Rad(M3)'——M3为 12 Close'——关闭通信口 13 M_01# = 0'——设置M_01= 0,表示数据读取及处理完成 14 M_02# = 1'——设置M_02= 1,表示数据读取及处理完成 15 End'
在上例程序中,用全局变量M_ 01,M_ 02进行程序1和程序2的信息交换,是编程技巧之一。