LinxVIEW论坛-斯科道

标题: 避免抖动(Real-Time模块) [打印本页]

作者: Scadao    时间: 2019-5-13 19:31
标题: 避免抖动(Real-Time模块)
避免抖动(Real-Time模块)
精确的定时是实时应用程序的关键性因素。抖动是指程序的执行事件没有满足确定性预期。本章节介绍如何在实时应用程序中减小抖动。
避免引起抖动的常见源
不要在实时循环中加入非确定性的内容,以减少程序执行时间的抖动。常见的抖动源包括:
创建定时策略
对于不间断的重复的循环,需创建一致的定时策略以保证精确定时。LabVIEW Real-Time模块的定时策略包括循环结构和定时源。LabVIEW Real-Time模块包含了大量可用于控制循环定时的定时方法和定时源。
选择循环
除标准的While循环之外,LabVIEW还具有内置定时功能的定时循环。使用定时循环的输入和输出端,确认应用程序的定时特性。下表总结了两种循环结构的特性:
循环结构
特性
优点
缺点
While循环基本的循环结构,多线程CPU开销较小无内置定时功能
定时循环单线程循环结构,用于多速率应用程序内置时间控制、定时数据、CPU选择、优先级控制;易于确定性调度的单线程CPU开销大于While循环
选择定时源
无论使用的是定时循环或While循环,选择一个合适的定时源驱动循环的各个循环定时。
While循环定时源
在While循环中放置定时VI或函数,可控制While的定时设置。下表总结了LabVIEW Real-Time模块可用的内置定时VI和函数:
使用范例
定时方法
内置定时源
通过硬件定时I/O同步循环硬件定时I/O方法,例如,DAQmx读取VI或FPGA I/O方法节点上的等待方法外部(取决于硬件平台)
x毫秒后延迟循环执行等待CPU衍生的毫秒或微秒计时器
控制循环执行速率和同步循环等待下一个整数倍CPU衍生的毫秒或微秒计时器
NI扫描引擎每次扫描后,触发循环运行同步至扫描引擎NI扫描引擎
定时循环的定时源
关于选择定时循环的定时源的详细信息,请参考选择定时结构的定时源
创建时间预算
创建应用程序的时间预算,有助于避免非预期的时间分配。时间预算包括确定执行应用程序中各个循环的时间,设置循环的速率,等等。创建和遵循时间预算有助于应用程序按照预期运行。
测量循环执行时间
将应用程序分别置于若干个循环中,使用RT基准测试确定应用程序中各个循环所需的时间。基准测试运行上千个循环计数,然后将其中最长的执行时间用作循环的预期持续时间。
注:  分析执行时间时,不要高亮显示执行过程。高亮显示执行过程会显著降低执行速度。
创建时间预算表
测量循环的执行时间后,记录每个循环的持续时间和周期,创建应用程序的时间预算表,如下列范例所示:
任务/循环
持续时间(μs)
周期(μs)
控制4001000
显示器3,00010,000
记录16,00030,000
降低CPU占用率
CPU的占用率在100%以下时,可降低抖动并确保应用程序无需抢占CPU时间。创建时间预算表后,可通过下列公式确定理论CPU使用率。
CPU使用率(%) = 100 * Sum[Loop 1, Loop 2,.., Loop n](持续时间/周期)
将表中的数据代入公式,得到该例中CPU的使用率是:100 * (400/1,000 + 3,000/10,000 + 16,000/30,000) = 123%因为该范例中的监控循环的优先级高于记录循环,实时操作系统在控制循环完成后立即调用监控任务。实时操作系统只有在监控循环完成一次循环后才开始记录,留出的时间不足以满足要求的周期。
在该情况下,可延长一个循环或多个循环的周期,保证循环按指定速率运行。例如,将监控循环的周期延长为25,000 μs,将记录循环的周期延长为80,000 μs,理论CPU使用率为100 * (400/1,000 + 3,000/25,000 + 16,000/80,000) = 72%。
注:  如无法延长循环的周期,可能需要使用其他方法来降低CPU的使用率








欢迎光临 LinxVIEW论坛-斯科道 (http://iiotview.com/) Powered by Discuz! X3.2