0

我正在尝试使用采样时钟和“开始采样”触发器对 8 位输入进行采样。这是我配置任务的方式:

DAQmxErrChk(DAQmxCreateTask("",&samplHandle));
DAQmxErrChk(DAQmxCreateDIChan(samplHandle,"Dev1/port1/line2:7,Dev1/port2/line0:1","",DAQmx_Val_ChanForAllLines));    // choose my 8 bit DI lines PFI2:PFI9
DAQmxErrChk(DAQmxCfgSampClkTiming(samplHandle,"/Dev1/PFI0",1000000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,length));
DAQmxErrChk(DAQmxCfgDigEdgeStartTrig(samplHandle,"/Dev1/PFI1",DAQmx_Val_Rising));
DAQmxErrChk(DAQmxRegisterEveryNSamplesEvent(samplHandle,DAQmx_Val_Acquired_Into_Buffer,length,0,Callback,this));
DAQmxErrChk(DAQmxTaskControl(samplHandle,DAQmx_Val_Task_Commit));

当我在 QT Creator 中运行它时,它给了我这个错误:

DAQmx 错误:指定的属性不受设备支持或不适用于任务。属性:DAQmx_StartTrig_Type

任务名称:_unnamedTask<0>

状态码:-200452 DAQmx 错误:指定的任务无效或不存在。状态码:-200088

以前,当我使用模拟输入而不是数字输入时,我没有任何问题。有人知道我的频道配置有什么问题吗?我正在使用 PCI6259 和 BNC2110。

4

1 回答 1

1

您可以使用 PCI 6259 来执行您所描述的操作,但您需要对卡进行一些不同的配置。您会认为它就像分配启动触发信号和终端一样简单,就像您正在做的那样,但 M 系列设备不像新的 X 系列设备那样灵活。

首先,M 系列设备不支持数字任务的启动触发器 [1]:

M 系列设备没有用于数字波形采集或生成的独立 DI 或 DO 启动触发器。

其次,M 系列设备只能在端口 0 上采集数字波形,而不能在端口 1 或 2 上。在更新程序之前,您需要重新连接外部连接并使用端口 0 的线路。您的设备,NI 6259 ,有 32 行用于数字波形测量 [2]:

  • 波形特性(仅限端口 0)——NI 6254/6259:端口 0 (P0.<0..31>)
  • PFI/端口 1/端口 2 功能——静态数字输入、静态数字输出、定时输入、定时输出

切换到端口 0 后,您可以采用两种方法:

  1. 使用卡上的另一个子系统来提供触发器和时钟。
  2. 每当任何行有过渡时,使用“变化检测”来获取样本。

使用另一个子系统

M 系列设备具有模拟输入和计数器/频率输出子系统,其中任何一个都可用于为您的数字输入测量提供启动触发和采样时钟 [1a]:

例如,考虑使用 AI 采样时钟作为 DI 采样时钟源的情况。要在 AI 采样时钟(以及因此在 DI 采样时钟)上启动脉冲,您可以使用 AI Start Trigger 来触发 AI 操作的开始。AI 启动触发器使 M 系列设备开始生成 AI 采样时钟脉冲,进而生成 DI 采样时钟脉冲。

如果您使用计数器输出作为 DI 采样时钟的源,则计数器的启动触发器会启用驱动 DI 采样时钟的计数器。

NI-DAQmx 安装了 C 示例,展示了如何使用 API 来配置任务 [3]。您可以混合在一起完成您的设计的很少:

  • 连续读取数字通道 - 外部时钟
    • 这可以作为数字任务设置的基础
  • 连续采集电压样本 - 外部时钟 - 数字启动
    • 这说明如何为外部采样时钟和外部数字启动触发器配置模拟任务,它可以兼作数字任务的采样时钟和启动触发器
  • 连续模拟输入和读取数字通道
    • 这是同步模拟和数字子系统的方法
  • 生成数字脉冲序列 - 连续 - 数字启动
    • 这是您将计数器任务配置为采样时钟和启动触发器的方式

请记住,示例磁盘上的文件名是缩写的。

使用变更检测

M 系列设备可以单独检测每条 DIO 线上的上升沿、下降沿或任一沿。您可以将任务配置为在检测到更改时引发中断 [1b]:

DAQ 设备将每个 DI 信号同步到 80MHz 时基,然后将信号发送到变化检测器。该电路对每个 DI 信号中所有启用的变化检测器的输出进行“或”运算。此 OR 的结果是更改检测事件信号。

只要您的输入信号变化缓慢(100 Hz 或更少),您就可以使用这种技术来获取数据。如果它们必须更快地更改,则程序不太可能足够快地为中断提供服务。由于这个限制,我建议尝试第一种方法。

此类测量的 DAQmx C 示例 [3] 称为读取数字通道 - 变化检测

参考

[1a] M 系列用户手册 :: 数字波形触发(第 99..100 页)
[1b] M 系列用户手册 :: DI 变化检测(第 104..105 页)
http://digital.ni.com/manuals。 nsf/websearch/2025C99AB0614F9E8625748000577B9A

[2] NI 625x 规格 :: 数字 I/O/PFI
http://digital.ni.com/manuals.nsf/websearch/210C73CBF91128B9862572FF0076BE85

[3] 基于文本的 NI-DAQmx 数据采集示例 :: ANSI C
http://www.ni.com/white-paper/6999/en/#ANSIC

于 2014-10-04T19:45:53.730 回答