将确定性任务与非确定性任务分开,并把确定性任务放在不同优先级的VI中,确保足够的处理器资源。可对VI设置不同的优先级,然后将其归入一个可用的执行系统,控制分配给各个VI的处理器资源。

根据指定的VI优先级和执行系统,LabVIEW为每个VI分配一个执行系统线程。线程在处理器上执行。

分配VI优先级

在项目浏览器窗口右键单击VI,从快捷菜单中选择属性,打开VI属性对话框,可修改VI的优先级。在VI属性对话框中,从类别下拉列表中选择执行,打开执行页设置VI的优先级。可从下列VI属性中选择,优先级从低到高排列:

  • 后台优先级(最低)
  • 标准优先级(默认)
  • 高于标准优先级
  • 高优先级
  • 实时优先级(最高)
注意 LabVIEW使用两种优先级机制,VI优先级和定时结构优先级。这两种优先级机制既相互独立,又相互关联。定时结构优先级是数值,数值越大,表示相对于终端上的其他定时结构优先级越高。但是,所有定时结构优先级都在高和实时VI优先级上。建议在一个应用程序中只使用一种优先级机制,避免非预期结果。如应用程序使用定时结构,将所有VI设为普通优先级。

标准优先级是VI的默认优先级。子VI继承调用方VI的优先级。例如,确定性VI调用的子VI为实时优先级。VI的实时优先级高于所有其他优先级。实时优先级的VI直到完成所有任务后才释放处理器资源。确定性VI可显式地让渡处理器资源,确保不独占处理器资源。

注: 因为实时优先级VI之间无法抢占资源,所以每个CPU上只能有一个实时VI。这样才能保证VI执行的确定性。

除了上述五个优先级之外,还可将VI设置为子程序优先级。设置成子程序级别的VI不与其他VI共享执行时间。当VI处于子程序优先级时,它有效地控制正在执行的线程,并与其调用者运行在同样的线程上。在子程序VI完成运行之前,其他VI不能在这个线程上运行,即使这些VI也是子程序级的。

为VI分配执行系统

项目浏览器窗口右键单击VI,从快捷菜单中选择属性,打开VI属性对话框,可修改VI的执行系统。在VI属性对话框中,从类别下拉列表中选择执行,打开执行页设置VI的执行系统。LabVIEW有六个执行系统:

  • 用户界面
  • 标准
  • 仪器I/O
  • 数据采集
  • 其他1
  • 其他2

默认情况下,所有VI都在标准执行系统中运行。用户可根据实际需要,将VI分配至其他执行系统。除了上述六个执行系统之外,也可将子VI的执行系统设置为与调用方相同。设置为与调用方相同表示子VI的执行系统与调用该子VI的顶层VI相同。

除了用户界面之外,每个执行系统都有一个按指定优先级执行VI的线程队列。例如,将三个VI分配至某执行系统,无论何时,该执行系统中都是一个VI运行,其他两个等待。假设所有VI有同等的优先级,线程先运行一段时间。然后,线程移至队列末尾,下一个线程开始运行。线程结束后,执行系统将线程从队列中移出。

用户界面执行系统处理所有用户界面任务。其他执行系统不负责用户界面。如VI需更新用户界面,执行系统将任务传递给用户界面执行系统,请求更新用户界面。

确定性VI执行

确定性VI具有抢占性,可独占处理器资源。确定性VI可能会占用所有处理器资源,不允许其他低优先级任务(例如,低优先级VI、RT终端的FTP服务器)执行。

确定性VI可在不影响代码确定性的前提下允许其他低优先级任务执行。通过设置定时VI的时间,可保证VI在合适的时候释放处理器资源。

注: 在多CPU系统上运行的应用程序中,可手动为确定性定时循环分配专有的处理器。如通过定时循环为VI分配专有CPU,VI可专享处理器资源,而不对其他任务造成负面影响。