#pragma once #include "CommInterface.h" #include "CommProcess.h" class CTmaster:public CCommInterface { #define MAX_CMD 10 // 命令的最长长度; #define CMD_RECVMSG 20 // CMD对应的数据内容的最大显示长度; /*#define VAR_MSG 500 //*/ #define MAX_INFO 255 // INFO数据最长长度; #define _VAR_MSG 500 // ; #define ___DEBUG 1 //; // 设备Dll错误代码定义; enum __ERRO_CODE_TMASTER { ERR_CODE_AIRTMASTER_COM_FAULT = 50201 , // 约顿空调设备串口通信故障; ERR_CODE_AIRTMASTER_COM_BUSY , // 约顿空调设备串口通信忙; ERR_CODE_AIRTMASTER_COM_READ_NO_DATA , // 约顿空调设备没有读到数据; ERR_CODE_AIRTMASTER_COM_READ_LEN_OVER , // 约顿空调设备读到数据长度超时限制; ERR_CODE_AIRTMASTER_COM_LRC_LOST , // 约顿空调设备lrc校验失败; EER_CODE_AIRTMASTER_COM_WRITE_DATA , // 约顿空调设备写串口错误; EER_CODE_AIRTMASTER_COM_REGNUM , // 约顿空调设备寄存器数; ERR_CODE_AIRTMASTER_COM_VARLEN , // 约顿空调设备变量长度非法; ERR_CODE_AIRTMASTER_COM_INVALIDRES , // 约顿空调设备无效应答; }; enum _ERROR_LENGTHSUM { ERR_LENGTH_SUM = 60220, ERR_CHEKSUM }; // RTN错误代码定义 enum _ERRO_CODE_RTN { ERR_CODE_RTN_NATURAL = 0x00, // 正常; 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, // 无效数据; }; typedef struct __RCHILD { BYTE bySoi; // 起始标志位; BYTE byVer[2]; // 通讯协议版本号; BYTE byAdr[2]; // 设备地址描述; BYTE byCid1[2]; // 控制标识码; BYTE byCid2[2]; // 命令信息; BYTE byLength[4]; // INFO字节长度; }RCHILD, *pRCHILD; typedef struct __WCHILD { BYTE bySoi; // 起始标志位; BYTE byVer[2]; // 通讯协议版本号; BYTE byAdr[2]; // 设备地址描述; BYTE byCid1[2]; // 控制标识码; BYTE byCid2[2]; // 命令信息; BYTE byLength[4]; // INFO字节长度; BYTE byInfo[10]; // INFO内容(一般为2个byte); }WCHILD, *pWCHILD; // 设备请求发送数据; typedef struct __REQUESTPARAM { RCHILD RequestChild; BYTE byCheckSum[4]; // 校验码; BYTE byEoi; // 结束码; }REQUESTPARAM, *pREQUESTPARAM; // 设备请求接收数据; typedef struct __REPONSEPARAM { WCHILD ReposeChild; BYTE byContent[MAX_INFO]; // 数据内容; BYTE byCheckSum[4]; // 校验码; BYTE byEoi; // 结束码; }REPONSEPARAM, *pREPONSEPARAM; // 设备请求接收数据; typedef struct __WRITEPARAM { WCHILD ReposeChild; BYTE byCheckSum[4]; // 校验码; BYTE byEoi; // 结束码; }WRITEPARAM, *pWRITEPARAM; public: BOOL AirTmasterOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval); CTmaster( char szPath[MAX_PATH], // 程序所在路径; char szIniName[MAX_PATH], // 配置文件名称; int nCommPort, // 串行端口; int nAddr, // 设备地址; int nRate, // 波特率; int nDataBit, // 数据位; int nStopBit, // 停止位; int nParity, // 校验位; int nInterval // 时间间隔; ); virtual ~CTmaster(); public: // 发送数据请求; int SendReadRequest( char szPath[MAX_PATH], // 程序所在路径; char szIniName[MAX_PATH], // 配置文件名称; int nCommPort, // 串行端口; int nAddr, // 设备地址; char szCmd[MAX_CMD], // 请求命令; char szRecvMsg[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接口; ); // 发送参数设置; int SendSetReuest( char szPath[MAX_PATH], // 程序所在路径 ; char szIniName[MAX_PATH], // 配置文件名称 ; int nCommPort, // 串行端口; int nAddr, // 设备地址; char szCmd[MAX_CMD], // 请求命令; char szSetMsg[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接口; ); protected: char m_szE0Msg[MAX_ADDR][VAR_MSG]; char m_szSend49Msg[MAX_ADDR][VAR_MSG]; char m_szSend45Msg[MAX_ADDR][VAR_MSG]; protected: int RequestReadStatus(int nAddr,CCommProcess *pComm,char szSendMsg[_VAR_MSG]); int ResponseReadStatus( CCommProcess *pComm, char szCmd[MAX_CMD], char szRecvMsg[VAR_MSG], int nAddr, int &nIndex, int &nLen, char szType[TYPE_LENGTH], int &startbit, int &endbit ); int RequestWriteStatus( CCommProcess *pComm,int nAddr,char szCmd[MAX_CMD],char szSendMsg[VAR_MSG] ,char szSetMsg[VAR_MSG],char szLength[5], int &nCDT); int ResponseWriteStatus( CCommProcess *pComm,int nAddr); int GetDeviceParam( int nAddr, CCommProcess *pComm, //串口对象指针 char szSendMsg[_VAR_MSG], //发送Buffer char szCmd[MAX_CMD], // 命令 char szRecvMsg[VAR_MSG], // 接收Buffer int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH], // 变量数据类型 int &startbit, int &endbit ); int SetDeviceParam( int nAddr, CCommProcess *pComm, //串口对象指针 char szSendMsg[_VAR_MSG], //发送Buffer char szCmd[MAX_CMD], // 命令 char szSetMsg[VAR_MSG], // 接收Buffer char szLength[5], // 变量索引,针对接收Buffer而言 int &nCDTn // 变量长度 ); int GetULFromIni( char szPath[MAX_PATH], //服务器程序所在目录 char szIniName[MAX_PATH], //配置文件名 char szCmd[MAX_CMD], //命令 char szSanTakSendMsg[MAX_CMD], //发送Buffer char nType[MAX_CMD], int &nIndex, int &nLen, int &startbit, int &endbit, char szLength[5], int &nCDT ); int GetE0VarMsg( char szCmd[MAX_CMD], // 命令 char szRecvMsg[VAR_MSG], // 接收Buffer int nAddr, int &nIndex, // 变量索引,针对接收Buffer而言 int &nLen, // 变量长度 char szType[TYPE_LENGTH], int &startbit, int &endbit ); UINT GetCheckSum(char *pBuf, char chDest[5], int len); WORD RtnCheck(char Msg[VAR_MSG],int len); void SetE0VarMsg( int nAddr,char szCmd[MAX_CMD], char *pBuffer); // void Set49VarMsg( char szCmd[MAX_CMD], char *pBuffer); // void Set45VarMsg( char szCmd[MAX_CMD], char *pBuffer); // DEBUG测试数据; void SimulationCommData(void); private: HANDLE m_hSemComm; #if IS_USE_READMSG_CS CRITICAL_SECTION m_csReadMsg; #endif BOOL m_dwOnlineTick[MAX_ADDR]; BOOL m_devOnline[MAX_ADDR]; };