动态更改占空比(Duty Cycle)时出现 DAQmx 错误 -200301

更新 Jun 10, 2025

适用于

硬件

  • NI-9472
  • NI-9474

软件

  • LabVIEW

驱动

  • NI-DAQmx

问题详述

我有一个 DAQmx 应用程序,它生成具有特定占空比和频率的数字信号。当动态更改占空比时,应用程序会停止并显示以下错误:

VError -200301 occurred at Property Node DAQmx Channel (arg 3) in VI.

Possible reason(s):
Cannot update the Pulse Generation property. The pulse generation with previous property settings must complete a full cycle before the property can be updated.
Task Name: _unnamedTask<0>

错误信息

解决方案

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

有几种解决方案可以避免在动态更改值时中断任务:

  • 使用 DAQmx Write VI 代替属性节点

不要使用属性节点来更新占空比的值,而是使用DAQmx Write VI 。与不加区分地更新 DAQmx 任务值的属性节点不同,Write VI 将缓冲新写入的值,直到硬件准备好更新为止。请注意,频率必须与占空比一起写入。

写入 VI DAQmx
注意:此图像是 LabVIEW 代码片段,其中包含可在项目中重复使用的 LabVIEW 代码。要使用代码片段,请右键单击图像,将其保存到计算机,然后将文件拖到 LabVIEW 图表上。
  • 使用 Ready for New Value 属性

如果要保留属性节点来更新值,可以使用Ready for New Value 属性主动检查硬件是否已准备好接受新值。从此属性读取并添加适当的逻辑,以便仅当设备准备好时才更新占空比。

准备好下一个值属性
注意:此图像是 LabVIEW 代码片段,其中包含可在项目中重复使用的 LabVIEW 代码。要使用代码片段,请右键单击图像,将其保存到计算机,然后将文件拖到 LabVIEW 图表上。
  • 动态计算周期(T)

您可以使用公式T = 1/f计算一个完整周期的周期,其中f是信号的频率。为避免应用程序因错误而停止,请确保自上次占空比更新以来经过的时间t满足条件t ≥ T ,然后再进行另一次更新。这允许当前周期在对硬件应用任何其他更改之前完成。这可以使用任何 LabVIEW 定时解决方案(例如Wait (ms) 函数计时器 FGV )来实现。
这种解决方案的可靠性要低得多,因为计时器与硬件的实际周期并不确定。达到或超过动态计算的t值并不能保证硬件已完成整个周期。