模拟输出如何产生一个DAQ事件?



主要软件: Driver Software>>NI-DAQ
主要软件版本: 7.2
主要软件修正版本: N/A
次要软件: N/A

问题: 我正在为一个模拟输出信号设置一个DAQ事件(我正在使用NI-DAQ的函数Config_DAQ_Event_Message)。中断产生了,只不过出现在无法预期的时间。我也试着在Labview中使用一个DAQ Occurrence(使用DAQ Occurrence Config.vi),我看到了同样的结果。模拟输出信号的DAQ事件是怎么一回事?

解答: 为了解释模拟输出事件有时候会有点怪的原因,明白模拟输出是如何产生的是相当重要的。这篇文档讨论了模拟输出是如何产生的。对于其它的信息,可以参考NI-DAQ User Manual for PC Compatibles的第三章 Software Overview中"FIFO Lag Effect on the MIO E Series, AT-AO-6/10, PCI-4451, PCI-4453, and NI 4551"章节。

下面的示意图解释了发生了什么事:
___________    __________   _____________________
| | | | | | |
| RAM |===>| FIFO |==>|Register| DAC |
|_________| |________| |________|__________|

首先,您必须提供波形或者是想要输出的值的集合。这些值储存在计算机的RAM中,然后被加载到板卡上的FIFO(先入先出)中。这些值通过DMA或中断的方式从RAM传输到FIFO中。一次一个的被放到DAC的一个小寄存器上,这些值在指定的时间被转换成一个模拟电压(例如,内部时钟或者一个外部信号会让DAC更新)。

有三个不同的DAQ事件可以产生中断:事件类型0,事件类型1和事件类型2。可在NI-DAQ Help(Start » Program Files » National Instrument » NI-DAQ » NI-DAQ Help) 或者NI-DAQ Function Reference Manual中查看每个事件的描述(可参考以下链接)。


每种事件类型是如何产生DAQ事件的?
事件类型0会在第一次N个扫描完成后马上产生DAQ事件。

事件类型1会在每次N个扫描完成后产生DAQ事件。这两种事件都会在第N个从RAM到FIFO的扫描时被触发。

对于事件0和事件1,FIFO尽可能设的小,最小是1:
设完这个之后,DAQ事件会在第(N - 2)事件发生后发生。举个例子,让N=5,现在在DAC上的点是第二个点。当在DAQ上放置第三个点时,第三个点会从DAC的寄存器中移到DAC。寄存器然后从FIFO中曲第四个点,FIFO然后从RAM中拿第五个点。由于DAQ事件是当第N个扫描从RAM中到FIFO内会被触发,事件现在就会被产生。如果您想当第N个点在DAC中时产生一个事件,那么您需要指明N+2个点,寄存器中占一个点,FIFO中占一个点。

当DAQ操作完成或发生错误时,事件类型2会产生一个中断。举个例子,如果您希望在第1000个点被输出后产生一个事件,这些点以块的形式被传送到DAQ板卡的FIFO上,然后逐个被放到DAC中。在第1000个点被输出后,DAC寄存器从FIFO中找寻第1001个点。当发现第1001个点不在那儿时,DAQ事件发生并产生一个中断。这说明DAQ Occurrence(如果您正在用LabVIEW编程的话)会发生,或者您的调用函数(如果您正在使用NI-DAQ编程)会在第N+1个点时被调用。

对于事件类型2,您需要使用N+1,对于事件类型0和1,您需要使用N-2,这会让我们产生迷惑。您可能希望使用一个外部的更新信号来测试您的应用,因此您可以保证DAQ事件在您希望它发生时发生。

相关链接: NI-DAQ 6.7 Function Reference Manual

附件:





报告日期: 05/18/2006
最近更新: 05/19/2006
文档编号: 252G4TQT