确定性应用程序的时间控制
- 更新时间2025-05-20
- 阅读时长7分钟
因为RT终端上的实时操作系统(RTOS)具有独占性,确定性任务可独占终端上的处理器资源。确定性任务可能会占用所有处理器资源,不允许应用程序中非确定性任务的执行。区分确定性任务和非确定性任务之后,可使用定时方法保证确定性任务确定执行,非确定性任务在有需要时执行。
可使用Real-Time定时VI,定时结构和外部定时源从时间上控制循环执行的速率。
使用Real-Time定时VI控制循环的定时
使用Real-Time定时VI、等待和等待下一个整数倍,控制RT终端上循环的定时。通过Real-Time定时VI,可使用RT终端上RTOS毫秒或微秒计时器来控制循环的精度。
等待VI
等待VI使VI在指定时间长度内为休眠状态。例如,在运行于RT终端的VI中使用“等待”VI和设置为毫秒的计数器单位,提供1 kHz的循环速率。假设,等待VI执行时RTOS的毫秒计时器值为112 ms,计数输入为10,VI进入休眠状态,直到毫秒计时器的值等于122 ms。
下图显示了使用定时VI的实时应用程序定时机制。应用程序执行函数A、函数B,在函数B执行完后,使用等待VI等待10毫秒。
等待下一个整数倍VI
等待下一个整数倍VI使一个线程进入休眠状态,直到RTOS的毫秒或微秒计时器到达计数输入端指定的整数倍值。例如,如等待下一个整数倍VI的计数输入端为10毫秒,RTOS毫秒计时器的值为112毫秒,VI将进入休眠状态直到毫秒计时器的值等于120毫秒。因为,120毫秒是在等待下一个整数倍VI执行后到达的第一个10毫秒的整数倍。
下图显示了使用等待下一个整数倍VI的实时应用程序定时机制。应用程序先执行函数A,再执行函数B,然后进入休眠状态,直到RTOS毫秒计时器的值等于20毫秒的整数倍。计时长度的值由等待下一个整数倍VI的计时输入端指定。
在上图中,等待下一个整数倍VI的执行时间由函数A和函数B的执行情况决定。当函数A和函数B执行完成后,等待下一个整数倍VI开始执行,直到操作系统计时器到达第一个20 ms的整数倍。
定义Real-Time定时VI的执行顺序
避免与其他LabVIEW代码并行使用等待VI或等待下一个整数倍VI,并行使用可能会导致预期之外的定时结果。在定时结构或实时优先级的VI中,只可使用一个线程。即使代码是并行的,定时VI和其他LabVIEW代码按先后顺序执行。在该情况下,LabVIEW编译VI时将并行代码顺序化,定时VI的执行顺序在各次编译中可能有所不同。如代码不在定时结构或实时VI中,LabVIEW将定时VI和其他LabVIEW代码并行执行,会改变定时VI的效果。
可使用顺序结构强制规定特定的执行顺序,以保证明确的时间性。在以下程序框图中,等待下一个整数倍VI使VI进入休眠模式,直到毫秒计时器达到100毫秒的整数倍。当VI从休眠模式中恢复,VI开始执行顺序结构的下一帧。
使用定时结构控制RT终端VI的定时
定时结构用于按指定的优先级执行在固定的时间内执行结构中的代码。定时结构的优先级设置是指定一个定时结构相对于终端上的其他定时结构的优先级。
| 警告 LabVIEW使用了两种既相对独立又相互关联的优先级机制,VI优先级和结构优先级。定时结构优先级是数值,数值越大,表示相对于终端上的其他定时结构优先级越高。但是,所有定时结构优先级都在高和实时VI优先级上。建议在一个应用程序中只使用一种优先级机制,避免非预期结果。如应用程序使用定时结构,将所有VI设为普通优先级。 |
定时循环
定时循环根据指定的循环周期执行一个子程序框图或帧。在以下情况中可以使用定时循环结构:例如,开发支持多速率定时功能的VI、循环执行时返回值、动态改变定时功能或者多种执行优先级。
使用配置定时循环对话框配置定时源、周期、优先级和其他定时循环执行的高级选项。
定时循环具有独占性,可占用所有处理器资源。定时循环可能会使用全部处理器资源,不允许程序框图上的其他任务执行。必须将最高优先级的定时循环的周期配置为足够大,每次循环,进行确定性任务后有足够的空闲时间保证其他优先级较低的任务执行。下列定时循环包含的子VI每次数据采集耗时50毫秒。
定时循环的周期为100毫秒,每次循环均留出50毫秒的空闲时间。定时循环空闲时,LabVIEW将执行程序框图上较低优先级的任务。
定时顺序
定时顺序结构由一个或多个任务子程序框图或帧组成,是根据外部或内部信号时间源定时后顺序执行的结构。定时顺序适于开发精确定时、执行反馈、定时特征等动态改变或有多层执行优先级的VI。
使用配置定时顺序对话框配置定时源、优先级和其他定时顺序结构执行的高级选项。
多帧定时循环
可向定时循环添加帧,按顺序执行各个帧。多帧定时循环相当一个带有嵌入顺序结构的定时循环。
使用外部定时源设置确定性应用程序的定时
运行在RT终端上的NI驱动程序支持使当前LabVIEW线程进入休眠状态的VI和函数,驱动检测到特定事件时,线程从休眠状态中返回。例如,可使用NI-DAQmx和NI数据采集硬件对实时应用程序进行定时。关于休眠和等待驱动事件的VI和函数的详细信息,请参考特定的NI驱动程序文档。
使用NI-DAQmx对实时应用程序进行定时
NI数据采集硬件与NI-DAQmx配合使用可将循环速率设置为与硬件时钟速率相同。通过NI-DAQmx,可使用下列方法对实时应用程序进行定时:
- 硬件定时单点-NI-DAQmx支持硬件定时单点采样模式。在该模式下,使用硬件定时采集和生成样本,没有缓冲机制。可使用硬件定时单点模式来控制确定性时间内输入输出的应用程序。关于使用硬件定时单点操作对确定性应用程序进行定时的信息,请参考NI-DAQmx帮助下的NI-DAQmx单点实时应用程序。
- 计数器定时器-NI-DAQmx支持使用硬件定时计数器输入来驱动一个控制循环。使用“等待下一个采样时钟”VI同步计数器和计数器上的采样时钟。关于使用计数器输入进行确定性应用程序定时的详细信息,请参考NI-DAQmx帮助的硬件定时计数器任务。
- 用于定时结构的DAQmx定时源-定时结构可通过硬件定时,是多速率应用的理想选择。默认情况下,在Windows操作系统上或安装了实时操作系统的RT终端上,定时循环使用1 kHz时钟。借助NI-DAQmx,也可使用DAQ设备的外部信号作为定时结构的定时源。使用“DAQmx创建定时源”VI,创建一个定时源,同步定时结构和硬件时钟。关于使用DAQ设备上的外部信号控制定时源的详细信息,请参考NI-DAQmx帮助中的使用定时循环的硬件定时同步更新I/O。
关于使用NI数据采集硬件和NI-DAQmx的定时控制循环的详细信息,请参考NI-DAQmx帮助。选择开始»所有程序»National Instruments»NI-DAQ»NI-DAQmx帮助,可打开NI-DAQmx帮助。