跳到主要内容

8.6 任务列表

xCore 控制系统支持多任务。

通过多任务,可实现多个机器人程序的“并行”,典型应用场景:

  • 持续监控某个信号,即使 Main 主程序已经停止运行(类似于后台 PLC 功能,但是响应速度比不上真正的 PLC)

  • 在机器人执行运动主程序的同时,跟外设进行数据接收、发送等处理,而不受到主程序执行逻辑的限制

  • 机器人工作的时候,通过示教器获取一些输入

xCore 系统的“任务列表”,提供了对并行处理任务的管理界面,用户可以在该界面查看已有任务属性,新建、编辑、删除任务。

8.6
Figure 1. 图:任务列表界面示意图

8.6.1 任务属性

新建或编辑任务时,需要设置任务属性。

8.6.1
Figure 2. 图:任务属性编辑界面示意图
任务属性 描述

任务名称

任务的名称在所有任务中必须是唯一的,任务名称仅支持字母数字下划线,首字母不能为数字,最长为 20 个字符。

描述

描述任务的作用,辅助使用者理解。

任务类型

包括常规任务、运动任务、半静态任务、视觉任务(配合 xVision 使用)。其中,运动任务指可以使用 RL 指令来控制机器人的运动,一个工程只能运行一个运动任务。

自动开始

配合生产模式使用,选中自动开始表示系统重启时程序开始重新执行。通常情况下不会被示教器或者急停停止。

优先级

设置任务运行的优先级。

创建文件

勾中生成 main 函数时,创建任务之后会自动生成 main 函数;其他函数同理。

8.6.2 常规任务、运动任务

8.6.2.1 新建任务

新建第一个任务前,请先新建工程。如果已有工程,想新增一个任务,则无需重复新建工程。

8.6.2.1 3
8.6.2.1 1

新建一个任务后,可以编辑该任务的属性。

8.6.2.1 2
  • 支持 10 个任务。

  • 最多只能有一个运动任务运行。

  • 更改任务类型、任务入口函数、是否运动任务属性即时生效。

8.6.2.2 新建程序模块

每个任务可以包括若干程序模块(.mod 文件),如下图所示,点击编辑按钮。

8.6.2.2 1

在新的页面点击“+”,新建程序模块。设置模块的名称、描述等基本信息后,点击“确定”,完成程序模块的创建。

8.6.2.2 2

此时,任务列表可以查看新建的程序模块。

8.6.2.2 3

RL 编辑器上方,也可以选择新的程序模块,并进行编程。

8.6.2.2 4
8.6.2.3 启动和运行

在 RL 编辑器上方8.6.2.3(1 可以选择任务。在手动使能或者自动上电情况下,可使用启动/停止按钮或者外部信号控制选中任务的启停。

8.6.2.3

使用限制:

  • 通常情况下,一个后台任务会一直循环运行。如果一个任务中不包含任何等待指令,那么后台任务可能会消耗过多的计算器资源而导致控制器无法处理其他的任务。

  • 变量 VARS 和常量 CONST 作用域限制在各自的任务中,但是 GLOBAL 级别的 PERS 变量为全局变量。

  • 当执行 PPToMain 时,所有没有运行的任务都执行 PPToMain。

  • 有任务运行时,禁止修改任务列表中的内容。

8.6.2.4 任务间通信

任务间通信支持两种方式,PERS 变量。

任务间使用 PERS 变量通信:

  • 在所有需要进行通信的任务工程中都定义相同名称的 GLOBAL 级别的 PERS 变量,且变量的数据类型、维数均应相同。

  • 在需要的地方使用 PERS 变量来控制任务执行、传递数据等。

  • 变量列表、点位列表的所有变量所有任务都可以随意使用。

使用限制: * 只需在其中一个任务中为 PERS 变量指定初始值即可。如果在多个任务中为同一个 PERS 变量指定了初始值,那么将使用第一个运行的任务中定义的初始值。 * 通过 PERS 变量以及 WaitUntil 或 WHILE 指令的方式让一个任务等待另一个任务时,需要注意配合等待指令(大于 0.1s),避免程序快速执行空判断语句导致占用过多系统资源。

8.6.3 半静态任务

从 v2.0.1 版本开始,xCore 控制系统提供半静态任务功能。半静态任务从属于多任务功能,运行的也是 RL 语言编写的程序。相比常规任务和运动任务,半静态任务有两个特点:一是它在正确配置之后,无需上电、启动等指令,就能开机后自启动;二是暂停按钮不会停止半静态任务。这两个特点使得半静态任务的运行周期覆盖几乎整个控制系统从开机到关机的时间。

半静态的典型应用:

  • 周期性判断机器人的位置,并通过寄存器、IO 等通知上位机

  • 输出自定义心跳信号

  • 转发多个设备之间的数据

8.6.3.1 创建半静态任务

在任务列表,点击“+”,新建任务。任务类型选择“半静态任务”,完成其他属性设置;点击“下一步”按钮,创建一个半静态任务。

8.6.3.1
8.6.3.2 启动、停止半静态任务

跟常规任务的启动一样,创建并配置好半静态程序后,手动上电或者自动模式上电后,点击运行,即可启动半静态任务。如果工程中有半静态任务正在运行,则在底部状态栏中间会显示半静态状态图标8.6.3.2(1。此时点击暂停或者下电,半静态任务都不会停止,点击底部状态栏的“状态”按钮,将弹窗确认对话框,8.6.3.2(2 点击“确认”将执行停止半静态任务操作。半静态任务在不触发程序异常时,只有这个按钮可以停止半静态任务(需要先暂停常规任务,才能暂停半静态任务)。

8.6.3.2
8.6.3.3 配置半静态开机自启动

在工程配置界面,将半静态任务所属的工程设置为默认工程。

8.6.3.3 1

并在任务列表中,勾选半静态任务的“开机运行”和“是否运行”两个选项。

8.6.3.3 2

最后再点击 PPToMain,将工程配置从 HMI 同步到控制器,可使半静态任务自启动。

8.6.3.4 半静态任务安全级别

除了常规任务的优先级和是否运行等配置,半静态任务有一个额外属性:安全级别。

它用于定义半静态任务工作出现异常(比如数据接收失败)时,控制器对于半静态任务的异常处理策略。

  • 安全无关: 适用于上位机或者操作人员对半静态任务的工作情况不在意的情况,配置该安全级别的半静态任务如果运行出错,则只会将自己停止,其他的任务运行不受影响。

  • 系统停止: 适用于半静态任务的数据影响程序安全逻辑的情况(比如通过半静态决定运动点位、通过半静态通知上位机如何控制机器人),系统停止级别的半静态任务如果运行出错,会将所有任务暂停。

8.6.3.5 半静态任务调试建议
  • 控制器支持在手动上电模式对半静态任务进行单步调试,但是仍然建议先使用常规任务调试完成之后,再将任务类型改为半静态任务,以避免调试过程中重启,未调试完成的半静态任务开机启动引发意外。

  • 半静态任务中对可能执行失败的指令尽量增加错误处理,比如 ReadXX 指令就很可能因为网络波动、外部设备意外等原因导致读取超时或者失败,如果要达成半静态任务尽量不停止的需求,则应该使用 try_catch 语句将可能失败的代码保护起来,并在 catch 语句中进行错误处理(比如 goto 到 Read 之前重新读数据)。

  • 由于半静态任务本身长期执行的特殊性,程序调试界面右上角的单次循环运行设置对半静态任务不生效,所有半静态任务都是循环运行。

8.6.4 任务监控

可以在状态监控中,监控当前各任务运行状态。

8.6.5 任务导入导出

8.6.5.1 任务导出

在任务列表页面,点击左下角按钮8.6.5.1(1 ,进入工件导出界面

8.6.5.1

任务导出目标文件(包含路径)

导出格式

筛选框

任务列表

任务导出操作按钮

导出操作步骤:首先在①中输入或选择任务导出目标文件路径,②导出格式可以选择任务导出形式,③筛选框可以按照名称进行筛选,然后在④任务列表中,勾选要导出的任务,最后点击⑤中的按钮执行导出,即可在①中对应路径下生成导出的任务文件。

8.6.5.2 任务导入

任务列表页面,点击左下角按钮8.6.5.2(1,进入任务导入页面

8.6.5.2

任务导入文件

任务导入格式

任务导入选项,对于冲突项的处理策略

筛选框

任务导入选择条目

任务导入操作按钮

导入操作步骤:首先在②中选择导入格式,①中选择要导入的任务,④筛选框可以按照名称筛选,在③中选择冲突策略之后在⑤中选择要导入的任务,最后点击⑥中的完成执行导入操作,即可将选择的任务导入到本机。