⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pm5320.h

📁 pm518采集卡驱动源码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef PM518_H
#define PM518_H

#ifdef PM5002K_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_PARAMETER_BASEADDR 10 //板卡基地址超出范围,应该在0x100至0x3F0之间未被系统占用的地址
#define ERR_PARAMETER_CH 11 //通道号参数错误,通道号超出范围,调用GetCountFrom检查当前通道号从0开始还是从1开始
#define ERR_PARAMETER_CHIP 12 //芯片号参数错误,芯片号超出范围,调用GetCountFrom检查当前芯片号从0开始还是从1开始
#define ERR_PARAMETER_PORT 13 //口号参数错误,口号超出范围,调用GetCountFrom检查当前口号从0开始还是从1开始
#define ERR_PARAMETER_AI_RANGE 14 //AD量程参数错,此卡不支持这种AD输入量程
#define ERR_PARAMETER_AO_RANGE 15 //DA量程参数错,此卡不支持这种DA输出量程
#define ERR_AD_OVERTIME 20 //AD超时,出错原因可能是:未插卡或IO地址与板卡上设置不匹配
#define ERR_WINDRV 21  //WINDRV运行不正常,可能未安装WINDRV
#define ERR_TIMING 22 //定时未到或外触发脉冲未到,或6508闸门未关闭
#define ERR_IOADDR_DA_OVERTIME 23 //带光隔DA写过程超时
#define ERR_OPEN_IRQ 24 //打开中断出错
#endif

