3080|1

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

数据采集卡的输出频率控制 [复制链接]

大家好!我使用研华的PCI-1712数据采集卡做个程序,通过研华提供的例子现在实现了数据的采集,我的问题主要有以下几个:
1.使用了研华ActiveDAQ Pro这个插件,它里面有一个函数long AcquireBulkDataToMemory(
  long dataCount,
  VARIANT* dataBuffer,
  long timeOut = 0,
  boolean cyclic = false,
  boolean synchronous = true
);也就是把数据读到内存里。它的第一个参数是采集样点数,程序运行前必须设定,最大可设为4M,当采集样点数达到这个值时,程序就停止。现在想实现不间断的采集,也就是当达到采集样点数时,继续运行这个函数。要怎么实现?
2.输出数据时调用long TransferBulkDataFromMemory(
   long dataCount,
   VARIANT dataBuffer,
   long timeOut = 0,
   BOOL cyclic = false,
   BOOL synchronous = true
);问题是输出的数据频率和输入的数据频率不一致(对数据并没有做任何处理,等输入输出调通后再考虑对数据),这是什么原因?
3.当改变输入信号,比如从正弦信号改为方波信号时,输出的还是正弦信号而不是方波,输出不能跟着输入的改变而改变,这是什么原因?希望大家帮助。有做过类似程序的高手能否发一个相关的代码,让小弟参考一下。邮箱:fancycup@126.com下面是采集的代码(用的是C#).
private void cmdStart_Click(object sender, System.EventArgs e)
{
  int count;
  int i;
  bool b;
                       
try
{
        count = int.Parse(txtCount.Text);
        // Set the FAI parameters.
         //axAICtrl就是控制数据输入的,下面都是对数据采集考参数的设定。如触发模式,采样频率
        axAICtrl.TraceTriggerMode = (AdvAILib.TraceTriggerMode)(cmbTriggerMode.SelectedIndex);
        axAICtrl.TraceTriggerEdge = (AdvAILib.TraceTriggerEdge)( cmbTriggerEdge.SelectedIndex);
        axAICtrl.TraceTriggerSource =(AdvAILib.TraceTriggerSource)( cmbTriggerSource.SelectedIndex);
        axAICtrl.DataPacerSource = (AdvAILib.PacerSource)(cmbPacerSource.SelectedIndex);
        axAICtrl.TraceTriggerDelayTime = double.Parse(txtTriggerDelayTime.Text);
        axAICtrl.TraceTriggerValue = double.Parse(txtTriggerVoltage.Text);
        axAICtrl.DataSampleRate = double.Parse(txtSampleRate.Text);
        axAICtrl.ChannelScanStart = int.Parse(txtStartChan.Text);
        axAICtrl.ChannelScanCount = int.Parse(txtChanNumber.Text);
        axAICtrl.DataReturnType =(AdvAILib.DataReturnType)1;
        //Ocx allocate the buffer of DataDigital ,equal to new object!
                               
        object DataDigital;
        DataDigital = null;
        // Engage the FAI with synchronous and noncyclic mode
         //主要就是这两句
        count = axAICtrl.AcquireBulkDataToMemory(count,outDataDigital,0,false ,true);
         b = axAdvAO1.TransferBulkDataFromMemory(count, DataDigital, -1, false, true);                                Int16[] binary = new Int16[count];
                                binary = ( Int16[] )DataDigital;
                                // Stop the FAI with default waitting time
                                axAICtrl.StopAcquireBulkData(0);                       
                                object DataAnalog ;
                                // Convert the digital data to analog
                        axAICtrl.ConvertDigitalValueToAnalog(DataDigital,out DataAnalog ,count);
                                float[] voltage = new float[count];
                                voltage = (float[])DataAnalog;
                               
                                frmDisp.AICtrlInit(ref axAICtrl,ref cmdStart,ref cmdStop);
                                // Display the data
                                frmDisp.Show();
                                frmDisp.lstRawData.Items.Clear();
                                frmDisp.lstVoltage.Items.Clear();
                                txtCount.Text = count.ToString();
               
                                for(i=0;i                                 {
                                        frmDisp.lstRawData.Items.Add(binary);
                                        frmDisp.lstVoltage.Items.Add(voltage);
                                }
                               
                                cmdStart.Enabled = false;
                                cmdStop.Enabled = true;
                        }
                        catch (Exception err)
                        {
                                axAICtrl.StopAcquireBulkData(0);
                                MessageBox.Show( err.Message );
                        }
                }

谢谢大家了!

最新回复

有的问题看采集卡的文档应该可以得到解决。没使用过,随便说说。   详情 回复 发表于 2009-7-20 19:20
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有的问题看采集卡的文档应该可以得到解决。没使用过,随便说说。


引用楼主 fancycup 的回复:
大家好!我使用研华的PCI-1712数据采集卡做个程序,通过研华提供的例子现在实现了数据的采集,我的问题主要有以下几个:
1.使用了研华ActiveDAQ Pro这个插件,它里面有一个函数long AcquireBulkDataToMemory(
? long dataCount,
? VARIANT* dataBuffer,
? long timeOut = 0,
? boolean cyclic = false,
? boolean synchronous = true
);也就是把数据读到内存里。它的第一个参数是采集样点数,程序运行前必须设定,最大可设为4M,当采集样点数达到这个值时,程序就停止。现在想实现不间断的采集,也就是当达到采集样点数时,继续运行这个函数。要怎么实现?
2.输出数据时调用long TransferBulkDataFromMemory(
? long dataCount,
? VARIANT dataBuffer,
? long timeOut = 0,
? BOOL cyclic = false,  // 这里设为true就应该能够循环采样
? BOOL synchronous = true
);问题是输出的数据频率和输入的数据频率不一致(对数据并没有做任何处理,等输入输出调通后再考虑对数据),这是什么原因?
// 这里涉及到信号的重构和数模转换,不是简单输出就能复原信号的
3.当改变输入信号,比如从正弦信号改为方波信号时,输出的还是正弦信号而不是方波,输出不能跟着输入的改变而改变,这是什么原因?希望大家帮助。有做过类似程序的高手能否发一个相关的代码,让小弟参考一下。邮箱:fancycup@126.com下面是采集的代码(用的是C#). // 可能原因和2类似吧。
private void cmdStart_Click(object sender, System.EventArgs e)
{
? int count;
? int i;
? bool b;

try
{
count = int.Parse(txtCount.Text);
// Set the FAI parameters.
? ? ? ? //axAICtrl就是控制数据输入的,下面都是对数据采集考参数的设定。如触发模式,采样频率
axAICtrl.TraceTriggerMode = (AdvAILib.TraceTriggerMode)(cmbTriggerMode.SelectedIndex);
axAICtrl.TraceTriggerEdge = (AdvAILib.TraceTriggerEdge)( cmbTriggerEdge.SelectedIndex);
axAICtrl.TraceTriggerSource =(AdvAILib.TraceTriggerSource)( cmbTriggerSource.SelectedIndex);
axAICtrl.DataPacerSource = (AdvAILib.PacerSource)(cmbPacerSource.SelectedIndex);
axAICtrl.TraceTriggerDelayTime = double.Parse(txtTriggerDelayTime.Text);
axAICtrl.TraceTriggerValue = double.Parse(txtTriggerVoltage.Text);
axAICtrl.DataSampleRate = double.Parse(txtSampleRate.Text);
axAICtrl.ChannelScanStart = int.Parse(txtStartChan.Text);
axAICtrl.ChannelScanCount = int.Parse(txtChanNumber.Text);
axAICtrl.DataReturnType =(AdvAILib.DataReturnType)1;
//Ocx allocate the buffer of DataDigital ,equal to new object!

object DataDigital;
DataDigital = null;
// Engage the FAI with synchronous and noncyclic mode
? ? ? ? //主要就是这两句
count = axAICtrl.AcquireBulkDataToMemory(count,outDataDigital,0,false ,true);
? ? ? ? b = axAdvAO1.TransferBulkDataFromMemory(count, DataDigital, -1, false, true); Int16[] binary = new Int16[count];
binary = ( Int16[] )DataDigital;
// Stop the FAI with default waitting time
axAICtrl.StopAcquireBulkData(0);
object DataAnalog ;
// Convert the digital data to analog
? ? ? ? axAICtrl.ConvertDigitalValueToAnalog(DataDigital,out DataAnalog ,count);
float[] voltage = new float[count];
voltage = (float[])DataAnalog;

frmDisp.AICtrlInit(ref axAICtrl,ref cmdStart,ref cmdStop);
// Display the data
frmDisp.Show();
frmDisp.lstRawData.Items.Clear();
frmDisp.lstVoltage.Items.Clear();
txtCount.Text = count.ToString();
? ? ? ? ? ? ? ?
for(i=0;i {
frmDisp.lstRawData.Items.Add(binary);
frmDisp.lstVoltage.Items.Add(voltage);
}

cmdStart.Enabled = false;
cmdStop.Enabled = true;
}
catch (Exception err)
{
axAICtrl.StopAcquireBulkData(0);
MessageBox.Show( err.Message );
}
}

谢谢大家了!
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表