登录
首页 嵌入式系统 嵌入式系统
回帖 发帖
正文

主题:请教一个研华采集卡(PCL_818)的dll编程问题 ,万万分谢谢!!!!!

点击:5513 回复:3

在用VC做研华PCL-818数据采集编程时,采用动态连接库方式(818驱动,device manager都已装),按照说明编了一个采集0号通道的例子,运行时先是提示一个AI conversion failed对话框。按确定后,然后又弹出Invalid driver handle failed.我是按照说明来编的阿!我把adsapi32.lib,driver.h,os.h都按照说明设置好了阿!就是不知道出在什么地方,我用研华自带的AD_SOFT例程运行,也出现了AI conversion failed对话框。超级郁闷中:(:(:(。我这方面还没入门,请懂这方面的大侠指教,万分感谢!!!!
主要代码如下:
void CYk1Dlg::OnButton1()
{
   // TODO: Add your control notification handler code here
   ErrCde=DRV_DeviceOpen(0,(LONG far*)&DriverHandle);
   char  szErrMsg[100];
   if(ErrCde!=SUCCESS)
   {
      strcpy(szErrMsg,"Device open error!");
      MessageBox((LPCSTR)szErrMsg,"Device Open",MB_OK);
      return;
   }
   ptDevFeatures.buffer=(LPDEVFEATURES)&DevFeatures;
   ptDevFeatures.size=sizeof(DEVFEATURES);
   if((ErrCde=DRV_DeviceGetFeatures(DriverHandle,
          (LPT_DeviceGetFeatures)&ptDevFeatures))!=SUCCESS)
   {
      DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg,"Driver Message GetFeatures ",MB_OK);
      DRV_DeviceClose((LONG far*)&DriverHandle);  
      return;
      }
   ptAIConfig.DasGain=DevFeatures.glGainList[gwGain].usGainCde;
   ptAIConfig.DasChan=gwChannel;
   if((ErrCde=DRV_AIConfig(DriverHandle,
       (LPT_AIConfig)&ptAIConfig))!=0)
   {
      DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg,"Driver Message AIConfig ",MB_OK);
      DRV_DeviceClose((LONG far*)&DriverHandle);  
      return;
   }
   ptAIVoltageIn.chan=gwChannel;
   ptAIVoltageIn.gain=ptAIConfig.DasGain;
   ptAIVoltageIn.TrigMode=0;//internal trigger
   ptAIVoltageIn.voltage=(FLOAT far*)&fVoltage;
//定时器触发数据采集
   SetTimer(1,500,0);    
}
void CYk1Dlg::OnTimer(UINT nIDEvent)
{
   // TODO: Add your message handler code here and/or call default
   CString szBuffer;
   char  szErrMsg[100];
   strcpy(szErrMsg,"Device open error!");
   szBuffer.Format("data=%10.6f",fVoltage);
   if((ErrCde=DRV_AIVoltageIn(DriverHandle,
       (LPT_AIVoltageIn)&ptAIVoltageIn))!=0)///就在这里出的问题,到底是什么原因呢????????
   {
      DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
      MessageBox((LPCSTR)szErrMsg,"Driver Message AIVoltageIn ",MB_OK);
      DRV_DeviceClose((LONG far*)&DriverHandle);  
      return;
   }    
   CWnd* pWnd=GetDlgItem(IDC_EDIT1);
   pWnd->SetWindowText(szBuffer);
   pDataList->InsertString(0,szBuffer);    
   CDialog::OnTimer(nIDEvent);
}
05-12-01 11:17
我是北京中泰的PCI卡,DLL编程老出错
06-02-06 20:41
type
pZT_PCIBOARD=^ZT_PCIBOARD;
//用于传递参数的结构
ZT_PCIBOARD = Record
   lIndex: LONGINT; //PCI卡索引值,该值在安装时被系统自动分配
   hHandle: double;//PCI卡的操作句柄(只有涉及中断时才用)
   nChBase : byte ;//默认为0,表示通道号从0开始;
                      //设为1,表示通道号从1开始,
                      //不能设为0或1以外的数
   nCh : word; //通道号
   lCode : LONGINT; //设备控制字,具体含义见说明书中的函数说明
   lData : double; //输入输出数据变量,一般用于传递单个数据
   errorLevel : LONGINT; //某些函数的错误返回码,0表无错误,其他错误代码请看头文件
   pldata : ^double; //输入输出数据指针,用于传递成批数据
end;
//打开中泰板卡
Function OpenDevicePlx(nZT_PCIBOARD:pZT_PCIBOARD):double;stdcall; external 'PCI8320.dll' name 'OpenDevicePlx' ;
//关闭中泰板卡
Function CloseDevicePlx(nZT_PCIBOARD:pZT_PCIBOARD):double;stdcall; external 'PCI8320.dll' name 'CloseDevicePlx ' ;
//模拟量输入
  Function ZT8320AI(nZT_PCIBOARD:PZT_PCIBOARD):double ; stdcall; external 'PCI8320.dll' name'ZT8320AI' ;

//模出部分
Function ZT8320DA(nZT_PCIBOARD:pZT_PCIBOARD):double ; stdcall; external 'PCI8320.dll' name'ZT8320DA' ;
06-02-06 20:43
3楼
该帖内容不符合相关规定!
06-02-14 11:40

工控新闻

更多新闻资讯