// OperPLC.cpp: implementation of the COperPLC class. // ////////////////////////////////////////////////////////////////////// #include "geomative.h" #include "OperPLC.h" #include "FileOperTools.h" #include "CtrlProtocolDef.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif extern int g_iUILanguage; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// COperPLC* COperPLC::m_pOperPlc = NULL; COperPLC::COperPLC() { } COperPLC::~COperPLC() { } COperPLC* COperPLC::GetInstance() { if (NULL == m_pOperPlc) { m_pOperPlc = new COperPLC; } return m_pOperPlc; } int COperPLC::ParsePlcOperResInfo(char* pData, int iLen) { if (iLen != sizeof(STRemPlcDataInfo)) { return EN_PLC_RES_LEN_ERR; } STRemPlcDataInfo* pPlcInfo = (STRemPlcDataInfo*)pData; if ( 1== pPlcInfo->ucResult) return EN_PLC_RES_SUCCESS; else return EN_PLC_RES_FAILED; } void COperPLC::GetPlcCmdInfo(BYTE ucCmd, char* pData, int& iLen, int iMaxLen) { iLen = 0; CString str = _T(""); if (iMaxLen < sizeof(STRemPlcDataInfo)) { if (LANG_ZHCN == g_iUILanguage) { str.Format(_T("获取plc cmd长度错误.max_len=%d, should_len=%d"), iMaxLen, sizeof(STRemPlcDataInfo)); AfxMessageBox(str); } else { str.Format(_T("Get plc cmd length error.max_len=%d, should_len=%d"), iMaxLen, sizeof(STRemPlcDataInfo)); MessageBoxEx(NULL, str, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return; } switch (ucCmd) { case EN_PLC_POWER_ON: GetPowerOnCmd(pData,iLen); break; case EN_PLC_POWER_OFF: GetPowerOffCmd(pData,iLen); break; default: if (LANG_ZHCN == g_iUILanguage) { str.Format(_T("未知PLC命令(%d)"), ucCmd); AfxMessageBox(str); } else { str.Format(_T("Unknow plc cmd(%d)"), ucCmd); MessageBoxEx(NULL, str, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } break; } } void COperPLC::GetPowerOffCmd(char* pCmdData,int& iCmdLen) { STRemPlcDataInfo* pPlcDataInfo = (STRemPlcDataInfo*)pCmdData; iCmdLen = sizeof(STRemPlcDataInfo); memset(pPlcDataInfo, 0, sizeof(STRemPlcDataInfo)); pPlcDataInfo->ucPacketIndex = 1; pPlcDataInfo->ucCtrlK3 = 0; pPlcDataInfo->ucCtrlK4 = 0; //1,2,5,6设置成2 pPlcDataInfo->ucCtrlK1 = 2; pPlcDataInfo->ucCtrlK2 = 2; pPlcDataInfo->ucCtrlK5 = 2; pPlcDataInfo->ucCtrlK6 = 2; } void COperPLC::GetPowerOnCmd(char* pCmdData,int& iCmdLen) { STRemPlcDataInfo* pPlcDataInfo = (STRemPlcDataInfo*)pCmdData; iCmdLen = sizeof(STRemPlcDataInfo); memset(pPlcDataInfo, 0, sizeof(STRemPlcDataInfo)); pPlcDataInfo->ucPacketIndex = 1; pPlcDataInfo->ucCtrlK3 = 1; pPlcDataInfo->ucCtrlK4 = 1; //1,2,5,6设置成2 pPlcDataInfo->ucCtrlK1 = 2; pPlcDataInfo->ucCtrlK2 = 2; pPlcDataInfo->ucCtrlK5 = 2; pPlcDataInfo->ucCtrlK6 = 2; }