NI板卡AD采集问题

2019-07-17 13:23发布

本人刚刚接触NI板卡,有一个问题想请教大家。非常感谢。
我想要实现:每次在外部脉冲的触发下采集开始,每次采集5个点,下次采集开始也需要外部触发才开始,一共采集两次。但我现在的结果是一共采集10个点了,仅仅份两次读取而已。
请大神帮忙!感激涕零。下方是我写的部分代码。
DAQmxErrChk(DAQmxCreateTask("", &taskHandle1));
DAQmxErrChk(DAQmxCreateAIVoltageChan(taskHandle1, "Dev1/ai4", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL));
DAQmxErrChk(DAQmxCfgSampClktiming(taskHandle1, "", 10000, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, 10));
DAQmxErrChk(DAQmxCfgDigEdgeStartTrig(taskHandle1, "/Dev1/PFI8", DAQmx_Val_Rising));

DAQmxErrChk(DAQmxStartTask(taskHandle1));
                for (int j = 0; j != 2; ++j)
                {
                        DAQmxErrChk(DAQmxReadAnalogF64(taskHandle1, 5, 10.0, 0, data,10, &read, NULL));
                        printf("Acquired %d points ", (int)read);

                        for (int i = 0; i != read; ++i)
                        {
                                printf("%f ", data);
                        }
                }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
forever魏然卉
1楼-- · 2019-07-18 04:40
但是这样每次采集5个点,就需要每次开、关任务。
之前试过的程序如下,但是按照我的程序采集的信息是正确的,但是所耗时间太久。请问有没有什么好的办法?
        int32       read;
        int                        error = 0;
        TaskHandle        taskHandle1 = 0;
        char                errBuff[2048] = { '' };
        float64     data[1000];
        double      sum = 0;
        //Ai输入采集
        DAQmxErrChk(DAQmxCreateTask("", &taskHandle1));
        DAQmxErrChk(DAQmxCreateAIVoltageChan(taskHandle1, "Dev1/ai4", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL));
        DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandle1, "", 10000, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps,5));
    DAQmxErrChk(DAQmxCfgDigEdgeStartTrig(taskHandle1, "/Dev1/PFI8", DAQmx_Val_Rising));
                for (int j = 0; j != 2; ++j)
                {
                        DAQmxErrChk(DAQmxStartTask(taskHandle1));
                        DAQmxErrChk(DAQmxReadAnalogF64(taskHandle1, 5, 10.0, 0, data,10, &read, NULL));
                        printf("Acquired %d points ", (int)read);

                        for (int i = 0; i != read; ++i)
                        {
                                sum += data[i];
                                printf("%f ", data[i]);
                        }
                        if (taskHandle1 != 0)
                                DAQmxStopTask(taskHandle1);
                }
forever魏然卉
2楼-- · 2019-07-18 04:42
但是这样每次只采集5个点;每一次这个过程就需要开关一次任务,若我循环次数很多,就会很耗时间,有没有什么改进的办法?
imcu2007
3楼-- · 2019-07-18 06:09
如果外部脉冲是定点的,那可以一个任务一直开始啊,结束的时候把数组分割开不就可以了,各取所需。

DAQMx的任务,可以只开始一次任务,获取句柄后,直接控制启动采集和停止采集就可以了额,没什么时间消耗。在你需要停止任务的时候,再停止
forever魏然卉
4楼-- · 2019-07-18 11:06
很开心在论坛上的问题得到回复。但可能我说的有些偏差。
我现在要用NI板卡进行AD采集,但要外部脉冲信号触发采集开始,采集的信号也是脉冲信号。每次外部触发开始时,我仅仅需要采集被采集信号的5个点,之后等待下一次脉冲来临,再次采集5个点,依次循环。我循环次数要1000左右,要是配置通道采集5个点,每次循环都要开任务、关任务,总体下来的时间就很长。所以,我想问问有没有别的办法?
感激涕零!
LeeDings
5楼-- · 2019-07-18 13:57
 精彩回答 2  元偷偷看……

一周热门 更多>