找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 3564|回复: 22

请问一下如何调用数据采集卡采集到的数据?

[复制链接]
发表于 2008-4-8 12:23:53 | 显示全部楼层 |阅读模式
想处理采集卡采集的数据,可现在怎么把数据调用出来还没有搞明白,希望各位大虾能帮帮我
 楼主| 发表于 2008-4-10 10:30:32 | 显示全部楼层
就是我之前上传的那个程序,我现在已经可以实现数据采集的功能了,数据分析的思路也还算清晰,可是在调用采集到的数据方面还没有搞明白,这几天一之在看,也试了几种方法,可是都没有成功,希望版主能给指点一下~
回复 顶

使用道具 举报

发表于 2008-4-10 16:24:56 | 显示全部楼层
"调用采集到的数据方面"

兄弟指的是什么方面呢?有些不太清楚,不同的卡的使用方法不同,一般DLL是以一定的形式将采集到的数据返回的,比如以数组形式,您直接处理这个数组即可的!
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-11 08:48:12 | 显示全部楼层

回复 3# 的帖子

版主,就是我现在想对采集到的数据进行处理,那必须得调用采集到的数据吧?我的意思就是这样的。

您能不能再说的具体点,或者如果您有时间的话,能帮我写几句示范一下么?
如果我想处理1、2通道的数据,该怎么把他们转换为数组呢?还请版主指教
int CVICALLBACK Channel_1Callback (int panel, int control, int event,
                void *callbackData, int eventData1, int eventData2)
{   int a;
        switch (event)
        {
                case EVENT_COMMIT:
                        GetCtrlAttribute(panel,ChannelSel_Channel_1,ATTR_CTRL_INDEX ,&a);
                        ADPara.ChannelArray[1]=a;  
                        break;
        }
        return 0;
}

int CVICALLBACK Channel_2Callback (int panel, int control, int event,
                void *callbackData, int eventData1, int eventData2)
{   int a;
        switch (event)
        {
                case EVENT_COMMIT:
                        GetCtrlAttribute(panel,ChannelSel_Channel_2,ATTR_CTRL_INDEX ,&a);
                        ADPara.ChannelArray[2]=a;
                        break;
        }
        return 0;
}
不知道是不是该用这个地方的程序?
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-11 08:49:14 | 显示全部楼层

回复 3# 的帖子

我就是想把通道1、2的数据转化为可以处理的数组的,可是不知道该怎么转化....
回复 顶

使用道具 举报

发表于 2008-4-11 14:15:11 | 显示全部楼层
http://www.cpubbs.com/bbs/viewth ... &extra=page%3D1

下载我们的卡的程序看看,兄弟,里面还有详细的文档,不同的卡是不同的,您的程序上面好像没有采集这一块的程序!它的DLL返回一定是一种形式,比如数组!您看我们的您就知道了!
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-12 10:17:05 | 显示全部楼层

回复 6# 的帖子

斑竹您好,这个程序我看了,可是还是没有搞明白,您看我要是这样行不行,就是用到4楼那个地方的程序
GetCtrlAttribute(panel,ChannelSel_Channel_1,ATTR_CTRL_INDEX ,&a);
for(i=0;i<2048;i++)
wave1i=a;   (这个地方中括号打不出来)
然后用这个数组进行数据处理,您看对不对啊?我这样运行程序会出错

[ 本帖最后由 justin566 于 2008-4-12 10:28 编辑 ]
回复 顶

使用道具 举报

发表于 2008-4-12 14:17:08 | 显示全部楼层
我总感觉没有用到卡的采集的函数在里头似的!一定要先采集回来了才有数据,您这个好像是程序自己产生的?没有用到卡!
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-12 14:21:22 | 显示全部楼层

回复 8# 的帖子

不会吧,但是我已经做过试验了,我用的信号发生器进行模拟采集,也可以实现啊~采集上没有问题啊~能不能麻烦您再帮我看下程序,看看是不是能按照我上面说的方法进行,我现在真的是没有什么更好的办法了~
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-13 11:07:54 | 显示全部楼层
版主,前面那段程序应该是通道选择部分的,我现在感觉应该不对。


不知道是不是应该是这个呢?还请版主指教
if (WaveOrDight==1)
               {
              
               for(Index=0; Index<nChannelCount; Index++)   // 将采集的AD数据转换成电压值(mV)
                           {
                           // 将数据换算成电压值,然后由定时器绘制在窗口中
                               Volt[Index] = ((((pADBuffer[CurrentIndex][Index])&0x0FFF)-0x800)*PerLsbVolt);
                           }
                           for(Index=0; Index<nChannelCount; Index++)
                           {
                               SetCtrlVal(ADHandle,Chanels[Index],Volt[Index]);
                           }
               }
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-13 11:22:01 | 显示全部楼层
版主,前面那段程序应该是通道选择部分的,我现在感觉应该不对。


不知道是不是应该是这个呢?还请版主指教
if (WaveOrDight==1)
               {
              
               for(Index=0; Index<nChannelCount; Index++)   // 将采集的AD数据转换成电压值(mV)
                           {
                           // 将数据换算成电压值,然后由定时器绘制在窗口中
                               Volt[Index] = ((((pADBuffer[CurrentIndex][Index])&0x0FFF)-0x800)*PerLsbVolt);
                           }
                           for(Index=0; Index<nChannelCount; Index++)
                           {
                               SetCtrlVal(ADHandle,Chanels[Index],Volt[Index]);
                           }
               }
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-14 09:27:25 | 显示全部楼层
版主,请问我的程序是这样写的
int CVICALLBACK StartRans (int panel, int control, int event,
                void *callbackData, int eventData1, int eventData2)
{   double wave1[2050],wave2[2050],wave3[4096];
            int j;
                int a;
        switch (event)
        {
                case EVENT_COMMIT:
                           SetCtrlAttribute(ranspanelHandle,RANSPANEL_STOPRANS,ATTR_DIMMED,0);
                           SetCtrlAttribute(ranspanelHandle,RANSPANEL_STARTRANS,ATTR_DIMMED,1);
                           for(Index=0; Index<nChannelCount; Index++)   // 将采集的AD数据转换成电压值(mV)
                           {
                           // 将数据换算成电压值,然后由定时器绘制在窗口中
                               Volt[Index] = ((((pADBuffer[CurrentIndex][Index])&0x0FFF)-0x800)*PerLsbVolt);
                                  
                           }
                          
                           {j=0;
               wave1[j]=Volt[0];
               j++;
              if (j>=2048) j=0;  }
                          
                         Correlate(wave1,2048,wave1,2048,wave3);
                         DeleteGraphPlot(ranspanelHandle,RANSPANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);
                         PlotY(ranspanelHandle,RANSPANEL_GRAPH,wave3,4095,VAL_DOUBLE,VAL_THIN_LINE,
                                   VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);
                          
                        break;
        }
        return 0;
}
有什么问题啊 ?运行出不来结果,这是一段相关分析的程序
回复 顶

使用道具 举报

发表于 2008-4-14 13:37:19 | 显示全部楼层
pADBuffer这个应该是在其他地方的采集出来的结果,它应该有个定时器在采集,然后放这个全局变量里面的!所以您现在写的程序基本上都没有涉及到采集卡,应该有其他地方采集好了!
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-14 15:58:09 | 显示全部楼层
斑竹您好,这是我编制的程序,能不能麻烦您给看下,看问题出在什么地方,不知道您能不能抽出点时间,谢谢您了

[ 本帖最后由 justin566 于 2008-4-14 16:04 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

发表于 2008-4-15 00:10:07 | 显示全部楼层
看看再说,呵呵!
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-28 17:45 , Processed in 0.063555 second(s), 11 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表