急!!在labwindowsCVI7.0里如何使用凌华PCI9111采集卡?? 点击:2690 | 回复:2



tvrc

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 0回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2004年2月20日
发表于:2004-02-27 14:38:00
楼主
我想使用Labwindows 来做一些测试仪器,采集卡是凌华公司的PCI9111DG,但不知如 何在Labwindows内挂上采集卡的驱动程序。我试了两种方法,均会出现“Open driver error!”的错误提示。一开始我以为是驱动程序没有安装好,所以重新装了采集卡的驱动 程序,再次运行,结果还是出现同样的问题,实在是搞不懂。 我将我所用的两种方法说明如下: 1、在源程序第一行加上“#include <windows.h>”,在后面加上采集卡的头文件 “#include "Dask.h"”,并在工程里加入库文件PCI-Dask.lib。结果在初始化卡 (Regsiter_Card函数)时出现错误,返回代码-13,查资料为“Open driver error!”。 2、通过ActiveX控件的方式。先通过Labwindows菜单tools下的Create ActiveX Controller为采集卡的ActiveX控件在labwindows里建立一个Instruments,然后再进行卡 的初始化动作,结果还是出现同样的问题。 我以前用VB做这些程序,为了证明卡的驱动程序没有问题,所以我在VB里试了一下通 过模组Dask.bas及引用ActiveX控件两种方式,结果都没有问题,运行完全正常。然后我又 运行了这两种方式的VC程序,均没有问题。 唉,实在是搞不明白了,请高手多多帮忙了!



朱国宏

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 22回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2002年10月23日
发表于:2004-02-27 14:38:00
1楼
参数位置改过后,问题解决了否 :)

唐总华

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2002年10月21日
发表于:2004-10-20 09:47:00
2楼
tvrc大侠: 不知您的问题解决了吗?我用cvi编程也遇到和老兄类似的问题。 数据采集卡用的是凌华的pci-9118,驱动程序装的是最新4.06版,我所用系统是PIII 500,windows xp,已经把驱动库文件PCI-DASK.dll和头文件DASK.h添加到工程文件中,代码参考pcis-dask code creator。 在调试程序时,编译已经通过,执行程序时,按动虚拟面板按钮,程序没有反应,查看变量,halfready总为0,跳不出do-while循环。我用卡自带的示例对卡作检测是正常的。我把源程序贴给您,烦请大侠百忙之中帮忙看看如何解决,感激不尽!祝工作愉快! #include <windows.h> #include "easyio.h" #include <cvirte.h> #include <userint.h> #include "13.h" #include "Dask.h" //constants definition 用凌华pci-9118自己所带的code creator 自动生成的 #define CardNumber 0 #define ADChan 0 #define ScanCount 65536 #define SampleRate 8000.0000 //AI config constants definition #define ModeCtrl P9118_AI_BiPolar|P9118_AI_SingEnded #define FunCtrl P9118_AI_DtrgNegative|P9118_AI_EtrgNegative #define BurstNumber 0 #define PostCount 0 //variables definition I16 cardID = -1; I16 err=0; BOOLEAN HalfReady = 0; BOOLEAN fstop; U32 AccessCnt = 0; U32 MemSize = 0; U16 InBuf[65536]; //AI data buffer static int panelHandle; //CVI的主函数 int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "13.uir", PANEL)) < 0) return -1; DisplayPanel (panelHandle); RunUserInterface (); DiscardPanel (panelHandle); return 0; } //CVI面板上的数据采集按钮的回调函数,程序运行时按动该按钮,就驱动数采卡进行采集 int CVICALLBACK Start (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: cardID = Register_Card(PCI_9118DG, CardNumber); if (cardID<0) { //Error occurs !! //ToDo : Handle error here } err = AI_InitialMemoryAllocated(cardID,&MemSize); if (err!=NoError) { //Error occurs !! //ToDo : Handle error here } if (MemSize*1024 < ScanCount*sizeof(U16) ) { //available memory size for analog input in the device driver //is smaller than the data size specified!! //ToDo : do something here } err = AI_AsyncDblBufferMode(cardID, 1); if (err!=NoError) { //Error occurs !! //ToDo : Handle error here } err=AI_9118_Config(cardID, ModeCtrl, FunCtrl, BurstNumber, PostCount); if (err!=NoError) { //Error occurs !! //ToDo : Handle error here } err=AI_ContReadChannel (cardID, ADChan, AD_B_5_V, InBuf, ScanCount, SampleRate, ASYNCH_OP); if (err!=NoError) { //Error occurs !! //ToDo : Handle error here } do { do { AI_AsyncDblBufferHalfReady (cardID, &HalfReady, &fstop); } while (!HalfReady); 调试程序时,问题出在该处,变量halfReady总为0,程序跳不出do-while循环 //half buffer data is ready for read AI_AsyncDblBufferTransfer (cardID, InBuf); } while (!fstop); err = AI_AsyncClear(cardID, &AccessCnt); if (err!=NoError) { //Error occurs !! //ToDo : Handle error here } Release_Card(cardID); PlotY (panelHandle, PANEL_GRAPH, InBuf, 65536, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); break; } return 0; } //cvi 退出运行回调函数 int CVICALLBACK Quit (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: QuitUserInterface (0); break; } return 0; }

热门招聘
相关主题

官方公众号

智造工程师