LabVIEW论坛
直播中

forever魏然卉

7年用户 12经验值
私信 关注
[问答]

NI板卡AD采集问题

本人刚刚接触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 pointsn", (int)read);

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

回帖(13)

leonzl

2018-3-19 12:35:23
应该是设定好采集的数量是5个。第一次脉冲结束后,采集任务采到5个数据就自动结束了。
收到采集任务结束信号后,然后继续打开采集任务,就OK了。
其实你只是5个点的采集任务的循环启动停止。
举报

forever魏然卉

2018-3-19 15:39:17
引用: imcu2007 发表于 2018-3-19 12:35
应该是设定好采集的数量是5个。第一次脉冲结束后,采集任务采到5个数据就自动结束了。
收到采集任务结束信号后,然后继续打开采集任务,就OK了。
其实你只是5个点的采集任务的循环启动停止。

但是这样每次采集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 pointsn", (int)read);

                        for (int i = 0; i != read; ++i)
                        {
                                sum += data;
                                printf("%fn", data);
                        }
                        if (taskHandle1 != 0)
                                DAQmxStopTask(taskHandle1);
                }
举报

forever魏然卉

2018-3-19 15:39:28
引用: imcu2007 发表于 2018-3-19 12:35
应该是设定好采集的数量是5个。第一次脉冲结束后,采集任务采到5个数据就自动结束了。
收到采集任务结束信号后,然后继续打开采集任务,就OK了。
其实你只是5个点的采集任务的循环启动停止。

但是这样每次采集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 pointsn", (int)read);

                        for (int i = 0; i != read; ++i)
                        {
                                sum += data;
                                printf("%fn", data);
                        }
                        if (taskHandle1 != 0)
                                DAQmxStopTask(taskHandle1);
                }
举报

forever魏然卉

2018-3-19 15:39:34
引用: imcu2007 发表于 2018-3-19 12:35
应该是设定好采集的数量是5个。第一次脉冲结束后,采集任务采到5个数据就自动结束了。
收到采集任务结束信号后,然后继续打开采集任务,就OK了。
其实你只是5个点的采集任务的循环启动停止。

但是这样每次采集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 pointsn", (int)read);

                        for (int i = 0; i != read; ++i)
                        {
                                sum += data;
                                printf("%fn", data);
                        }
                        if (taskHandle1 != 0)
                                DAQmxStopTask(taskHandle1);
                }
举报

更多回帖

×
20
完善资料,
赚取积分