📄 pm5002k.h
字号:
#ifndef PM5002K_H
#define PM5002K_H
#ifdef PM5002K_EXPORTS
#define ZT_API _declspec(dllexport)
#else
#define ZT_API _declspec(dllimport)
#endif
//陈新华 自定义系统消息
//#include <WINUSER.H> //不一定需要
#define WM_SAMPLE_FINISH WM_USER+1050 // 自定义采样完成的消息 WM_SAMPLE_FINISH
//也可直接定义为: #define WM_SAMPLE_FINISH (0x0400 +1050)
//注: WM_USER 在头文件WINUSER.H 中定义的, 定义如下: #define WM_USER 0x0400
//可能先要包含头文件 WINUSER.H
//增加一个一个应用程序接口函数用来设置消息处理窗口句柄 HWND g_hWndMessage
// void SetMessageWindow(HWND hWnd);
#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_PARAMETER_NULL_POINTER 16 //空指针错,用于接收数组首地址的参数不能为空
#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 //打开中断出错
#define ERR_FUNC_CANNT_RUN 25 //此函数不能在这台计算机上运行
#define ERR_ASYNC_FUNC_FAILED 26 //异步函数调用失败
#define ERR_FUNC_OPERATE 27 //在当前的卡的设置状态下,不应该调用此函数
#define MAX_AI_RANGE 0x3f //原码,0-5,0--10,1--5,-2.5--2.5,-5--+5,-10--+10
#define MAX_AO_RANGE 10 //原码,0-5,0--10,1--5,-2.5--2.5,-5--+5,-10--+10,保留,保留,0-10000uA,4000-20000uA
#include "pm5002k_lib.h"
extern unsigned long m_errorLevel;
extern unsigned long m_nCountFrom;
//////////////////////////////////////////中断////////////////////////////////////////////////
//int flag
extern int m_intflag;
extern int intflag_sec;
extern int m_inttime;
extern int m_tendS;
extern int m_tendMS;
//SFIFO
extern unsigned short m_sdata[8192];
extern unsigned short *m_sfifo;
extern unsigned short *m_eff;
//////////////////////////////////////////////////////////////////////////////////////////////
extern PM5002K_HANDLE hPM5002K;
typedef struct _PM518_AO_W //针对PM5320
{
//DA相关寄存器偏移地址
// unsigned char ROff_DAchannel;//0x4(写,写通道代码,选通道)
// unsigned char ROff_DAWord;//0x6(写,写16位D/A数据)
// unsigned short DAWordMask;//可能需要屏蔽掉一些位
//DZS
// unsigned char DZS_ROff_DAchannel;//0x6(写,写通道代码,选通道)
// unsigned char DZS_ROff_DAWord;//0x8(写,写16位D/A数据)
// unsigned short DZS_DAWordMask;//0x0FFF可能需要屏蔽掉一些位
//518
unsigned char PM518_ROff_DAchannel;//0x6(写,写通道代码,选通道)
unsigned char PM518_ROff_DAWord;//0x8(写,写16位D/A数据)
unsigned short PM518_DAWordMask;//0x0FFF可能需要屏蔽掉一些位
}PM518_AO_W;
typedef struct _PM518_AIWFIFO //针对5320,带FIFO字操作的AI卡
{
unsigned char ROff_ADfreqReg; //12(写,写入AD定时启动分频系数0-255)
unsigned char ROff_ADctrlReg; //8(写,写入工作方式控制字)
unsigned char ROff_ADchannel; //0(写,写通道代码,选通道)
unsigned char ROff_ADstart; //0(启动A/D转换)
bool ADWriteStart; //false(默认为写启动,5320为读启动)
unsigned char ROff_ClearFIFO; //2(写,清空FIFO,同时清空AD控制寄存器)
unsigned char ROff_FIFOstatus; //8(读,查询FIFO是否为空)
unsigned short FIFOstatusMask; //0x8000(FIFO状态屏蔽字节)
unsigned short FIFOstatusCanRead;//0x8000(FIFO中有新数据)
unsigned char ROff_ADresultWord;//2(读,读12位或16位A/D转换结果)
unsigned short ADresultMask; //0x0FFF(只保留12位结果)
unsigned long ADJumpChannelTime;//0(默认),AD通道切换时间,替代原ADcha
// bool checkADOverTime; //false(默认),是否检查AD超时,替代原ADcon
//////////////////电子所的///////////////////////////
// unsigned char DZS_ROff_ADctrlReg; //10
// unsigned char DZS_ROff_ADchannel; //0(写,写通道代码,选通道)
// unsigned char DZS_ROff_ADstart; //0(启动A/D转换)
// bool DZS_ADWriteStart; //false(默认为写启动,5320为读启动)
// unsigned char DZS_ROff_ADresultWord;//2(读,读12位或16位A/D转换结果)
// unsigned short DZS_ADresultMask; //0xFFFF(16位结果)
// unsigned long DZS_ADJumpChannelTime;//0(默认),AD通道切换时间,替代原ADcha
///////////////////PM518的AD//////////////////////////
unsigned char PM518_ROff_ADfreqReg; //1
unsigned char PM518_ROff_ADctrlReg; //10
unsigned char PM518_ROff_ClearFIFO; //1(写,清空FIFO,同时清空AD控制寄存器)
unsigned char PM518_ROff_FIFOstatus;
unsigned char PM518_ROff_ADchannel; //0(写,写通道代码,选通道)
unsigned char PM518_ROff_ADstart; //0(启动A/D转换)
bool PM518_ADWriteStart; //false(默认为写启动,5320为读启动)
unsigned char PM518_ROff_ADresultWord;//2(读,读12位或16位A/D转换结果)
unsigned short PM518_ADresultMask; //0xFFFF(16位结果)
unsigned long PM518_ADJumpChannelTime;//0(默认),AD通道切换时间,替代原ADcha
}PM518_AIWFIFO;
//typedef struct _PM5320_DWQ
//{
// unsigned char DZS_DWQctrlReg;//0X4
// unsigned long DZS_DWQfull;//0x0
// unsigned long DZS_DWQzero;//0x1000
// unsigned char DZS_W;//5
// unsigned char DZS_MASK;//0xfff
//}PM5320_DWQ;
typedef struct _PM518_DWQ
{
unsigned char PM518_DWQctrlReg;//0X4
unsigned long PM518_DWQfull;//0x0
unsigned long PM518_DWQzero;//0x1000
unsigned char PM518_W;//4
unsigned char PM518_MASK;//0xfff
}PM518_DWQ;
double changeToAIRange(unsigned long ADInitCode,\
unsigned long MaxADinitCode,\
unsigned long AIRangeIndex);
unsigned short getAOInitCode(long nValue,\
unsigned long MaxDAinitCode,\
unsigned long AORangeIndex);
unsigned long GetULongXBit(unsigned long dataDoubleWord,\
unsigned long nBit);
unsigned long SetULongXBit(unsigned long dataDoubleWord,\
unsigned long nBit,\
unsigned long nState);
unsigned long CheckAddr(unsigned long nAddr);
extern "C"
{
ZT_API long _stdcall OpenDevicePM();
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);
ZT_API unsigned long _stdcall GetCountFrom();
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 unsigned long _stdcall ReadD(unsigned long nAddr, unsigned long nOffset);//32位读
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 void _stdcall WriteD(unsigned long nAddr, unsigned long nOffset, unsigned long dataDoubleWord);//32位写
ZT_API void _stdcall PM5002K_Interrupt5HandlerRoutine(PM5002K_HANDLE hPM5002K,PM5002K_Interrupt5_RESULT *intResult,long *pResultArr,int inttimein);
ZT_API unsigned long _stdcall intenable(unsigned long nAddr);
//ZT_API void PM5002K_ReadHFifo(PM5002K_HANDLE hPM5002K,\
// PM5002K_ADDR addrSpace,\
// DWORD dwOffset,\
// unsigned short *buf,\
// DWORD dwBytes);
//陈新华
//增加一个一个应用程序接口函数用来设置消息处理窗口句柄 HWND g_hWndMessage
ZT_API void SetMessageWindow(HWND hWnd);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -