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

📄 pm5002k.h

📁 pm518采集卡驱动源码
💻 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 + -