发表于:2005-08-18 14:46:00
楼主
请教一个问题:在VC6.0中用一个DGraph控件显示由数据采集卡采集到的数据。采集部分的代码如下(基于对话框的程序):
void CDlgTest::OnStartAI()
{
/*----变量定义-------*/
I16 err,card_num = 0;
BOOLEAN halfready,fstop;
U32 count = 0;
channel = 0;
samplerate = 2000;
adrange = AD_U_10_V;
readcount = 2048;
char * filename = "9111d";
U32 pView;
F64 voltagearray[2048];
/*--------注册卡------*/
if(card = Register_Card(PCI_9111DG,card_num)<0 )
{
AfxMessageBox(_T("卡注册错误,请重新注册"));
}
/*-------配置卡---*/
err = AI_9111_Config (card,TRIG_INT_PACER, 0, 0 );
if(err!=0)
{
AfxMessageBox(_T("卡配置错误,请重新检查!"));
}
/*----设置双缓冲模式------*/
err = AI_AsyncDblBufferMode(card, 0);
if(err !=0)
{
AfxMessageBox (_T("缓冲出错,请重新确认"));
}
/*--------------------------------*/
err = AI_GetView(card,&pView);
if(err!=0)
{
AfxMessageBox(_T("获得模拟输入内存地址出错"));
}
/*----------连续通道读出-------------*/
err = AI_ContReadChannel(card,channel,adrange ,0,readcount, samplerate, SYNCH_OP);
if(err!=0)
{
AfxMessageBox(_T("连续读出通道出错"));
}
/*--------------------------------*/
err = AI_ContVScale (card, adrange, (void *)pView, voltagearray,readcount);
if (err!=0)
{
AfxMessageBox(_T("连续....出错"));
}
for (int k=0; k< readcount/80,k<10; k++)
{
for (int i = 0 + k * 80; i< 80 + k * 80; i ++ )
{
data[i] = voltagearray[i];
}
m_Graph1.SetPlotNum(1);
m_Graph1.PlotGraphs(ArrayToVar(data,100),1,BoolToVar(false));
}
Release_Card(card);
}
//上面部分变量参数在对话框的头文件中定义了。
问题:
1、AI_ContReadChannel()后面的代码是我从一个例程中直接拷上去的,不过我运行后发现从这个函数开始err的值为-7,然后就运行不下去了。
2、另外一种顺序是Register_Card()-->AI_Config()-->AI_AsyncDblBufferMode()-->AI_ContScanChannelsToFile()-->
do
{
do {
AI_AsyncDblBufferHalfReady(card, &halfReady, &fStop);
} while (!halfReady);
AI_AsyncDblBufferTransfer(card, NULL);
........
} while(!kbhit());
AI_AsyncClear(card, &count1);
Release_Card(card);
请问这两种方式有什么不同呢。是不是第一种方式非双缓冲模式,第二种方法为双缓冲模式?
提问题没经验,可能比较乱,请大家多多帮忙!最好哪位能发个运行成功的例子(最好非控制台的例子)邮箱:bky_2004@163.com.QQ:63161497