| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- #ifndef __HBATTERYADU200__
- #define __HBATTERYADU200__
- /*************************************************
- /* Copyright (C), 2010-2012,StoneU. Co., Ltd.
- /* File name: BatteryAdu2000.h
- /* Author: Zero.t
- /* Version: Ver1.0.0.1
- /* Date: 2011-1-17
- /* Description: ADU2000协议;
- /* Others: ###;
- /* Function List: ###
- /* History:
- 1.Date: 2012-10-22
- Author: Zero.t
- Modification: 优化函数;
- /* 测试通过,OK;
- *************************************************/
- #pragma once
- #include "comminterface.h"
- class CBatteryAdu2000 :
- public CCommInterface
- {
- public:
- #define ADU_SEND_MSG 32
- #define ADU_TYPE_LENGTH 10
- #define DEBUG_ADU 1
- #define ADU_MAX_BUF 500
- enum __ERRO_CODE_BATTERYADU2000
- {
- ERR_CODE_ADU_COM_FAULT = 50201 , //Battery电池检测设备串口通信故障
- ERR_CODE_ADU_COM_BUSY , //Battery电池检测设备串口通信忙
- ERR_CODE_ADU_COM_READ_NO_DATA , //Battery电池检测设备没有读到数据
- ERR_CODE_ADU_COM_READ_LEN_OVER , //Battery电池检测设备读到数据长度超时限制
- ERR_CODE_ADU_COM_LRC_LOST , //Battery电池检测设备lrc校验失败
- EER_CODE_ADU_COM_WRITE_DATA , //Battery电池检测设备写串口错误
- EER_CODE_ADU_COM_REGNUM , //Battery电池检测设备寄存器数
- ERR_CODE_ADU_COM_VARLEN , //Battery电池检测设备变量长度非法
- ERR_CODE_ADU_COM_INVALIDRES , //Battery电池检测设备无效应答
- };
- enum _ERRO_CODE_RTN
- {
- ERR_CODE_RTN_NATURAL = 00, // 正常
- ERR_CODE_RTN_VER_ERROR, // VER错误
- ERR_CODE_RTN_CHKSUM_ERROR, // CHECKSUM错
- ERR_CODE_RTN_LCHKSUM_ERROR, // LCHECKSUM
- ERR_CODE_RTN_CID_ERROR, // CID2无效
- ERR_CODE_RTN_COMMAND_FORMAT, // 命令格式错
- ERR_CODE_RTN_INVALID_DATA, // 无效数据
- ERR_CODE_RTN_OTHER_ERROR // 其他
- };
- /*共享头信息*/
- typedef struct __HEADMES
- {
- BYTE Start; //头SOI;
- BYTE Version[2]; //版本号;
- BYTE Address[2]; //地址;
- BYTE Cid1[2]; //
- BYTE Cid2[2]; //
- BYTE Lenth[4]; //长度;
- }HEADMES, *pHEADMES;
- //写串口数据缓存结构
- typedef struct __REQUEST_STRUCT
- {
- HEADMES headMes; //头信息;
- BYTE GroupInfo[2] ; //命令检索信息;
- BYTE chkSum[4]; //校验;
- BYTE End; //尾EOI
- }REQUEST_STRUCT,*PREQUEST_STRUCT;
- //写串口数据缓存结构
- typedef struct __WREQUEST_STRUCT
- {
- HEADMES headMes; //头信息;
- BYTE GroupInfo[6] ; //命令检索信息;
- BYTE chkSum[4]; //校验;
- BYTE End; //尾EOI
- }WREQUEST_STRUCT,*WPREQUEST_STRUCT;
- //读串口数据缓存结构
- typedef struct __RESPONSE_STRUCT
- {
- HEADMES headMES;
- BYTE rtnMsg[500];
- BYTE chkSum[4];
- BYTE End;
- }RESPONSE_STRUCT,*PRESPONSE_STRUCT;
- //协议数据包;
- typedef struct _REQUESTSET_STRUCT
- {
- BYTE Sol; //起始标志位(7EH)
- BYTE Ver[2]; //通讯协议版本号
- BYTE Adr[2]; //设备地址描述(1--254;0,255保留)
- BYTE Cid1[2]; //控制标示符(2AH)
- BYTE Cid2[2]; //信息类型
- BYTE Length[4]; //内容长度
- char szInfo[500]; //协议内容
- BYTE Chksum[4]; //校验和码
- BYTE Eol; //结束码 0x0d(回车)
- }REQUESTSET_STRCUT, *PREQUESTSET_STRCUT;
- public:
- CBatteryAdu2000(char *szPath,char *szIniName,int nCommPort,int nAddr,int nRate,int nDataBit,int nStopBit,int nParity,int nInterval );
- virtual ~CBatteryAdu2000(void);
- BOOL AduOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
- // 发送读请求;
- int SendReadRequest(
- char *szPath, // 程序所在路径
- char *szIniName, // 配置文件名称
- int nCommPort, // 串行端口
- int nAddr, // 设备地址
- char *szCmd, // 请求命令
- char *szMsg, // 响应的值
- 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, // 预留字符数组参数1接口
- char *szReversed2, // 预留字符数组参数2接口
- char *szReversed3, // 预留字符数组参数3接口
- char *szReversed4, // 预留字符数组参数4接口
- char *szReversed5 // 预留字符数组参数5接口
- );
- // 发送写设置;
- int SendSetReuest(
- char *szPath, // 程序所在路径
- char *szIniName, // 配置文件名称
- int nCommPort, // 串行端口
- int nAddr, // 设备地址
- char *szCmd, // 请求命令
- char *szMsg, // 响应的值
- 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, // 预留字符数组参数1接口
- char *szReversed2, // 预留字符数组参数2接口
- char *szReversed3, // 预留字符数组参数3接口
- char *szReversed4, // 预留字符数组参数4接口
- char *szReversed5 // 预留字符数组参数5接口
- );
- private:
- HANDLE m_hSemComm;
- #if IS_USE_READMSG_CS
- CRITICAL_SECTION m_csReadMsg;
- #endif
- protected:
- int GetIniInfo( char *szPath,char *szIniName,char *szCmd,char *IniSendCMD,int &IniSendlen,char *szDataType,int &nIndex,int &nLen, int &iSBit, int &iEBit);
- int GetDeviceParam( int nAddr,CCommProcess *pComm,char *szCmd,char *IniSendCMD,const int &IniSendlen);
- int Send_ReadDeviceData(int nAddr,CCommProcess *pComm,char *szCmd, const char *IniSendCMD,const int &IniSendlen);
- int Recv_ReadDeviceData(int nAddr,CCommProcess *pComm,char *szCmd);
- //*********************************************************************************************************************
- int SetDeviceParam( int nAddr,CCommProcess *pComm,char *szCmd,char *szSetMsg,char *szRecvMsg,char *IniSendCMD, const int &IniSendlen) ; //,const int &nIndex, const int &nlen, char *szDataType);
- int Send_WriteDeviceData(int naddr, CCommProcess *pComm, char *szCmd, char *szSetMsg, char *IniSendCMD, const int &IniSendlen );
- int Recv_WriteDeviceData(int nAddr, CCommProcess *pComm, char *szCmd, char *szRecvMsg );
- //*********************************************************************************************************************
- int GetAdu_CommandFFVarMsg(int nAddr,char *szCmd, char *szRecvMsg, int &nIndex,int &nLen, int &iSBit, int &iEBit, char *szDataType);
- int GetAdu_Command81VarMsg(int nAddr,char *szCmd, char *szRecvMsg, int &nIndex,int &nLen, int &iSBit, int &iEBit, char *szDataType);
- int GetAdu_CommandResetVarMsg(int nAddr,char *szCmd, char *szRecvMsg, int &nIndex,int &nLen, int &SBit, int &EBit, char *szDataType);
- void SetAduCommandFFVarMsg( int nAddr,char *szCmd, char *pBuffer);
- void SetAduCommand81VarMsg( int nAddr,char *szCmd, char *pBuffer);
- void SetAduCommandResetVarMsg( int nAddr,char *szCmd, char *pBuffer);
- WORD RtnCheck(char Msg[VAR_MSG]);
- void SimulationCommData(int nAddr);
- BYTE GetLengthSum(BYTE szChar[]);
- int LengthCheck(char szSendMsg[],int nReadLen);
- BOOL ValiateLength(char szChar[]);
- UINT GetCheckSum(char *pBuf, char chDest[5], int len);
- private:
- char m_Adu_FFMsg[MAX_ADDR][ADU_MAX_BUF];
- char m_Adu_81Msg[MAX_ADDR][ADU_MAX_BUF];
- BOOL m_dwOnlineTick[MAX_ADDR];
- BOOL m_devOnline[MAX_ADDR];
- };
- #endif
|