📄 pm5320.h
字号:
#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 + -