• 沒有找到結果。

多任务

在文檔中 技术参考手册 (頁 88-93)

请参阅 第39页的运用表达式中的函数调用。

1.21 多任务

描述

一个机械臂安全围笼中的所有事件通常是并行的,那为什么程序不是并行的呢?

多任务RAPID是执行(伪)并行程序的一种方式。可将一个并行程序放入另一程序的 后台或前台。另外,也可与另一程序同在一个级别上。

有关所有设置,参见技术参考手册 - 系统参数。

限制

但在使用多任务RAPID上有几个限制。

• 不要混淆并行程序与PLC。响应时间与某一任务的中断响应时间相同,但在任 务不在另一繁忙程序的后台时,这才是真的。

• 以手动模式运行Wait指令时,约3秒后,将出现一个仿真逻辑单元。但这只会 出现在NORMAL任务中。

• 在运动任务中只能执行移动指令(程序实例0中的任务绑定,参见技术参考手 册 - 系统参数)。

• 在其他任务正访问文件系统时,也就是,若操作员选择保存或打开程序或任务 中的程序采用加载/清除/读取/写入指令,将停止执行任务。

除了一项NORMAL任务外,FlexPendant示教器不能访问其他任务。因此只有 在将代码载入NORMAL任务或在离线时才能开发其他SEMISTATIC 或STATIC 任务的RAPID程序。

基本要素

为使用该函数,必须为该机械臂的每个附加程序都额外配置一个任务(TASK)。每 个任务可为NORMAL、STATIC或SEMISTATIC类型。

多达20项任务可同时伪并行运行。每项任务由一组模块按正常程序那样的方式构成。

每项任务中的所有模块都呈局部性。

每项任务中的变量、常量和永久数据对象都呈局部性,但也有例外,即全局永久数据 对象。若未声明该永久数据对象为LOCAL或TASK,则默认其为全局永久数据对象。

可在声明的全局永久数据对象所在的所有任务中,访问名称和类型相同的全局永久数

WaitSyncTask i

i 若机械臂配备了功能MultiTasking。

用途 功能

恢复对指定RAPID代码区域或系统资源的专有权(输入用户投票 数)。

TestAndSet

恢复对指定RAPID代码区域或系统资源的专有权(输入中断控制 符)。

WaitTestAndSet

下一页继续

88 技术参考手册 - RAPID语言概览

1.21 多任务

用途 功能

检查程序任务是否控制了部分机械单元 TaskRunMec

检查程序任务是否控制了任意工具中心接触点-机械臂 TaskRunRob

获取机械单元的名称 GetMecUnitName

用途 数据类型

识别系统中的有效程序任务。

taskid

指定同步点的名称。

syncident

指定几项RAPID程序任务 tasks

带联动机械臂的MultiMove系统

用途 指令

启动一系列同步移动 SyncMoveOni

结束同步移动 SyncMoveOff

重设同步移动 SyncMoveUndo

i 若机械臂配备了功能MultiMove Coordinated。

用途 功能

告知当前任务是否处于同步模式 IsSyncMoveOn

返回同步任务量 TasksInSync

用途 数据类型

指定同步点的名称 syncidenti

指定几项RAPID程序任务 tasks

移动指令的识别号 identno

i 若机械臂配备了功能MultiTasking。

使任务同步

在许多应用程序中,一项并行任务只会监督部分安全围笼单元,完全不受正在执行的 其他任务的影响。在这种情况下,不需要同步机制。但也有一些应用程序,需要了解 正执行的主要任务(举例说明)。

使查询运用同步

这是实现同步的最简单方式,但过程是最慢的,即,永久数据对象与WaitUntil、

IF、WHILE或GOTO结合使用。

若用的是指令WaitUntil,则每隔100ms会在内部查询一次。同时,在其他应用中查 询也不要过于频繁。

示例

任务1:

MODULE module1

PERS bool startsync:=FALSE;

PROC main()

startsync:= TRUE;

下一页继续

技术参考手册 - RAPID语言概览 89

