/************************************************* /* Copyright (C), 2010-2011,StoneU. Co., Ltd. /* File name: PB9355.h /* Author: Li /* Version: Ver1.0.0.1 /* Date: 2011-11-22 /* Description: 爱克塞XCP系列 UPS,PB9355; /* Others: RS232,19200/8/1,无校验; /* Function List: ### /* History: *************************************************/ #ifndef PB9355_HEAD_H #define PB9355_HEAD_H #pragma once #pragma warning(disable:4039) #include "CommInterface.h" #define MAX_RECE_MSG 1024 class CPB9355:public CCommInterface { public: CPB9355( char szPath[MAX_PATH], // 程序所在路径; char szIniName[MAX_PATH], // 配置文件名称; int nCommPort, // 串行端口; int nAddr, // 设备地址; int nRate, // 波特率; int nDataBit, // 数据位; int nStopBit, // 停止位; int nParity, // 校验位; int nInterval // 时间间隔; ); ~CPB9355(); public: #define DEBUG_PB9355 1 // UPS 设备Dll错误代码定义 enum __ERRO_CODE_UPS { ERR_CODE_PB9355_COM_FAULT = 50201 , // 设备串口通信故障; ERR_CODE_PB9355_COM_BUSY , // 设备串口通信忙; ERR_CODE_PB9355_COM_READ_NO_DATA , // 设备没有读到数据; ERR_CODE_PB9355_COM_READ_LEN_OVER , // 设备读到数据长度超时限制; ERR_CODE_PB9355_COM_CHKSUM_LOST , // 设备校验失败; EER_CODE_PB9355_COM_WRITE_DATA , // 设备写串口错误; EER_CODE_PB9355_COM_REGNUM , // 设备寄存器数; ERR_CODE_PB9355_COM_VARLEN , // 设备变量长度非法; ERR_CODE_PB9355_COM_INVALIDRES , // 设备无效应答; }; public: int SendReadRequest( char szPath[MAX_PATH], // 程序所在路径 char szIniName[MAX_PATH], // 配置文件名称 int nCommPort, // 串行端口 int nAddr, // 设备地址 char szCmd[MAX_CMD], // 请求命令 char szMsg[VAR_MSG], // 响应的值 int nReversed1, // 预留整形参数1接口 int nReversed2, // 预留整形参数2接口 int nReversed3, // 预留整形参数3接口 int nReversed4, // 预留整形参数4接口 int nReversed5, // 预留整形参数5接口 float fReversed1, // 预留float参数1接口 float fReversed2, // 预留float参数2接口 float fReversed3, // 预留float参数3接口 char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口 char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口 char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口 char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口 char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口 ); BOOL PB9355OpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval); private: //读取配置文件; int GetPB9355IniInfo( char szPath[MAX_PATH], //服务器程序所在目录 char szIniName[MAX_PATH], //配置文件名 char szCmd[MAX_CMD], //命令 BYTE &IniSendCMD, char szType[TYPE_LENGTH], int &nIndex, int &nLen, int &nStaBit, int &nEndBit); int RequestReadStatus( char szCmd[MAX_CMD], // 命令 CCommProcess *pComm, // 串口对象指针 BYTE &IniSendCMD); // 发送Buffer int ResponseReadStatus( CCommProcess *pComm, // 串口对象指针 char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH]); // 变量数据类型 int GetDeviceParam( CCommProcess *pComm, // 串口对象指针 BYTE &IniSendCMD, // 发送Buffer char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH]); // 变量数据类型 int SetDeviceParam( CCommProcess *pComm, // 串口对象指针 char IniSendCMD[MAX_CMD], // 发送Buffer char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH] ); // 变量数据类型 int Get33VarMsg( char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH], // 变量数据类型 int startBit, int endBit ); int Get34VarMsg( char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH], // 变量数据类型 int startBit, int endBit ); int Get35VarMsg( char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH], // 变量数据类型 int startBit, int endBit ); void Set33VarMsg( char szCmd[MAX_CMD], char *pBuffer); void Set34VarMsg( char szCmd[MAX_CMD], char *pBuffer); void Set35VarMsg( char szCmd[MAX_CMD], char *pBuffer); void SimulationCommData(); private: int Authorization(CCommProcess *pComm); // 授权; int OnlyRequested(CCommProcess *pComm); // 只读模式; int ReadSetingData(CCommProcess *pComm); void GetDataSection(/*char *pBuf*/); // 截取数据段; void ByteTo16HEXAscii(BYTE &bySour, char *pDsc); //char* ByteTo16HEXAscii(BYTE &bySour); void PCRTo16HEXPCRT(char *szSour, char *pDsc,int len = 0); // 将一个字节转化为16进制的字符二字节表示; void DataProcess(const char *szType, char *szMsg, char *szConvMsg, int len, int StaBit, int EndBit); void BitDataProcess(const BYTE &bySour, char *szRecv, int &StaBit, int &EndBit); int GetEndCheck(char *buf,int len); private: HANDLE m_hSemComm; #if IS_USE_READMSG_CS CRITICAL_SECTION m_csReadMsg; #endif char m_sz_33Msg[MAX_RECE_MSG]; char m_sz_34Msg[MAX_RECE_MSG]; char m_sz_35Msg[MAX_RECE_MSG]; char m_szTemp[1024]; char szProcessData[9]; BOOL m_dwOnlineTick; BOOL m_devOnline; BOOL m_bRun; }; #endif