📄 pci8361b.h
字号:
#ifndef PCI8361B_H
#define PCI8361B_H
#ifdef PCI8KPLX_EXPORTS
#define ZT_API __declspec(dllexport)
#else
#define ZT_API __declspec(dllimport)
//定义错误号
#define ZT_SUCCESS 0 //无错误
#define ERR_PARAMETER1 1 //参数1错
#define ERR_PARAMETER2 2 //参数2错
#define ERR_PARAMETER3 3 //参数3错
#define ERR_PARAMETER4 4 //参数4错
#define ERR_PARAMETER5 5 //参数5错
#define ERR_PARAMETER6 6 //参数6错
#define ERR_PARAMETER7 7 //参数7错
#define ERR_PARAMETER8 8 //参数8错
#define ERR_PARAMETER9 9 //参数9错
#define ERR_PARAMETER10 10 //参数10错
#define ERR_PARAMETER11 11 //参数11错
#define ERR_PARAMETER12 12 //参数12错
#define ERR_PARAMETER13 13 //参数13错
#define ERR_PARAMETER14 14 //参数14错
#define ERR_PARAMETER15 15 //参数15错
#define ERR_PARAMETER16 16 //参数16错
#define ERR_PARAMETER17 17 //参数17错
#define ERR_PARAMETER18 18 //参数18错
#define ERR_PARAMETER19 19 //参数19错
#define ERR_PARAMETER20 20 //参数20错
#define ERR_PARAMETER_BASEADDR 21 //针对ISA卡,板卡基地址超出范围,应该在0x100至0x3F0之间未被系统占用的地址
#define ERR_PARAMETER_CARDNO 22 //针对PCI卡,板卡索引号超出范围,这版驱动中板卡索引号从1开始
#define ERR_PARAMETER_CHMODE 23 //通道方式参数错误,通道方式超出范围,一般只有0--3共4种方式
#define ERR_PARAMETER_CH 24 //通道号参数错误,通道号超出范围
#define ERR_PARAMETER_CHIP_OR_GROUP 25 //芯片号或组号参数错误,芯片号或组号超出范围
#define ERR_PARAMETER_PORT 26 //口号参数错误,口号超出范围
#define ERR_PARAMETER_AI_RANGE 27 //AD量程参数错,此卡不支持这种AD输入量程
#define ERR_PARAMETER_AI_AMP 28 //AD增益参数错
#define ERR_PARAMETER_AI_STARTMODE 29 //AD启动方式参数错
#define ERR_PARAMETER_AO_RANGE 30 //DA量程参数错,此卡不支持这种DA输出量程
#define ERR_PARAMETER_ADFREQ 31 //AD采集频率(或AD分频系数)参数错
#define ERR_PARAMETER_IRQ 32 //与中断相关参数错,可能是此卡不支持这种中断方式或中断号
#define ERR_PARAMETER_NULL_POINTER 33 //空指针错。原因:缓冲区首地址为空或者用户传入的参数导致引用到空指针
#define ERR_AD_OVERTIME 34 //AD超时。对于ISA卡,出错原因可能是:未插卡或IO地址与板卡上设置不匹配。当用定时启动AD或外触发启动AD时,一般不应检查AD是否超时
#define ERR_OPEN_DEVICE 35 //打开设备失败,对于PCI卡,出错原因可能是:未插卡或未装驱动,或dll与sys版本不一致
#define ERR_CLOSE_DEVICE 36 //关闭设备失败
#define ERR_TIMING 37 //定时未到或外触发脉冲未到
#define ERR_IOADDR_DA_OVERTIME 38 //带光隔DA写过程超时
#define ERR_OPEN_IRQ 39 //打开中断出错
#define ERR_FUNC_CANNT_RUN 40 //此函数不能在这台计算机上运行
#define ERR_ASYNC_FUNC_FAILED 41 //异步函数调用失败
#define ERR_FUNC_OPERATE 42 //在当前的卡的设置状态下,不应该调用此函数
#define ERR_EXCHANGE_DATA 43 //与底层驱动之间交换数据出错
#define ERR_EEPROM_ID 44L //EEPROM标识不正确。可能的原因:1. EEPROM未初始化 2. EEPROM不存在;3. EEPROM损坏
#define ERR_EEPROM_VERSION 45L //未知EEPROM数据格式版本
#define ERR_EEPROM_REC_FORMAT 46L //数据格式不正确
#define ERR_EEPROM_CRC 47L //CRC检验错
#define ERR_EEPROM_REC_DATA 48L //记录中包含的数据错,从EEPROM中包含非法数据
#define ERR_EEPROM_REC_NOTFOUND 49L //未找到指定记录
#define ERR_EEPROM_REC_ADDR 50L //未找到数据地址错
#define ERR_EEPROM_READ 51L //EEPROM读操作失败
#define ERR_EEPROM_WRITE 52L //EEPROM写操作失败
#define ERR_SW_MODE_COLLISION 53L //开关量操作与先前设置的开关量方式冲突
#endif
extern "C"
{
ZT_API unsigned long _stdcall ZT8361_GetLastErr();
//函数名称:ZT8361_GetLastErr
//函数功能:得到当前错误号。如果错误号为0表示无错误
//返回值:错误代码,错误代码含义请看宏定义
ZT_API void _stdcall ZT8361_ClearLastErr();
//函数名称:ZT8361_ClearLastErr
//函数功能:清除错误号。
// 注意:一旦产生错误,为了使函数重新正常执行,必须清除错误号
//返回值:无
ZT_API long _stdcall ZT8361_OpenDevice(unsigned long cardNO);
//函数名称:ZT8361_OpenDevice
//函数功能:打开设备。必须在调用其他函数之前调用。
// 放在程序初始化时调用比较恰当,只调用一次即可
//入口参数:
// cardNO:板卡号默认从 1 开始
// 如果系统中只用了一块这种型号的板卡,令这个参数为1就行了
// 如果系统中用了多块这种型号的板卡,基地址最小的板卡索引号为1,基地址次小的板卡索引号为2,以此类推
// 注意:用户一般不用关心板卡基地址的具体值
//返回值: 0 表成功
// -1 表失败,应该进一步调用 ZT8361_GetLastErr 判断出错原因
ZT_API long _stdcall ZT8361_CloseDevice(unsigned long cardNO);
//函数名称:ZT8361_CloseDevice
//函数功能:关闭指定的设备
//
//入口参数:ZT8361_CloseDevice
// cardNO:板卡号默认从 1 开始
// 如果系统中只用了一块这种型号的板卡,令这个参数为1就行了
// 如果系统中用了多块这种型号的板卡,基地址最小的板卡索引号为1,基地址次小的板卡索引号为2,以此类推
//返回值: 0 表成功
// -1 表失败,应该进一步调用 ZT8361_GetLastErr 判断出错原因
ZT_API long _stdcall ZT8361_GetBaseAddr(unsigned long cardNO);
//函数名称:ZT8361_GetBaseAddr
//函数功能:得到指定板卡的基地址。
// 在2K或XP下用户不能用得到的基地址直接访问端口
//入口参数:
// cardNO:板卡号默认从 1 开始,有关这个参数的详细说明,请参考 ZT8361_OpenDevice 函数
//
//返回值: 大于0 表示返回板卡的基地址
// -1 表失败,应该进一步调用 ZT8361_GetLastErr 判断出错原因
///////////////////////////////////// 普通AD函数 /////////////////////////////////////////
ZT_API long _stdcall ZT8361_AIinit(unsigned long cardNO,
unsigned long chMode,
unsigned long chNO,
unsigned long AIrange,
unsigned long *pAmpInxArr,
unsigned long ADstartMode,
unsigned long ADfreq,
unsigned long ADctrlWord,
unsigned long ADoverTime);
//函数名称:ZT8361_AIinit
//函数功能:AD初始化。主要是设置AD方式控制寄存器,一般不要调用 WriteW 直接写入AD方式控制字。
//
//入口参数:
// cardNO:板卡号默认从 1 开始,有关这个参数的详细说明,请参考 ZT8361_OpenDevice 函数
// chMode:通道方式
// 0 = 单板单通道。单块PS端子板,此PS端子板固定单通道方式
// 1 = 多板单通道。多块PS端子板循环,多块PS端子板固定单通道方式
// 2 = 单板多通道。单块PS端子板,此PS端子板多通道扫描方式
// 3 = 多板多通道。多块PS端子板循环,多块PS端子板多通道扫描方式
// 提示:1. 这里所说的PS端子板是指PS-010热电偶信号调理板或PS-011热电阻信号调理板
// 2. 一块8361可带8块PS端子板,而一块PS端子板有16个通道
// 3. 如果用户不使用PS端子板,则只用chMode=0或chMode=1两种方式即可
// 4. PS端子板号相当于AD板的通道号
// chNO:设置PS端子板号或多通道扫描中止PS端子板号,以及所有PS端子板通道号或PS端子板多通道扫描通道号
// 当 chMode = 0 时,单板单通道,低8位(bit7~bit0)为PS端子板号(1--8),
// bit15~bit8位为此PS端子板通道号(1--16)
// 当 chMode = 1 时,多板单通道,低8位(bit7~bit0)为多通道扫描中止PS端子板号(1--8),
// bit15~bit8位为多块PS端子板通道号(1--16)
// 当 chMode = 2 时,单板多通道,低8位(bit7~bit0)为PS端子板号(1--8),
// bit15~bit8位为此PS端子板多通道扫描中止通道号(1--16)
// 当 chMode = 3 时,多板多通道,低8位(bit7~bit0)为PS端子板号(1--8),
// bit15~bit8位为多块PS端子板多通道扫描中止通道号(1--16)
// 提示:1. PS端子板号相当于AD板的通道号
// 2. 如果用户不使用PS端子板,bit15~bit8位设为1即可
//
// AIRange:选择对采集到的AD原码值做何种变换,应该与AD采集量程(一般需跳线)相匹配:
// AIRange = 2,表示把原码值转化为 0 -- 10000mV 之间的值,如果此卡没有这种量程,不应选这种方式
// AIRange = 6,表示把原码值转化为 -10000 -- 10000mV 之间的值,如果此卡没有这种量程,不应选这种方式
// pAmpInxArr:程控增益索引数组的首地址。是包含至少 8 个 unsigned long 型元素的数组的首地址,
// 这个数组中的前8个值依次对应前8个AD通道的程控增益索引,
// 例如:pAmpInxArr[0] = 0;表示把第1通道设置为 1 倍增益(无增益)
// pAmpInxArr[0] = 1;表示把第1通道设置为 2 倍增益
// pAmpInxArr[0] = 2;表示把第1通道设置为 4 倍增益
// pAmpInxArr[0] = 3;表示把第1通道设置为 8 倍增益
// 提示:若用户想用 1, 10, 100, 1000 的增益倍数,需要定制
// ADstartMode:AD启动方式,有下面几种
// 0 软件启动AD
// 1 定时启动AD方式
// 2 外同步时钟启动AD方式
// 3 TTL信号触发启动定时AD转换,EI脚高电平允许采集,低电平禁止采集
// 4 TTL信号触发启动定时AD转换,EI脚上升沿启动采集,不能由此信号停止采集
// 5 定时启动AD的同时,自动切换PS端子板的控制信号
// 注意:ADstartMode = 1 时,不自动切换PS端子板的控制信号
// ADfreq:当 ADstartMode1 = 1、3、4、5 时,指定采样频率,其他AD方式时,一般保持此参数为0
// 板上有4M的时钟,实际是对这个时钟设置分频系数1~255,分频后的时钟用于定时启动AD
// 公式:采样频率= 2400000Hz/(分频系数+1)
// 例如:当分频系数=23时, 采样频率为 100KHz
// 当分频系数=255时,采样频率为 9375Hz
// 注意:当 PSMode = 0 (单板单通道)时,采样频率最高可达100KHz
// 注意:当 PSMode = 1 (多板单通道)时,采样频率必须<=50KHz
// 注意:当 PSMode = 2 (单板多通道)时,采样频率最好<=20KHz
// 注意:当 PSMode = 3 (多板多通道)时,采样频率最好<=20KHz
// 提示:如果需要更低的采样频率,请用“外同步时钟启动AD方式”,
// 外同步时钟可通过板上8254分频获得
// ADctrlWord:一般保持此参数为0。
// 若此参数不为0,函数将直接用这个参数的值设置AD控制寄存器(基地址+32)的值,
// 而对其他影响AD控制寄存器的参数(例如ADstartMode)的值不予考虑。
// ADoverTime:保留。请保持这个参数为0
//返回值: 0 表成功
// -1 表失败,应该进一步调用 ZT8361_GetLastErr 判断出错原因
ZT_API long _stdcall ZT8361_LoadADZeroFull(unsigned long cardNO,
unsigned long AIrange,
unsigned long readFrom,
unsigned long bForceReLoad);
//函数名称:ZT8361_LoadADZeroFull
//函数功能:根据用户指定的AD量程,从板卡EEPROM中读出零点和满度值。
// 注意:1. 调用 ZT8361_AIinit 函数时,会自动调用这个函数。所以用户一般不必直接调用这个函数。
// 2. AD量程必须与板上跳线相一致
// 在板卡AD采集前,必须确保调用过此函数装入相应量程的零点和满度值
// 因为每块卡的零点和满度值一般是不同的。
// 3. 如果没有十分的把握,不要随意改变板卡EEPROM中的零点和满度值
//入口参数:
// cardNO:板卡号默认从 1 开始,有关这个参数的详细说明,请参考 ZT8361_OpenDevice 函数
// AIRange:选择对采集到的AD原码值做何种变换,应该与AD采集量程(一般需跳线)相匹配:
// AIRange = 2,表示把原码值转化为 0 -- 10000mV 之间的值,如果此卡没有这种量程,不应选这种方式
// AIRange = 6,表示把原码值转化为 -10000 -- 10000mV 之间的值,如果此卡没有这种量程,不应选这种方式
// readFrom:从何处读出零点和满度值。目前只能设为 2
// 0 = 无效
// 1 = 无效
// 2 = 从板卡中读出当前值;
// 3 = 无效;
// bForceReload:是否强制重新从EEPROM中读出零点和满度值。重读是一个相对耗时的过程,所以一般设为0
// 0 = 不重读;1 = 强制重读
//
//返回值: 0 表成功
// -1 表失败,应该进一步调用 ZT8361_GetLastErr 判断出错原因
ZT_API long _stdcall ZT8361_SetAIresultTrans(unsigned long cardNO,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -