计算机测控系统实验指导书
//数字量输入,port=0-1两个通道,8位数据由DiData返回
(FARPROC &)AC6611_DI=GetProcAddress(hDLL,\//数字量输出,port=0-1两个通道,8位数据由DoData输出
(FARPROC &)AC6611_DO=GetProcAddress(hDLL,\//数字量输入,port=0-1两个通道,指定位输入
(FARPROC &)AC6611_DiBit=GetProcAddress(hDLL,\//数字量输出,port=0-1两个通道,指定位输出
(FARPROC &)AC6611_DoBit=GetProcAddress(hDLL,\//DA输出,0-4095
(FARPROC &)AC6611_DA=GetProcAddress(hDLL,\
(FARPROC &)AC6611_VoltageToDA=GetProcAddress(hDLL,\//通用AD采样
(FARPROC &)AC6611_AD=GetProcAddress(hDLL,\//设置AD通道0-15
(FARPROC &)AC6611_AD_CHN=GetProcAddress(hDLL,\//直接AD采样,为单通道AD采样设计
(FARPROC &)AC6611_ADS=GetProcAddress(hDLL,\
(FARPROC &)AC6611_ADToVoltage=GetProcAddress(hDLL,\hDevice=AC6611_CreateDevice(0, &ErrorOf6611); //创建驱动,选择第0块卡 if(hDevice != -1){
Label5->Caption = \因程序而异 }
else {
Label5->Caption = \
} }
注意:可以通过拷贝和粘贴范例程序的上述代码避免繁琐输入,以后雷同。
2)AC6611_CloseDevice
函数功能:关闭AC6611驱动句柄;
函数原型:int AC6611_CloseDevice(HANDLE hDevice); 参数: hDevice:欲关闭的驱动句柄;
返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得); 实例:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) {
if(hDevice != NULL) AC6611_CloseDevice(hDevice); //关闭设备驱动 if(hDLL != NULL) FreeLibrary(hDLL); }
21
第1章 计算机测控系统实验基础
3)AC6611_DI
函数功能:输入数字量;
函数原型: int AC6611_DI(HANDLE hDevice, int port, unsigned char* data); 参数:
hDevice :驱动句柄;
port:端口号0,1,每通道有8个IO点,8bit。数据分别对应8个DI输入; data:输入的数据由此指针返回;
返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得);
备注:获得每位的操作,可以用该位为1,其他位为0的数相与,即可获得该位是1还是0; 实例: ??
unsigned char didata0, didata1;
AC6611_DI(hDevice, 0, &didata0); //数字量输入0口,数据存放在变量di_data0中 AC6611_DI(hDevice, 1, &didata1); //数字量输入1口,数据存放在变量di_data1中 Label1->Caption = IntToHex(didata0, 2); Label2->Caption = IntToHex(didata1, 2); ??
4)AC6611_DO
函数功能:输出数字量;
函数原型: int AC6611_DO(HANDLE hDevice, int port, unsigned char data); 参数:
hDevice :驱动句柄;
port:端口号0,1,每通道有8个IO点,8bit; data:输出的数据(8Bit数据,代表8个IO点);数据分别对应输出的8位数据; 返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得); 备注:
为将某位输出为1,可以将该位为1,其他位为0的数据和原来输出的数据进行或操作,这样其他位不变的情况下,该已经成为1了;为将某位输出为0,可以将该位为0,其他位为1的数据和原来输出的数据进行与操作,这样其他位不变的情况下,该已经成为0了; 实例: ??
AC6611_DO(hDevice, 0, 0xaa); //数字量输出0口,aa() AC6611_DO(hDevice, 1, 0x55); //数字量输出1口,55() ??
5)AC6611_DiBit
函数功能:读出数字量端口中指定的BIT;
函数原型: AC6611_DoBit(HANDLE hDevice, int port, unsigned char WhatBit, ); 参数:
hDevice :驱动句柄; port:IO端口号,0、1;
22
计算机测控系统实验指导书
WhatBit :8BIT中的那个BIT需要改变状态;取值为0-7; 返回值:指定位的值,1为高电平,0为低电平; 备注:方便开发人员直接读取端口中的某位的状态; 实例: ??
for(i=0;i<8;i++)
{
didata=didata | (1<<(i*AC6611_DiBit(hDevice, 0 , i)));//读入各BIT位 } ??
6)AC6611_DoBit
函数功能:输出数字量中指定的BIT;
函数原型: AC6611_DoBit(HANDLE hDevice, int port, unsigned char WhatBit, bitstate); 参数:
hDevice :驱动句柄; port:IO端口号,0、1;
WhatBit :8BIT中的那个BIT需要改变状态;取值为0-7; bitstate:1为高电平,0为低电平;
返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得); 实例: ??
AC6611_DoBit(hDevice, 0, i, 1); //直接BIT输出,通道0,D0,置为1 ??
7)AC6611_DA
函数功能:将0-4095的数值DA输出;
函数原型:AC6611_DA(HANDLE hDevice, unsigned long data); 参数:
hDevice :驱动句柄;
data :16位数值,范围0-4095;
返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得); 备注: 电压转换公式:DAData=实际电压/10.0*4095.0(0-10V);
电压转换公式:DAData=(实际电压+10.0)/20.0*4095.0(±10V); 根据需要也可以使用AC6611_VoltageToDA()做电压/数值转换; 转换时注意浮点和整型的关系问题;
实例: ??
float da_data;
da_data=5.789;
AC6611_DA(hDevice, AC6611_VoltageToDA(da_data,0)); //DA输出(0-10V)
23
int 第1章 计算机测控系统实验基础
// AC6611_DA(hDevice, AC6611_VoltageToDA(da_data,1));//DA输出(-10V-+10V)
Label12->Caption = FloatToStrF(da_data, ffFixed, 10,3);
Label11->Caption = IntToStr(AC6611_VoltageToDA(da_data,1)); ??
8)AC6611_VoltageToDA
函数功能:将(0-10V/±10V)实际电压的数据转换成0-4095; 函数原型:AC6611_VoltageToDA(float Voltage, int mode); 参数: Voltage :实际的浮点电压值(0-10v/±10V); Mode:0,1两种模式(0:0-10V/1:±10V); 返回值:转换成为0-4095的DA输出值;
备注:提供用户方便使用,省略了烦琐的数值转换。
电压转换公式:DAData=(输出电压+10)/20*4095(±10V); 例子:见AC6611_DA
9)AC6611_AD
函数功能:对指定通道chn进行采样,返回AD数值0-4095;
函数原型:AC6611_AD(HANDLE hDevice, int chn, unsigned long *AD); 参数:
hDevice :驱动句柄;
chn:AD转换通道号,0-15共16个通道;
AD:AD转换的数值有此指针返回,范围位0-4095;
返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得); 备注:做普通采集使用,加入了通道转换之间的延时。
电压转换公式:AD实际电压=ADData/5.0*4095.0 (0-5V) 电压转换公式:AD实际电压=ADData/10.0*4095.0 (0-10V) 电压转换公式:AD实际电压=(ADData-2048)/5.0*2048.0 (±5V)
转换时注意浮点和整型的关系问题;
或者根据需要选择提供的转换函数进行转换。
AC6611_ADToVoltage( )
如果信号源或者信号传输通道有噪声,影响准确采样,而在硬件上又无法解决,可以考虑采用多次测量求平均值的方法来解决。
测量的时候要注意:不用的模拟输入端要接地。使用的信号端一定要保证地线接触良好,否则不同电源系统地线之间的电压差将严重损坏AC6611板卡。
注意:为检测AC6611采样是否准确,请使用一节1.5V的干电池接入输入端或使用精密电压源,进行测量;不建议使用一般供电电源(使用一般电源有两个缺点:①易损坏AC6611;②普通电源的电压精度太差,和AC6611 0.1%的精度比差太远);使用对比用的电压表应考虑使用精度高于0.1%的高档仪表。
24
计算机测控系统实验指导书
实例: ??
unsigned long ad_data;
AC6611_AD(hDevice, 0, &ad_data); //0通道AD采样,数据存储于ad_data中(0-4095) //转换成0-5V显示
Label7->Caption = FloatToStrF(AC6611_ADToVoltage(ad_data,0), ffFixed, 10,3)+'V'; //转换成0-10V显示
//Label7->Caption = FloatToStrF(AC6611_ADToVoltage(ad_data,1), ffFixed, 10,3)+'V'; //转换成-5V-+5V显示
//Label7->Caption = FloatToStrF(AC6611_ADToVoltage(ad_data,2), ffFixed, 10,3)+'V'; ??
10)AC6611_ADS
函数功能:直接采样,返回AD数值0-4095;
函数原型:AC6611_ADS(HANDLE hDevice, unsigned long *AD); 参数:
hDevice :驱动句柄;
AD:AD转换的数值有此指针返回,范围位0-4095;
返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得); 备注:直接采样,不考虑AD通道转换的电压建立延时问题,主要针对单通道采样。 详细解释见AC6611_AD函数的备注 实例:
unsigned long ad_data; unsigned long chn=0;
AC6611_AD_CHN(hDevice, chn); //设置AD转换通道为0通道 AC6611_ADS(hDevice, &ad_data); //直接采样 //转换成0-5V显示
//Label9->Caption = FloatToStrF(AC6611_ADToVoltage(ad_data,0), ffFixed, 10,3); //转换成0-10V显示
Label9->Caption = FloatToStrF(AC6611_ADToVoltage(ad_data,1), ffFixed, 10,3); //转换成-5V-+5V显示
//Label9->Caption = FloatToStrF(AC6611_ADToVoltage(ad_data,2), ffFixed, 10,3);
11)AC6611_AD_CHN 函数功能:设置AD通道;
函数原型:AC6611_AD_CHN(HANDLE hDevice, int chn); 参数:
hDevice :驱动句柄;
chn:AD转换通道号,0-15共16个通道;
返回值:出错信息,0为成功执行,其他为错误代码(由GetLastError()函数获得); 备注:配合AC6611_ADS使用 实例: 见AC6611_ADS
25