extern "C"
{
  ///////////////////////////////////化物所518中断采集用参数//////////////////////////////////
  //中断标志
  int m_intflag=0;					//纪录采集过程中的中断次数
  int intflag_sec;					//判断是否有新中断来到
  int m_inttime;					//传递期望中断次数,用采样点个数计算,通过此函数传递给中断回调函数
  int m_tendS;		
  int m_tendMS;		
  //全局变量消息句柄
  HWND g_hWndMessage;
  //中断fifo
  unsigned short m_sdata[8192];		//软件缓冲区数组,在本版驱动中已废弃
  unsigned short *m_sfifo=NULL;		//中断保存数据的内存缓冲区首地址指针
  unsigned short *m_eff=NULL;		//一次循环采集剩余数据的内存缓冲区首地址指针
  ////////////////////////////////////////////////////////////////////////////////////////////

  //打开设备,必须在调用其他函数之前调用。放在程序初始化时调用比较恰当,只调用一次
  ZT_API long _stdcall OpenDevicePM();//返回 0 表示打开设备成功,非0 表示失败
  ZT_API long _stdcall CloseDevicePM();//关闭设备,在用户程序结束时调用一次
  ZT_API unsigned long _stdcall GetDll_LastErrNO();//得到错误号
  ZT_API void _stdcall ClearDll_LastErrNO();//清除错误号,一旦产生错误,为了使其他函数重新正常运行,必须清除错误号
  ZT_API void _stdcall SetCountFrom(unsigned long nCountFrom);//设置芯片号或通道号从0开始还是从1开始
  ZT_API unsigned long _stdcall GetCountFrom();//返回当前芯片号或通道号从0开始还是从1开始
  ZT_API unsigned char _stdcall ReadB(unsigned long nAddr, unsigned long nOffset);//8位读端口
  ZT_API unsigned short _stdcall ReadW(unsigned long nAddr, unsigned long nOffset);//16位读端口
  ZT_API void _stdcall WriteB(unsigned long nAddr, unsigned long nOffset, unsigned long dataByte);//8位写端口
  ZT_API void _stdcall WriteW(unsigned long nAddr, unsigned long nOffset, unsigned long dataWord);//16位写端口

/////////////////////新版函数/////////////////////////////////////////
 ZT_API long _stdcall ZT_PM518_inc(unsigned long nAddr,int chA[8],int chB[8]);
//函数功能:设置AD通道增益
//入口参数:
//			nAddr	:板卡基地址
//			chA[0]~chA[7]:1~8通道增益系数
//			chB[0]~chB[7]:9~16通道增益系数
//			增益系数设定值为0对应*1,
//						  为1对应*2,
//						  为2对应*4
//						  为3对应*8
//返回值:0表成功,-1表失败,函数调用失败时应进一步调用 GetDll_LastErrNO 判断出错原因
  ///////////////////PM518 AD采集相关函数////////////////////////////////////
  ZT_API long _stdcall ZT_PM518SetADfreq(unsigned long nAddr, unsigned long ADfreq);
//函数功能:设置AD采样频率
//入口参数:
//         nAddr  :板卡基地址
//         ADfreq :指定AD采样频率:100K/(ADfreq+1),ADfreq在0--255之间(0对应100K,1对应50K...)
//返回值:0表成功,-1表失败,函数调用失败时应进一步调用 GetDll_LastErrNO 判断出错原因

  ZT_API long _stdcall ZT_PM518_AISingle(unsigned long nAddr,unsigned long nCh,unsigned long AIRange,unsigned long AIInc,unsigned long nCount,unsigned long ADOverTime);
//函数功能:软件启动AD,禁止FIFO,采一批数,求平均值,只能用于单通道方式
//入口函数:
//         nAddr  :板卡基地址
//         nCh:    指定通道号
//         AIRange:选择对采集到的AD原码值做何种变换,应该与AD采集量程(一般需跳线)相匹配:
//                  AIRange = 0,表示返回原码(0-65535),所有卡都有这种方式
//                  AIRange = 1,表示把原码值转化为 0 -- 5000mV 之间的值,如果此卡没有这种量程,不应选这种方式
//                  AIRange = 2,表示把原码值转化为 0 -- 10000mV 之间的值,如果此卡没有这种量程,不应选这种方式
//                  AIRange = 5,表示把原码值转化为 -5000 -- 5000mV 之间的值,如果此卡没有这种量程,不应选这种方式
//         AIInc:	17~32通道的增益系数,0,1,2,3分别对应*1,*2,*4,*8
//         nCount: 需要采集的次数,必须>0,并且不应超出缓冲区的长度
//         ADOverTime:设置超时时间,防止地址不对时死机,是一个毫秒数
//                     若 ADOverTime = 0 表不检查AD超时
//返回值:返回 nCount 次采样的平均值
//        若返回 -1 应该进一步调用 GetDll_LastErrNO 判断是否出错

  ZT_API long _stdcall ZT_PM518_DWQ(unsigned long nAddr,unsigned long fValue,unsigned long zValue);
//函数功能:设置电位器值
//入口函数:
//         nAddr :板卡基地址
//         fValue:满度电位器位置设定  (0-4095)
//         zValue:零点电位器位置设定  (0-4095)
//返回值:返回 nCount 次采样的平均值
//        若返回 -1 应该进一步调用 GetDll_LastErrNO 判断是否出错

  ZT_API long _stdcall ZT_PM518ClearFIFO(unsigned long nAddr);
//函数功能:清空FIFO,同时使能外部FIFO,但如果内部FIFO有效,内部FIFO优先,而外部FIFO仍然无效
//入口函数:
//         nAddr  :板卡基地址
//返回值:0表成功,-1表失败,函数调用失败时应进一步调用 GetDll_LastErrNO 判断出错原因

  ZT_API long _stdcall ZT_PM518GetFIFOstatus(unsigned long nAddr);
//函数功能:查询FIFO状态
//入口函数:
//         nAddr  :板卡基地址
//返回值:返回大于 0 的数表成功:
//        0 表FIFO空,
//        1 表FIFO非空但不到半满
//        2 表FIFO半满
//        3 表FIFO全满  
//        4 表未知状态  
//返回 -1表失败,函数调用失败时应进一步调用 GetDll_LastErrNO 判断出错原因

  ZT_API long _stdcall ZT_PM518AIfifo(unsigned long nAddr,unsigned long nCh,unsigned long AIRange,long *pResultArr,unsigned long nCount,unsigned long ADOverTime);
//函数功能:软件启动AD,使能外部FIFO,采一批数,求平均值,只能用于单通道方式
//入口函数:
//         nAddr  :板卡基地址
//         nCh:    指定通道号(1-16)
//         AIRange:选择对采集到的AD原码值做何种变换,应该与AD采集量程(一般需跳线)相匹配:
//                  AIRange = 0,表示返回原码(0-65535),所有卡都有这种方式
//                  AIRange = 1,表示把原码值转化为 0 -- 5000mV 之间的值,如果此卡没有这种量程,不应选这种方式
//                  AIRange = 2,表示把原码值转化为 0 -- 10000mV 之间的值,如果此卡没有这种量程,不应选这种方式
//                  AIRange = 5,表示把原码值转化为 -5000 -- 5000mV 之间的值,如果此卡没有这种量程,不应选这种方式
//         pResultArr:是一个含有至少 nCount 个long型元素的缓冲区的首地址
//         nCount: 需要采集的次数,必须>0,并且不应超出缓冲区的长度
//         ADOverTime:设置超时时间,防止地址不对时死机,是一个毫秒数
//                     若 ADOverTime = 0 表不检查AD超时
//返回值:返回 nCount 次采样的平均值
//        若返回 -1 应该进一步调用 GetDll_LastErrNO 判断是否出错


ZT_API long _stdcall ZT_PM518TimerAIFIFO(unsigned long nAddr,\
								unsigned long nChMode,\
								unsigned long nCh,\
								unsigned long Fre,\
								unsigned long AIRange,\
								long *pResultArr,\
								unsigned long nCount,\
								unsigned long ADOverTime);
//函数功能:定时启动AD,使用内部FIFO,采一批数,求平均值
//          调用本函数之前,应该先确保已调用 ZT5320SetADfreq 设定了AD采样频率
//入口函数:
//         nAddr  :板卡基地址
//         nChMode:通道方式
//                  1 = 单通道
//                  0 = 多通道扫描方式
//         nCh:    当nChMode =1(单通道方式) 时,为通道号(1--16),通道号默认从1算起
//                  当nChMode =0(多通道扫描方式)时,多通道扫描中止通道号(1-16),通道号默认从1算起,例如设为2表示,通道1和通道2被自动扫描
//         AIRange:选择对采集到的AD原码值做何种变换,应该与AD采集量程(一般需跳线)相匹配:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -