分离任务
- 更新时间2025-05-20
- 阅读时长4分钟
任务分离是指将任务放在不同的并行循环之中,创建多速率应用程序。任务分离对于大多数实时应用程序来说非常重要,原因在于:
- 确定性 – 要尽量减小确定性循环中的抖动,需保证循环中不能包含潜在的非确定性代码。因为大多数大型应用程序均包含非确定性任务,识别及分离这些任务对于RT应用程序来说至关重要。
- CPU效率 – RT终端上的CPU周期通常非常重要,所以CPU效率是设计RT应用程序的一个常见制约因素。在独立的循环内以不同的速率运行任务,仅在需要时执行每个任务能够最大化CPU的效率。
定义任务
开始编写代码之前,要定义应用程序必须进行的任务、各个任务所需的速率(如适用)和任务之间的数据传输关系,仔细考虑应用程序的顶层设计。例如,实时应用程序可能包含下列任务:
- 控制-控制液罐中液体的温度和高度。该任务的最低速率是1 kHz。
- 记录-记录采集到的温度和电平的历史数据。该任务的要求是记录控制任务采集到的每个进程变量值。该任务没有最低速率限制。
- 网络-通过网络传输用户界面数据,接收来自用户的命令以及显示连续的数据图供用户监控。该任务的最低速率是10 Hz。
定义组成应用程序的顶层任务后,需定义这些任务之间的数据传输关系。例如,下列示意图显示了上面列表中三个范例任务之间的数据传输关系。
将设计转换为LabVIEW程序框图
定义应用程序的顶层设计之后,即可开始将设计转换为LabVIEW代码。例如,下列程序框图显示了包含上面章节中定义的正在运行的任务的顶层VI:
注: 除了应用程序的主体任务,建议另创建一个初始化任务和关闭任务,如上面程序框图所示。
以下程序框图显示了子VI Control.vi中的控制循环:
以下程序框图显示了子VI Log.vi中的数据记录循环:
以下程序框图显示了子VI User_Interface.vi中的网络循环:
创建初始化程序
创建初始化程序,在任务开始执行之前处理一些准备任务。根据应用程序的性质,初始化程序包括下列操作:
- 初始化共享变量
- 打开文件引用
- 预分配数组
以下程序框图显示了子VI Initialize.vi的初始化程序:
创建关闭程序
建议在关闭实时终端之前先将应用程序切换至关闭状态。创建一个关闭程序,在当前应用程序任务停止执行后运行,以确保RT终端处于关闭状态。根据应用程序的性质,关闭程序包括下列操作:
- 将输出设置为已知值
- 关闭文件引用
- 通过网络发布的共享变量或RT LED VI告知操作员何时可以关闭RT终端
注: 即使实时终端使用的是Reliance文件系统,文件打开时关闭终端仍可能损坏数据。Reliance只保证文件系统本身的完整性,但是不保证关闭实时终端时仍处于打开状态的单个文件的完整性。
以下程序框图显示了子VI Shutdown.vi的关闭程序。