From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

PXIe 5122如何设置开始触发

已解决!
转到解答

我使用pxi5412发信号,采用PXIe 5122接收信号。发信号和接信号是在两个独立的VI里,需要分别运行。我想实现先运行接收信号的VI,这时候5122等待开始触发。再运行发信号的VI,之后5412发射信号,同时输出一个触发信号,触发5122开始采集信号。
因为我的参考触发使用的是software,所以如果是分别运行两个VI的话,5122提取的信号中,不好确定前面有多少数据是5412发信号前的无用数据。
我查了一个niScope节点属性中,有一个叫start Trigger (Acq. Arm): Source Property,不知道是不是指定这个就行了。如果是的话,它可用的值只有以下这些:
VAL_IMMEDIATE
VAL_RTSI_0
VAL_RTSI_1
VAL_RTSI_2
VAL_RTSI_3
VAL_RTSI_4
VAL_RTSI_5
VAL_RTSI_6
VAL_PFI_0
VAL_PFI_1
VAL_PFI_2
VAL_PXI_STAR
VAL_SW_TRIG_FUNC

第一个是默认的立即开始,后面的都是啥意思,怎么连接或指定呢?

0 项奖励
1 条消息(共 10 条)
5,070 次查看

你好,

 

你可以使用FGEN输出信号VI将开始触发输出到RTSI,然后示波器使用来自RTSI的数字触发来读取开始触发。

0 项奖励
2 条消息(共 10 条)
5,024 次查看

你好,我也刚开始用PXI-5412函数发生器和PXIe-5170R示波器,跟你遇到了同样的问题,可以留个联系方式一起学习下!据我了解,RST0-6是总线触发方式,PFI0-2是外部触发方式,StarTrigger是星型触发方式!RST0-6和Star Trigger不需要连线,只需要配置好示波器的触发方式,和函数发生器的输出信号就可以了

0 项奖励
3 条消息(共 10 条)
5,009 次查看

labview.png

这是我之前试的方法,是不管用的。我理解您的意思是Fgen得用export signal这个VI来输出开始触发(start trigger)到RTSI0,然后通过设置Scope的Property Node中的Start Trigger(Acq. Arm):source为RTSI0。因为我没找到Scope设置开始触发的VI。我这两天去实验室试一下。谢谢!

可是,我这样设置,用Scope输出开始触发给Fgen,为什么不行呢。Scope用的是默认的立即触发。

0 项奖励
4 条消息(共 10 条)
5,001 次查看

 

谢谢解答。你说的我也大概理解,只是我现在还不确定Fgen和Scope之间应该用什么vi来输入输出和连接这个开始触发。

 

都是新手,能有机会互相交流当然好了。

dlsafety@sina.com

这是我的邮箱,如果可以,通过邮箱再加别的联系方式。

0 项奖励
5 条消息(共 10 条)
4,999 次查看

在邮箱里回复你原因了

0 项奖励
6 条消息(共 10 条)
4,985 次查看
解答
已被主题作者 dlsafety 接受

Hi,

您把两个设备的Start函数启动的先后顺序弄颠倒了。

1. 就您现在的程序配置来说,您希望将Scope的开始触发发到RTSI0上面,然后通过RTSI0来触发FGEN,这个触发配置没有问题的。

2. 但是您把两个Start函数先后顺序弄颠倒了。您现在的配置是让Scope Start先执行,那么Scope这一时刻就开始准备自己的硬件资源,然后开始采集,同时发送触发信号到RTSI0上面。但是这个时候,FGEN可能才刚开始Start,准备自己的硬件资源(包括触发电路),这个时候,RTSI0上面的触发信号可能已经错过了。

3. 因此,把顺序帧里面的两个Start函数先后顺序调换一下就OK了。

 

