解决方案
如果在前一个值完成整个周期之前使用属性节点将占空比更改为另一个值,则会发生此错误。如果
t是自上次更改占空比以来的时间,
T是信号的周期,则在
t < T时尝试应用新的占空比将中断任务,导致应用程序意外停止。下图显示了导致此问题的代码。

有几种解决方案可以避免在动态更改值时中断任务:
不要使用属性节点来更新占空比的值,而是使用DAQmx Write VI 。与不加区分地更新 DAQmx 任务值的属性节点不同,Write VI 将缓冲新写入的值,直到硬件准备好更新为止。请注意,频率必须与占空比一起写入。
注意:此图像是 LabVIEW 代码片段,其中包含可在项目中重复使用的 LabVIEW 代码。要使用代码片段,请右键单击图像,将其保存到计算机,然后将文件拖到 LabVIEW 图表上。
使用 Ready for New Value 属性
如果要保留属性节点来更新值,可以使用Ready for New Value 属性主动检查硬件是否已准备好接受新值。从此属性读取并添加适当的逻辑,以便仅当设备准备好时才更新占空比。
注意:此图像是 LabVIEW 代码片段,其中包含可在项目中重复使用的 LabVIEW 代码。要使用代码片段,请右键单击图像,将其保存到计算机,然后将文件拖到 LabVIEW 图表上。
您可以使用公式T = 1/f计算一个完整周期的周期,其中f是信号的频率。为避免应用程序因错误而停止,请确保自上次占空比更新以来经过的时间t满足条件t ≥ T ,然后再进行另一次更新。这允许当前周期在对硬件应用任何其他更改之前完成。这可以使用任何 LabVIEW 定时解决方案(例如Wait (ms) 函数或计时器 FGV )来实现。
这种解决方案的可靠性要低得多,因为计时器与硬件的实际周期并不确定。达到或超过动态计算的t值并不能保证硬件已完成整个周期。