2.8 多任务处理
2.8.1 多任务定义
多任务是指系统可以同时执行多个程序。理论上可以同时执行的程序达到32个,出厂设置为8个。在系统中有一个程序存放区(图2-17),该存放区分为32个任务区(也有资料翻译为“插槽”),每一个任务区存放一程序。在软件中可以对每一程序设置“程序名”“循环运行条件”“启动条件”“优先运行行数”。
图2-17 程序的存放区
以参数TASKMAX设置多任务运行的“最大程序数”。
2.8.2 设置多程序任务的方法
(1)任务区内程序的设置和启动
①如果同时运行的都是运动程序,则多个程序运行会造成混乱,所以将“运动程序”置于“第1任务区(插槽1)”,其他“数据运算型程序”置于第2~第7区。
②程序的启动 可以使“第1任务区(插槽1)”内的程序通过指令启动其他任务区内的“程序”。相关指令如下:
a.XLoad。XLoad2,“10”—指定任务区号和装入该任务区的“程序号”。
b.XRun。XRun2—启动运行2号任务区(插槽)内的程序。
c.XStp。XStp2—停止执行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′——前进到P1点。 5 Mov P2′——前进到P2点。 100 GoTo*L2′——跳转到*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-18所示。每一任务区的工作状态可以分为:
图2-18 任务区内的工作状态及其转换
①“可选择程序状态”—本状态表示原程序已经运行完成或复位。在此状态下可以通过“指令XLoad”或“参数”选择“装入”新的程序。
②“待机状态”—等待“启动”指令启动程序或“复位指令”回到“可选择程序状态”。
③“运行状态”—通过XStp指令可进入“待机状态”,通过程序循环结束可进入“可选择程序状态”。
(3)对多任务区的设置
①设置程序名 在RT ToolBox软件中可通过参数设置各任务区内的程序名,如图2-19所示。
图2-19 在RT ToolBox软件中通过参数进行的设置
②同时启动信号 通过外部信号可以对各任务区进行“启动”“停止”。“START”信号为同时启动各任务区内程序。
③分别启动信号 通过外部信号可以对各任务区分别进行“启动”“停止”。S1START~SNSTART为分别启动各任务区的信号,如图2-20所示。
图2-20 各任务区的“启动信号”
④分别停止信号 通过外部信号可以对各任务区分别进行“停止”。S1STOP~SNSTOP为分别停止各任务区的信号,如图2-21所示。
图2-21 各任务区的“停止信号”
2.8.3 多任务应用案例
(1)程序流程图
图2-22为任务区1和任务区2内的程序流程图,两个程序之间有信息交流。
图2-22 在任务区1和任务区2内的程序
图2-23是工作位置点示意图。
图2-23 工作位置点示意图
各位置点的定义:
P1—抓取工件位置并暂停0.05s。
P2—放置工件位置并暂停0.05s。
P3—视觉系统前位置Cnt连续轨迹运行。
P4—视觉系统快门位置Cnt连续轨迹运行。
P_ 01—视觉系统测量得到的(补偿)数据。
P20—在P2点的基础上加上了“视觉系统(补偿)数据”的新工件位置点。
(2)任务区1内的程序
1 Cnt1′——指令连续运行。 2 Mov P2,10′——移动到P2点+10mm位置。 3 Mov P1,10′——移动到P1点+10mm位置。 4 Mov P1′——移动到P1点位置。 5 M_Out(10)=0′——指令输出信号(10)=OFF。 6 Dly0.05′——暂停0.05s。 7 Mov P1,10′——移动到P1点+10mm位置。 8 Mov P3′——移动到P3点位置,准备照相。 9 Spd500′——设置速度=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 Dly0.05′——暂停0.05s。 20 Mov P20,10′——移动到P20点+10mm位置 21 Cnt0′——解除连续轨迹运行功能。 22 End′——程序1结束。
(3)获取位置数据 程序名2 (任务区2内的程序)
1 *L1:If M_01#=0 Then GoTo*L1′——检测程序1是否发出读位置数据请求,如果M_01=1就执行以下读位置数据程序。 2 Open"COM1:"As #1′——打开通信口1,将传入的文件作为11#文件。 3 Dly M_03#′——暂停。 4 Print #1,"SENS"′——发出“SENS”指令,通知“视觉系统”。 5 Input #1,M1,M2,M3′——接收视觉系统传送的数据。 6 P_01.X=M1′——设置M1为X轴数据。 7 P_01.Y=M2′——设置M2为Y轴数据。 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为C轴数据。 12 Close′——关闭通信口。 13 M_01#=0′——设置M_01=0,表示数据读取及处理完成。 14 M_02#=1′——设置M_02=1,表示数据读取及处理完成。 15 End′——主程序结束。
在上例程序中,用全局变量M_01,M_02进行程序1和程序2的信息交换,是编程技巧之一。