工业机器人应用案例集锦
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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的信息交换,是编程技巧之一。