p.s. 这个涉及到一个主设备,从设备以及他们的启动顺序问题。 我们假定发送触发的为主设备,接收触发的为从设备。一般都是从设备先开始,然后主设备再开始。如果从设备在Read/Write的时候有超时,可以把该函数的超时时间设置长一点。

 

Xiaohui Wang

7 条消息(共 10 条)
4,801 次查看

谢谢,您解释的很对,我已经做了更改。

 

不过,即便是这样触发,在做连续发射连续采集时,还是采集不到信号,或采集不完整。还请大神帮忙看看问题出在哪儿。

 

如附件的代码。

附件1:以Fgen开头的代码是发射接收信号的“主程序”。
附件2:myChirp-continue-center.vi是自己写的波形,在“主程序”中调用。
附件3:以binary开头的代码是用来读取存储采集信号的二进制文件,然后显示的。
附件4:接收到的信号截图。

设置“主程序”中的loop times=10(这是设置我要发射采集的信号段数)
每次开机后,第一次运行“主程序”,存储的10段信号中,有2-3段是发射的信号,且都
在最前面,后面只有噪声(幅值非常小),如附件4。
如果再运行一次“主程序”,存储的10段信号中,没有发射的信号,全是噪声(幅值非
常小)。

0 项奖励
8 条消息(共 10 条)
4,780 次查看
解答
已被主题作者 dlsafety 接受

Hi,

你在主程序里面设置的Loop Times,没有太大的意义。原因是:在Fgen功能中,While循环中没有任何延时,那么这个循环的索引值i很快就会超过你设置的Loop Times,从而将Fgen的任务停止、清除掉。你的Scope任务也就采集不到任何信号了。

Scope任务中,采用生产者-消费者,很不错:)

但是同样的,在Scope任务中,你面临两个问题:一个是Fetch的超时时间设置为0,表示当前缓冲区里面有多少数据就取多少数据,你设置的“Max Points Per Fetch"意义不大。另外一个问题是:同样的Loop Times意义不大,只是控制Scope从缓冲区里面读取N*20次。并不能控制采集的长度。

 

换一种思路:

当你的板卡(Scope/Fgen)设置好采样率之后,可以获得实际的采样率。同样的,你可以根据你波形的特征,得到你的波形数据点个数为N。那么你要执行Loop Times次信号输出,那么:

1. Scope需要Fetch的数据点至少是:N/(Fgen Sample Rate) * (Scope Sample Rate) * (Loop Times)

2. Fetch函数等待时间设置为-1,表示一直等待;

3. 当Fetch的数据点数超过第一条中数据后,停止,然后通过一个局部变量通知Fgen的那个While循环停止;

4. 为减小Fgen循环对CPU的负荷,该While循环中加入一个等待函数,比如10ms。

 

另外,如果是长时间数据采集和记录的话,可以在创建二进制文件的时候,禁用缓存,"Max Points Per Fetch"为硬盘扇区大小的整倍数(一般是512的整倍数),从而可以避免LabVIEW报“内存不足”的问题。

 

Good Luck!

 

Xiaohui Wang

 

9 条消息(共 10 条)
4,738 次查看

非常感谢您的细致解答,问题解决了。

 

不过,有两个地方我还是没弄明白,希望大神能帮我解答一下:

1、在Fgen的循环中,设置了等待时间,但这个等待时间是10ms,100ms,1000ms,或再大,结果都是一样,Scope提取到的信号都是连续的。那这个等待时间的作用是什么?它不是控制多长时间输出一次信号吗?

2、如果我只想输出一段信号后就不发了(不重复发),如信号长1ms,按我的理解把循环和其中的内容直接去掉就行,只要开始触发的关系设置的对,Scope应该还是能接收到这个信号的,但为什么提取不到呢。这让我又疑惑Fgen中的循环到底是起什么作用的?

 

附上我改好的代码,望大神解惑。同时也希望能帮助到跟我有同样疑问的朋友。

0 项奖励
10 条消息(共 10 条)
4,712 次查看