| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- //////////////////////////////////////////////////////////////////////////////
- ////// //////
- ////// 作 者: Wangjianfeng; //////
- ////// 创建时间: 2011-02-26 ; //////
- ////// 说 明: EmersonUPS NXL协议 ; //////
- ////// //////
- ////// 修改时间: 2011-02-26 ; //////
- ////// 修改说明: 无; //////
- ////// //////
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- #ifndef __UPS_NXL__
- #define __UPS_NXL__
- #pragma once
- #include "CommProcess.h"
- #include "CommInterface.h"
- class CUPS_NXL :public CCommInterface
- {
- #define DEBUG_UPSNXL 0 //.1.调试开关;
- #define MAX_CID 2 //.+.最大的CID2长度;
- #define VAR_MSG_LENGTH 255 //.2.数组数据长度;
- #define SEND_MSG_LENGTH 32 //.3.发送数据的最大长度;
- #define RECE_MSG_LENGTH 255 //.4.接收数据的最大长度;
- //.RTN返回码意义;
- enum ___EEROR_CODE_RTN
- {
- RTN_NORMAL = 0x00, //.1.正常;
- RTN_VER_ERRROR, //.2.VER(版本)错误;
- RTN_CHKSUM_ERROR, //.3.校验码错误;
- RTN_LCHKSUM_EEROR, //.4.长度校验码错误;
- RTN_CID2_INVALID, //.5.CDI2无效;
- RTN_COMMAND_FORMAT_EEROR, //.6.命令格式错误;
- RTN_INVALID_DATA, //.7.无效数据;
- RTN_INVALID_LIMIT =0x10 //.8.无效权限;
- };
- enum __ERRO_CODE_COMM
- {
- ERR_CODE_COM_FAULT = 50201 , //.1.设备串口通信故障;
- ERR_CODE_COM_BUSY , //.2.设备串口通信忙;
- ERR_CODE_COM_READ_NO_DATA , //.3.设备没有读到数据;
- ERR_CODE_COM_READ_LEN_OVER , //.4.设备读到数据长度超时限制;
- ERR_CODE_COM_LRC_LOST , //.5.设备lrc校验失败;
- EER_CODE_COM_WRITE_DATA , //.6.设备写串口错误;
- EER_CODE_COM_REGNUM , //.7.设备寄存器数;
- ERR_CODE_COM_VARLEN , //.8.设备变量长度非法;
- ERR_CODE_COM_INVALIDRES , //.9.设备无效应答;
- };
- typedef struct __HEAD_SOI_
- {
- BYTE Soi ;
- BYTE Ver[2];
- BYTE Adr[2];
- BYTE Cid1[2];
- }__soi;
- typedef struct __END_EOI
- {
- BYTE ChkSum[4];
- BYTE Eoi;
- }__eoi;
- //.请求设备;
- typedef struct __REQUSE_READ_
- {
- __soi heads;
- BYTE Cid2[2];
- BYTE Length[4];
- __eoi endof;
- }__request_read;
- //.设备响应;
- typedef struct __RESPONES_READ_
- {
- __soi heads;
- BYTE Rtn[2];
- BYTE Length[4];
- BYTE Info[RECE_MSG_LENGTH];
- __eoi endof;
- }__respones_read;
- public:
- CUPS_NXL(
- char szPath[MAX_PATH], //.1. 程序所在路径;
- char szIniName[MAX_PATH], //.2. 配置文件名称;
- int iCommPort, //.3. 串行端口;
- int iAddr, //.4. 设备地址;
- int iRate, //.5. 波特率;
- int iDataBit, //.6. 数据位;
- int iStopBit, //.7. 停止位;
- int iParity, //.8. 校验位;
- int iInterval //.9. 时间间隔;
- );
- virtual ~CUPS_NXL()
- {
- #if IS_USE_READMSG_CS
- DeleteCriticalSection(&m_csReadMsg);
- #endif
- MTVERIFY(CloseHandle(m_hSemComm));
- CloseComm();
- };
- private:
- HANDLE m_hSemComm; //.串口读写事件对象;
- #if IS_USE_READMSG_CS
- CRITICAL_SECTION m_csReadMsg; //.临界值;
- #endif
- BOOL m_dwOnlineTick[MAX_ADDR]; //.1.在线标号;
- BOOL m_devOnline[MAX_ADDR]; //.2.设备是否在线;
- protected:
- char m_szNXL_42HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.1.获取模拟量量化数据(定点数);
- char m_szNXL_43HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.2.获取开关量输入状态 ;
- char m_szNXL_44HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.3.获取告警量输入状态 ;
- char m_szNXL_E0HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.4.获取系统模拟量量化数据(定点数,厂家自定义模拟量 1);
- char m_szNXL_E1HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.5.获取自定义模拟量量化数据1(定点数);
- char m_szNXL_E2HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.6.获取自定义模拟量量化数据2(定点数);
- char m_szNXL_E3HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.7.获取自定义模拟量量化数据3(定点数);
- char m_szNXL_ECHMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.8.获取自定义告警量 ;
- char m_szNXL_EEHMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.9.获取系统设置参数数据(厂家自定义帧) ;
- public:
- //.发送请求设备数据;
- int SendReadRequest(
- char szPath[MAX_PATH], // 1.程序所在路径;
- char szIniName[MAX_PATH], // 2.配置文件名称 ;
- int nCommPort, // 3.串行端口;
- int nAddr, // 4.设备地址;
- char szCmd[MAX_CMD], // 5.请求命令;
- char szMsg[VAR_MSG], // 6.响应的值 ;
- int nReversed1, // 7.预留整形参数1接口;
- int nReversed2, // 8.预留整形参数2接口;
- int nReversed3, // 9.预留整形参数3接口;
- int nReversed4, // 10.预留整形参数4接口;
- int nReversed5, // 11.预留整形参数5接口;
- float fReversed1, // 12.预留float参数1接口;
- float fReversed2, // 13.预留float参数2接口;
- float fReversed3, // 14.预留float参数3接口;
- char szReversed1[MAX_RESERVED1], // 15.预留字符数组参数1接口;
- char szReversed2[MAX_RESERVED2], // 16.预留字符数组参数2接口;
- char szReversed3[MAX_RESERVED3], // 17.预留字符数组参数3接口;
- char szReversed4[MAX_RESERVED4], // 18.预留字符数组参数4接口;
- char szReversed5[MAX_RESERVED5] // 19.预留字符数组参数5接口;
- );
- //.发送设置设备参数请求;
- int SendSetReuest(
- char szPath[MAX_PATH], // 1.程序所在路径;
- char szIniName[MAX_PATH], // 2.配置文件名称 ;
- int nCommPort, // 3.串行端口;
- int nAddr, // 4.设备地址;
- char szCmd[MAX_CMD], // 5.请求命令;
- char szRecvMsg[VAR_MSG], // 6.响应的值;
- int nReversed1, // 7.预留整形参数1接口;
- int nReversed2, // 8.预留整形参数2接口;
- int nReversed3, // 9.预留整形参数3接口;
- int nReversed4, // 10.预留整形参数4接口;
- int nReversed5, // 11.预留整形参数5接口;
- float fReversed1, // 12.预留float参数1接口;
- float fReversed2, // 13.预留float参数2接口;
- float fReversed3, // 14.预留float参数3接口;
- char szReversed1[MAX_RESERVED1], // 15.预留字符数组参数1接口;
- char szReversed2[MAX_RESERVED2], // 16.预留字符数组参数2接口;
- char szReversed3[MAX_RESERVED3], // 17.预留字符数组参数3接口;
- char szReversed4[MAX_RESERVED4], // 18.预留字符数组参数4接口;
- char szReversed5[MAX_RESERVED5] // 19.预留字符数组参数5接口;
- );
- //.打开串口;
- BOOL NxlOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
- //.获取ini文件分键信息;
- int GetNXL_ini_info(
- char szPath[MAX_PATH], //.1.服务器程序所在目录;
- char szIniName[MAX_PATH], //.2.配置文件名;
- char szCmd[MAX_CMD], //.3.命令;
- char szCID2[MAX_CID], //.4.CID2;
- char nType[MAX_CMD], //.5.数据类型;
- int &nIndex, //.6.索引;
- int &nLen //.7.截取长度;
- );
- protected:
- int GetEquipmentParamter(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD],char szCID2[MAX_CID]); //.0.获取设备传进的请求信息;
- int Request_ReadStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD],char szCID2[MAX_CID]); //.1.向设备发送请求命令;
- int Response_ReadStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD]); //.2.接收请求设备响应数据;
- protected:
- int SetEquipmentParamter(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD],char szCID2[MAX_CID],char szRecvMsg[RECE_MSG_LENGTH]);//.0.获取设备传进的设置信息;
- int Request_WirteStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD]); //.1.向设备发送设置命令;
- int Respones_WirteStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD]); //.2.接收设置设备的响应数据;
- protected:
- int Get_NXL_42_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_43_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_44_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_E0_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_E1_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_E2_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_E3_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_EC_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- int Get_NXL_EE_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
- protected:
- int Set_NXL_42_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_43_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_44_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_E0_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_E1_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_E2_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_E3_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_EC_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- int Set_NXL_EE_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
- protected:
- int RtnCheck(char szRecvMsg[RECE_MSG_LENGTH]);
- int NxlGetCheckSum(char *SendMsg,BYTE *szRecvCheck,int iMsgLen);
- BOOL Check_RecvMsgCheckSum(char *RecvMsg,int iMsgLen);
- BOOL LengthCheck(char szRecvMsg[RECE_MSG_LENGTH]);
- };
- #endif
|