第1章 计算机测控系统实验基础
④Windows 2000将会显示找到新硬件,可按找到新硬件向导进行下一步; ⑤选择搜索适用与我的设备的驱动程序(推荐),下一步; ⑥选择驱动所在目录,进行安装(\\ac6611\\driver\\); ⑦按找到新硬件向导的提示进行下一步;
⑧Windows 2000将显示完成添加/删除硬件向导,单击完成即可完成安装过程
安装完毕后将在设备管理器中出现一个其他设备(其他设备是问号,不表示设备有问题,只是表示系统不知道ac6611板卡是何种类型设备)
(3)Windows XP平台下安装AC6611驱动程序 ①关闭计算机的电源;
②将ac6611板卡插入PCI槽中;
③打开计算机电源,启动Windows XP,Windows XP将会显示找到新硬件; ④在“找到新硬件向导”对话窗中选择“从列表或指定位置安装”,下一步; ⑤选择驱动所在目录,进行安装(\\ac6611\\driver\\); ⑥按找到新硬件向导的提示进行下一步;
⑦Windows XP将显示完成添加/删除硬件向导,单击完成即可完成安装过程
安装完毕后将在设备管理器中出现一个其他设备(其他设备是问号,不表示设备有问题,只是表示系统不知道ac6611板卡是何种类型设备)
驱动安装后,ac6611.sys, ac6611.dll文件就自动被复制到系统中去了,可以进行其他测试、开发工作了。若无法正常安装,请换一台机器再尝试安装过程,若安装成功,说明安装不成功的机器系统有问题,考虑重装系统,在进行安装AC6611驱动。
注意:一般情况下,实验室已经安装好AC6611的驱动程序,只是在驱动程序出现问题或在没有驱动程序的机器上使用AC6611时才需要重新安装驱动程序。
1.2.8 AC6611测试程序的使用方法
使用AC6611测试程序可以检验AC6611卡件的功能是否正确,AC6611测试程序不需要安装,其名称为“AC6611(静态).EXE”,找到其存放目录(可以询问实验老师)双击即可运行,其界面如下图所示。界面分为A/D、D/A和I/O三个测试区域。
16
计算机测控系统实验指导书
(1)AC6611模拟量输入的测试
以下操作在界面的A/D测试区域进行操作,如右图所示。
①选择输入量程
AC6611的输入量程可以是0~5V、0~10V和-5V~+5V,选择的输入量程应该和板卡设置的量程一致,否则无法获得正确的采集结果。
②选择起始通道通道和结束通道 AC6611共有16个通道,可以选择任何一个或多个通道进行采集,如果只采集一个通道,将起始通道和结束通道设为相同即可。
③给指定的通道施加电压信号,注意不能超过选择的量程和极限电压范围,否则将损坏AC6611板卡。
④按启动按钮,启动数据采集,其显示情况如右图所示。
⑤观察采集结果和实际施加的电压是否相同或接近,如果相同或接近,则说明板卡是好的,否则说明板卡存有故障。如果板卡是好的,则还可利用测试软件测试其各项指标。
注意:可以使用AC6611的D/A输出作为电压信号源。
(2)AC6611模拟量输出的测试
以下操作在界面的A/D测试区域进行操作,如下图所示
①选择输入量程
AC6611的模拟量输出量程可以是0~10V或-10V~+10V,选择的输出量程应该和板卡设置的量程一致,否则无法获得正确的采集结果。
②使用鼠标移动滑块即可改变模拟量输出值,滑块移动后对应的电压值在屏幕上有显示。 ③使用万用表测量输出电压,如果和给定的输出电压一致或接近,则说明AC6611的D/A输出是正常的,否则有问题。
④通过测试软件可以测试D/A的各项指标。
17
第1章 计算机测控系统实验基础
注意:可以将AC6611的A/D当作万用表使用。
(3)AC6611 I/O功能的测试
以下操作在界面的I/O测试区域进行操作,如下图所示。
AC6611共有16路开关量输入和16路开关量输出,其中DI7~DI0和DI15~DI8分别为开关量输入的低8路(占1字节)和高8路(占1字节);其中DO7~DO0和DO15~DO8分别为开关量输出的低8路(占1字节)和高8路(占1字节)。对于开关量输入,红色方块表示高电平,绿色方块表示低电平;对于开关量输出,划钩(选中)表示输出高电平,反之输出低电平。 采用万用表测量其输出是高电平还是低电平。
注意:可以将某路开关量输出和开关量输入互连,通过改变某路开关量输出,观察某路开关量输入是否跟随开关量输出变化来测试I/O功能是否正确。
1.2.9 AC6611程序设计(开发)
AC6611提供有WDM驱动程序,支持Windows 98/Windows 2000/XP操作系统,提供DLL接口,支持多种语言,并提供大量例程方便用户开发使用(Visual C 6.0(win32 console、MFC)、Visual Basic 6.0、C++ Builder 5.0、Delphi 6.0)。 开发工作主要是通过调用DLL库中的专用函数操作AC6611板卡,从而达到实现AD、DA、DIO等功能。对于C++一类的语言,可以使用动态调用DLL的方法使用DLL,如Visual C++\\C++ Builder;对于Visual Basic\\Delphi等语言基本省略了加载DLL的过程,定义了函数说明后,可以直接使用DLL中的函数。
18
计算机测控系统实验指导书
(1)基本步骤
对于需要自行加载DLL的程序设计语言,AC6611程序设计的步骤如下: ①加载DLL;
②调用AC6611_CreateDevice();
③调用AC6611_AD( )、AC6611_DA( )、AC6611_DI( )、AC6611_DO( )?? ④AC6611_CloseDeivce()。
⑤卸载DLL
对于不需要自行加载DLL的程序设计语言,AC6611程序设计的步骤如下: ①调用AC6611_CreateDevice();
②调用AC6611_AD( )、AC6611_DA( )、AC6611_DI( )、AC6611_DO( )?? ③AC6611_CloseDeivce()。 开发流程如下图所示。
加载DLL DLL加载成功 N DLL不存在 未正确安 装 Y AC6611_CreateDevice 可否建立 设备句柄? N 指定板卡 未安装 Y 操作功能函数 AC6611_AD AC6611_DA AC6611_DI AC6611_DO ?? N AC6611_CloseDevice 卸载DLL 结束 19
第1章 计算机测控系统实验基础
(2)头文件
应在窗体头文件末增加以下内容 //define the function of Dll HINSTANCE hDLL; //DLL句柄
int hDevice; //驱动 句柄--->暂定为全局变量,自定义时,可以自己传递参数 unsigned long ErrorOf6611;
int __stdcall (*AC6611_CreateDevice)(int, unsigned long *);//创建驱动句柄 int __stdcall (*AC6611_CloseDevice)(int);//关闭驱动句柄
int __stdcall (*AC6611_DI)(int, int , unsigned char*);//输入数字量 int __stdcall (*AC6611_DO)(int, int , unsigned char);//输出数字量 int __stdcall (*AC6611_DiBit)(int, int , unsigned long);//输入数字量
int __stdcall (*AC6611_DoBit)(int, int , unsigned long, int);//输出数字量 int __stdcall (*AC6611_DA)(int, unsigned long);//DA输出
;//DA电压转换函数,将电压转换成0-4095,mode=0,1对应0-10V,+-10V int __stdcall (*AC6611_VoltageToDA)(float Voltage, int mode) //自动作延时10uS,返回AD数值0-4095
int __stdcall (*AC6611_AD)(int, int, unsigned long*);
int __stdcall (*AC6611_AD_CHN)(int, unsigned long);//设置通道0-15
int __stdcall (*AC6611_ADS)(int, unsigned long*);//直接采样,返回AD数值0-4095 //转换成实际电压的数据mode=0,1,2对应转换为5V,10,+-5V float __stdcall (*AC6611_ADToVoltage)(int AD, int mode);
注意:可以通过拷贝和粘贴范例程序的上述代码避免繁琐输入。
(3)主要API函数及其应用(均以C++Builder为例) 1)AC6611_CreateDevice
函数功能:创建AC6611设备驱动句柄
函数原型:HANDLE AC6611_CreateDevice(DWORD instance, PDWORD pError); 参数:
instance:板卡的编号0,1,2根据选择的板卡号,即第一、二、三块AC6611卡; pError:出错代码;
返回值:获得的驱动句柄由此返回;
备注:当获得有效句柄,说明该编号的AC6611存在;若句柄无效,则该编号的句柄不存在;这样比较方便进行多板卡操作; 实例:
void __fastcall TForm1::FormCreate(TObject *Sender) {
hDLL=LoadLibrary(\
if(hDLL!=NULL)Label6->Caption = \//Label6因程序而异 //创建驱动句柄
(FARPROC &)AC6611_CreateDevice=GetProcAddress(hDLL,\//关闭驱动句柄
(FARPROC &)AC6611_CloseDevice=GetProcAddress(hDLL,\
20