1.21 多任务 续前页

ENDPROC ENDMODULE 任务2:

MODULE module2

PERS bool startsync:=FALSE;

PROC main()

WaitUntil startsync;

ENDPROC ENDMODULE

使中断运用同步

运用指令SetDO和ISignalDO。

示例

任务1:

MODULE module1 PROC main()

SetDO do1,1;

ENDPROC ENDMODULE 任务2:

MODULE module2 VAR intnum isiint1;

PROC main()

CONNECT isiint1 WITH isi_trap;

ISignalDO do1, 1, isiint1;

WHILE TRUE DO WaitTime 200;

ENDWHILE

IDelete isiint1;

ENDPROC

TRAP isi_trap .

ENDTRAP ENDMODULE

任务间通信

MODULE module1

PERS bool startsync:=FALSE;

PERS string stringtosend:=””;

下一页继续

90 技术参考手册 - RAPID语言概览

1.21 多任务 续前页

PROC main()

stringtosend:=”this is a test”;

startsync:= TRUE

ENDPROC ENDMODULE TASK 2:

MODULE module2

PERS bool startsync:=FALSE;

PERS string stringtosend:=””;

PROC main()

WaitUntil startsync;

!read string

IF stringtosend = “this is a test” THEN ...

ENDIF ENDPROC ENDMODULE

任务类型

每项任务都必须是NORMAL、STATIC 或SEMISTATIC类型。

按系统启动顺序启动STATIC 和SEMISTATIC任务。若任务是 STATIC类型,则将在 当前位置(系统断电时PP所在位置)重启该任务。若将任务设置为SEMISTATIC,则 每次通电时将从开始启动,同时若模块文件比加载模块更新更快,则要重新加载系统 参数中指定的模块。

启动时,不会启动NORMAL类型的任务。这些任务将按正常方式启动,如通过 FlexPendant示教器。

优先级

默认的任务运行方式是以循环方式运行同处一级的所有任务(各实例中的一个基本步 骤)。而通过将任务嵌入另一任务的后台,则可能改变某一任务的优先级。随后该后 台只有在前台等待某些事件或已停止执行(空闲状态)时才能执行。大多数时候,含 移动指令的机械臂程序都处于空闲状态。

下述示例介绍了系统有10项任务时的部分情况(参见图9)。

循环链1:任务1、2和9正处于繁忙状态。

循环链2:任务1、4、5、6和9正处于繁忙状态,而任务2和3处于空闲状态。

循环链3:任务3、5和6正处于繁忙状态,而任务1、2、9和10处于空闲状态。

下一页继续

技术参考手册 - RAPID语言概览 91

1.21 多任务 续前页

循环链4:任务7和8正处于繁忙状态,而任务1、2、3、4、5、6、9和10处于空闲状 态。

xx1100000589

图9:任务优先级可有所不同

信任级别

出于某种原因停止SEMISTATIC或STATIC任务时或此任务不可执行时,由信任等级 处理系统行为。

SysFail—这是默认行为,同时所有其他NORMAL任务将停止,系统被设为 SYS_FAIL状态。拒绝所有手动控制和程序启动命令。只有通过热重启重置系 统。这可用于任务具备一定的安全监管时。

SysHalt—将停止所有NORMAL任务。迫使系统电机关闭。使系统电机开启时,

可手动控制机械臂,但拒绝再次尝试启动程序。同时热重启将重置系统。

SysStop—将停止所有NORMAL任务,但可重启。同时也可手动控制。

NoSafety —只有实际任务本身才会停止。

参见 技术参考手册 - 系统参数,主题Controller和类型Task 推荐

指定任务优先级时,要考虑如下事宜:

• 监管任务延时时,常用中断机制或回路。不然,FlexPendant示教器再无法取得 任何时间去与用户互动。若监管任务位于前台,则禁止后台中的另一任务执行。

92 技术参考手册 - RAPID语言概览

1.21 多任务 续前页

在文檔中 技术参考手册 (頁 88-93)