From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Multifunction DAQ

cancel
Showing results for 
Search instead for 
Did you mean: 

PCI 6259 数字输出与模拟输入同步

Solved!
Go to solution

我现在需要利用采集卡的port0 输出数字信号,然后我会收集ai0的模拟输入信号。在这个过程中,我希望数字输出与模拟输入同步,保持1M/s的频率。是不是应该单独设置计数器ctr0作为触发信号,请问这个过程应该怎么实现?

0 Kudos
Message 1 of 13
(2,958 Views)

Hi shuai94,

 

如果你只想同步ai和do任务的话利用master-slave模式共享采样时钟和触发即可实现,具体的代码可以参考此链接的第3部分。

 

Start Task会生成隐性的触发信号,如果没有特殊需求的情况下是不需要创建co任务提供触发信号的。

 

Regards

0 Kudos
Message 2 of 13
(2,916 Views)

你好,多谢你的回答和帮助。但是我还是一些疑问。我还是如果不创建co任务的话,而利用master-slave模式,那么DAQmx start trigger中的source能不能用 Dev1/do/StartTrigger?这个不在可选择项中。就像图中所示,这种方式好像不太可行。

0 Kudos
Message 3 of 13
(2,897 Views)
Solution
Accepted by topic author shuai94

Hi shuai94,

 

master-slave模式下利用共享采样时钟可以不用特地设置触发源,但是一定要保证slave任务的Start Task比master的先执行,利用错误数据流或顺序帧保证执行顺序。虽然slave任务先运行,但是并没有采样时钟使其工作,只有master任务执行之后才会有采样时钟生成,slave任务才能工作。

 

PCI 6259是M系列板卡,没有独立的di/do开始触发,这时同步的时候需要把di/do任务设为slave,共享AI的时钟即可,你只需要把你代码里面的主从顺序换一下。

 

如果还有疑问可以继续跟进,解决了还请采纳或赞一下~

Regards

Message 4 of 13
(2,874 Views)

你好,我换了主从顺序以后,发现数字输出的时候会在进行触发的时候报错,整个程序如图中所示,请问哪里需要再修改?

0 Kudos
Message 5 of 13
(2,839 Views)
Solution
Accepted by topic author shuai94

Hi shuai94,

 

1. 你的截图里面AI和DO还是并行的,两个任务的运行顺序是不确定的,你先加一个如下图所示的顺序结构,do任务的靠前,ai任务靠后。

Screen Shot 2019-09-18 at 15.24.27.png

 

2. 你的ai任务没有指定Sample clock source,创建常量选择onboard clock即可;注意到ai任务是连续采集,你需要把Analog 1D DBL放在一个while循环中进行并且需要将数据读出,否则数据会一直缓存在fifo(板卡的内存)中,导致内存爆掉导致报错。

 

3. do任务是有限点生成数字信号,在Start Task之后以及Stop Task之前你需要添加一个 Wait until done,保证数字信号全部完成才结束。

 

4. do任务的Start digital edge其实可以不加,不过加了应该没有问题。

 

5. 关于弹出错误,还请把错误报告贴出来。

 

Regards

Message 6 of 13
(2,827 Views)

你好,我ai也可以设置成有限点,我也添加了顺序框图,但还是会程序运行后在Start digital edge后会报错,错误就在第二张和第三张图像中显示。

0 Kudos
Message 7 of 13
(2,818 Views)

Hi shuai94,

 

没想到给定了触发信号反而会报错,原因可能就是我之前所说的M系列板卡的数字任务没有独立的触发:

9579106c-926e-4cfa-8642-e99f8cc193a6.jpg

 


解决办法很简单,把do任务的指定触发给删了就行,两个任务还是同步的

 

Regards


Message 8 of 13
(2,815 Views)

非常感谢您的回答,这个问题困扰我很久了。另外我还有一个额外的问题,当我保持采样速率不变,改变有限点数,当有限点数大于采样速率的10倍时,程序也会报错。我修改了wait until done的等待时间后依然会报错。这个问题我也不知道改怎么解决?

Download All
0 Kudos
Message 9 of 13
(2,798 Views)

Hi shuai94,

 

不客气;

 

关于第二个问题,其实是个简单的算术题。每通道采样数设为1200,但是采样率只有100Hz,这就表明需要12s才能写满一个通道,也就是说经过12s才会出一次数据,所以等待时间必须要设为12s以上,除了wait until done以外还需要修改ai任务中Read的等待时间,因为默认的等待时间只有10s,超时就会报错。

 

如果有帮助的话可以给个奖励哟~ 谢谢

 

Regards

0 Kudos
Message 10 of 13
(2,793 Views)