/************************************************* /* Copyright (C), 2010-2011,StoneU. Co., Ltd. /* File name: CMS.h /* Author: Zero.t /* Version: Ver1.0.0.1 /* Date: 2011-11-18 /* Description: 先控CMS系列 UPS,型号未知; /* Others: RS485,9600/8/1,无校验; /* Function List: ### /* History: m_sz_02Msg,m_sz_06Msg, m_sz_03Msg与m_sz_04Msg不做,因数据量太大; *************************************************/ #ifndef CMSUPS_HEAD_H #define CMSUPS_HEAD_H #pragma once #pragma warning(disable:4039) #include "CommInterface.h" class CCMS:public CCommInterface { public: CCMS( char szPath[MAX_PATH], // 程序所在路径; char szIniName[MAX_PATH], // 配置文件名称; int nCommPort, // 串行端口; int nAddr, // 设备地址; int nRate, // 波特率; int nDataBit, // 数据位; int nStopBit, // 停止位; int nParity, // 校验位; int nInterval // 时间间隔; ); ~CCMS(); public: #define DEBUG_CMS 1 // UPS 设备Dll错误代码定义 enum __ERRO_CODE_DATAMATE3000 { ERR_CODE_CMS_COM_FAULT = 50201 , // 设备串口通信故障; ERR_CODE_CMS_COM_BUSY , // 设备串口通信忙; ERR_CODE_CMS_COM_READ_NO_DATA , // 设备没有读到数据; ERR_CODE_CMS_COM_READ_LEN_OVER , // 设备读到数据长度超时限制; ERR_CODE_CMS_COM_CHKSUM_LOST , // 设备校验失败; EER_CODE_CMS_COM_WRITE_DATA , // 设备写串口错误; EER_CODE_CMS_COM_REGNUM , // 设备寄存器数; ERR_CODE_CMS_COM_VARLEN , // 设备变量长度非法; ERR_CODE_CMS_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 CMSOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval); private: //读取配置文件; int GetCMSIniInfo( char szPath[MAX_PATH], //服务器程序所在目录 char szIniName[MAX_PATH], //配置文件名 char szCmd[MAX_CMD], //命令 char IniSendCMD[MAX_CMD], char szType[TYPE_LENGTH], int &nIndex, int &nLen, int &nStaBit, int &nEndBit ); int RequestReadStatus( int Addr, char szCmd[MAX_CMD], // 命令 CCommProcess *pComm, // 串口对象指针 char IniSendCMD[MAX_CMD] // 发送Buffer ); int ResponseReadStatus( int nAddr, // 设备地址 CCommProcess *pComm, // 串口对象指针 char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH] // 变量数据类型 ); int GetDeviceParam( int nAddr, // 设备地址 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 SetDeviceParam( int nAddr, // 设备地址 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 GetCMS_01VarMsg( int nAddr, // 设备地址 char szCmd[MAX_CMD], // 命令 char szMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH], // 变量数据类型 int startBit, int endBit ); void SetCMS_01VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer); void SimulationCommData(int nAddr); void DataProcess(char *szType, char *szMsg, char *szConvMsg, int len, int StaBit, int EndBit); void BitDataProcess(const BYTE bySour, char *szRecv, int &StaBit, int &EndBit); int GetheadCheck(char *buf); int GetCMSbyCMD(unsigned char CDM,BOOL b = TRUE); int GetEndCheck(char *buf,int len); private: HANDLE m_hSemComm; #if IS_USE_READMSG_CS CRITICAL_SECTION m_csReadMsg; #endif char m_sz_01Msg[MAX_ADDR][MAX_RECE_MSG]; // 查询系统数据1; //char m_sz_02Msg[MAX_ADDR][MAX_RECE_MSG]; // 查询单个模块数据;<数据量大,不做> //char m_sz_03Msg[MAX_ADDR][MAX_RECE_MSG]; // 查询告警数据;<数据量大,不做> //char m_sz_04Msg[MAX_ADDR][MAX_RECE_MSG]; // 查询电池管理参数;<数据量大,不做> //char m_sz_06Msg[MAX_ADDR][MAX_RECE_MSG]; // 查询系统数据2;<无效,不做> BOOL m_dwOnlineTick[MAX_ADDR]; BOOL m_devOnline[MAX_ADDR]; /*发送请求设备命令*/ typedef struct __REQUESTCMD { BYTE Start[4]; BYTE nAddr; BYTE CMS; // Get by ini; //BYTE CMD; // Get by ini; BYTE Check; BYTE End; }RequstCMD,*pRequstCMD; /*接收请求设备数据*/ // 基本没用途; typedef struct __RESPONSEDATA { BYTE Start[4]; BYTE nAddr; BYTE CMDS; BYTE Recv[253]; BYTE Check; BYTE End; }ResponseDATA,*pResponseDATA; }; #endif