// devmngframe.cpp : implementation file // #include "stdafx.h" #include "geomative.h" #include "devmngframe.h" #include "Constant.h" #include "blankview.h" #include "MainFrm.h" #include "DevOperator.h" #include "appdevview.h" #include "appdevolview.h" #include "appdevoldetaillistview.h" #include "FileOperTools.h" #include "DetcGD10Dev.h" #include "DialUpgDeviceInfo.h" #include "DialExpDiagnosis.h" #include "DialRollCallCable.h" #include "CtrlProtocolDef.h" #include "DialShowDevParam.h" #include "DialTaskManager.h" #include "DialOfflineDeviceTaskManager.h" #include "DialTaskManagerOffline.h" #include "DialTimerTask.h" #include "DialTimerTaskMeasu.h" #include "DialPlcStatusSetting.h" #include "DialPlcStatusShow.h" #include "DialDevStatusTimerShow.h" #include "DialQueryPLCStatus.h" #include "DialMeasuTaskPacket.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CGeoMativeApp theApp; extern int g_UIOffset; extern int g_iUILanguage; extern DWORD g_dwDeviceSN; extern DWORD g_dwPLCID; extern int g_iOnLineVersion; extern float tcp_htonf(float f); extern float tcp_ntohf(float f); ///////////////////////////////////////////////////////////////////////////// // CDevMngFrame IMPLEMENT_DYNCREATE(CDevMngFrame, CMDIChildWnd) CDevMngFrame::CDevMngFrame() { m_pAppDevView = NULL; m_pNavDevView = NULL; m_bAutoMenuEnable = FALSE; m_pDevOperator = new CDevOperator(theApp.m_pConnection); m_bIsUpdateDev = false; m_bIsUpdateFuncBoard = false; m_bIsActive = FALSE; m_strDiagnosisPath = _T(""); memset(m_chRevBuf, 0, sizeof(m_chRevBuf)); m_iRcvLen = 0; m_ucCmd = 255; m_ucDevType = 255; m_uiDevID = 0; m_bIsPowerTfeqChg = false; m_ucCableType = 0; m_bDevState = FALSE; //m_iPlcTimerInterval = 1200; m_iPlcTimerInterval=GetPrivateProfileInt("PLC_SET","TimeInterval",1200,_T("./config.ini")); ASSERT(NULL != m_pDevOperator); m_IsOffFlag = TRUE; } CDevMngFrame::~CDevMngFrame() { if (m_pDevOperator != NULL) { delete m_pDevOperator; m_pDevOperator= NULL; } } BEGIN_MESSAGE_MAP(CDevMngFrame, CMDIChildWnd) //{{AFX_MSG_MAP(CDevMngFrame) ON_WM_MDIACTIVATE() ON_WM_CLOSE() ON_MESSAGE(WM_SCHEDULE, OnSchedule) ON_MESSAGE(WM_REFRESH_NAV_DEVICE, OnRefreshNavDevice) ON_MESSAGE(WM_NET_RESPONSE, PreNetResponse) ON_COMMAND(IDM_OP_DE_REG_O_UPG, OnDevieUpgrade) ON_COMMAND(IDM_OP_DE_REG_O_MP, OnModifyDeviceParameter) // ON_COMMAND(IDM_OP_DE_REG_O_UPG_FUNC_BOARD, OnUpgradeFunctionBoard) // ON_COMMAND(IDM_OP_DE_REG_O_TIME_WINDOW, OnModifyObservationTime) // ON_COMMAND(IDM_OP_DE_GET_ANALYSE_INFO, OnGetAnlyseInfo) ON_COMMAND(IDM_OP_DE_NEW_O_REG, OnRegisterNewDevice) ON_COMMAND(IDM_OP_DE_REG_O_REF_ALLPOLE, OnRefreshAllGRRec) ON_COMMAND(IDM_OP_DE_REG_O_SHOW_CABLEHEAD, OnShowCableHeadDlg) ON_MESSAGE(WM_DEVREFRESHGRREC, OnRefreshGRRec) ON_COMMAND(IDM_REM_GD10_ROLLCALL, OnRemGD10RollCall) ON_COMMAND(IDM_REM_GD10_SYN_PARAM, OnRemGD10SynParam) ON_COMMAND(IDM_REM_GD10_TASK_MANAGER, OnRemGD10TaskManage) ON_COMMAND(IDM_REM_GD10_TIMER_TASK_CFG, OnRemGD10TimerTdCfg) ON_COMMAND(IDM_REM_GD10_TIMER_TASK_RUN, OnRemGD10TimerTdRun) ON_COMMAND(IDM_TRUST_TASK_MANAGER, OnTrustTaskManager) ON_COMMAND(IDM_OFFLINE_DEVICE_TASK_MANAGER, OnViewOfflineDeviceTaskManager) ON_COMMAND(IDM_REM_PLC_POWER_ON, OnRemPlcPowOn) ON_COMMAND(IDM_REM_PLC_POWER_OFF, OnRemPlcPowOff) ON_COMMAND(IDM_REM_PLC_SETTING, OnRemPlcSetting) ON_COMMAND(IDM_REM_PLC_QUERY_STATUS, OnRemQueryPlcStatus) ON_COMMAND(IDM_REM_GD10_TASK_PACKET, OnRemMeasuTaskPacket) ON_COMMAND(IDM_OP_DE_REG_O_UNREG, OnUnregisterDevice) ON_MESSAGE(WM_CLOSE_FRAME_WINDOW, OnCloseFrameWindow) ON_MESSAGE(WM_SHOW_DEV_PARAM, OnShowDevParam) // ON_COMMAND(IDM_OP_DE_REG_O_RM_DIAGNOSIS, OnRemoteDiagnosis) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDevMngFrame message handlers BOOL CDevMngFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class m_splitter.CreateStatic(this, SPL_WND_A_ROW, SPL_WND_A_COL); m_splitter.CreateView(SPL_VIEW_ROW_0, SPL_VIEW_COL_0, RUNTIME_CLASS(CNavDevView), CSize(SPL_VIEW_NAV_WIDTH, SPL_VIEW_NAV_HEIGHT), pContext); m_pNavDevView = static_cast(m_splitter.GetPane(SPL_VIEW_ROW_0, SPL_VIEW_COL_0)); ASSERT(m_pNavDevView != NULL); m_splitter.CreateView(SPL_VIEW_ROW_0, SPL_VIEW_COL_1, RUNTIME_CLASS(CBlankView), CSize(SPL_VIEW_NAV_WIDTH, SPL_VIEW_NAV_HEIGHT), pContext); m_pAppDevView = static_cast(m_splitter.GetPane(SPL_VIEW_ROW_0, SPL_VIEW_COL_1)); ASSERT(m_pAppDevView != NULL); return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CDevMngFrame::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd) { CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd); // TODO: Add your message handler code here m_bIsActive = bActivate; if (TRUE == bActivate) //当MDI窗口处于激活状态,bActive的值为TRUE; { DWORD dwItemHandle = (DWORD)VAL_ZERO; DWORD dwImageState = (DWORD)VAL_ZERO; UINT uStyle = (UINT)VAL_ZERO; UINT uState = (UINT)VAL_ZERO; HTREEITEM hDevItem = NULL; CString strTitle; strTitle.LoadString(IDS_DEV_MANAGE+g_UIOffset); if (GetTitle() != strTitle) { SetTitle((LPCTSTR)strTitle); m_pDevOperator->InitialNavDevView((CNavDevView*)m_pNavDevView); } hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); if (NULL != hDevItem) { dwItemHandle = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemData(hDevItem); dwImageState = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemState(hDevItem, TVIS_STATEIMAGEMASK); uStyle = m_pDevOperator->m_handleProcessor.GetStyleFromHandle(dwItemHandle); uState = m_pDevOperator->m_stateProcessor.ChangeToItemState(dwImageState); ::SendMessage(((CMainFrame*)AfxGetMainWnd())->m_hWnd, WM_SCHEDULE, (WPARAM)uStyle, (LPARAM)uState); } else { ::SendMessage(((CMainFrame*)AfxGetMainWnd())->m_hWnd, WM_SCHEDULE, (WPARAM)VAL_ZERO, (LPARAM)VAL_ZERO); } } else //当MDI窗口处于非激活状态或即将关闭,bActive的值为FALSE; { if (NULL != ((CMainFrame*)GetParentFrame())->m_pDevMngFrm) { ::SendMessage(((CMainFrame*)AfxGetMainWnd())->m_hWnd, WM_SCHEDULE, (WPARAM)VAL_ZERO, (LPARAM)VAL_ZERO); } } } LRESULT CDevMngFrame::OnCloseFrameWindow(WPARAM wParam, LPARAM lParam) { OnClose(); return 0; } void CDevMngFrame::OnClose() { // TODO: Add your message handler code here and/or call default ::SendMessage(GetParentFrame()->m_hWnd, WM_SCHEDULE, (WPARAM)VAL_ZERO, (LPARAM)VAL_ZERO); ((CMainFrame*)GetParentFrame())->m_pDevMngFrm = NULL; m_bIsActive = FALSE; CMDIChildWnd::OnClose(); } LRESULT CDevMngFrame::OnSchedule(WPARAM wParam, LPARAM lParam) { DWORD dwItemHandle = (DWORD)VAL_ZERO; DWORD dwImageState = (DWORD)VAL_ZERO; UINT uStyle = (UINT)VAL_ZERO; UINT uState = (UINT)VAL_ZERO; dwItemHandle = (DWORD)wParam; dwImageState = (DWORD)lParam; uStyle = (DWORD)m_pDevOperator->m_handleProcessor.GetStyleFromHandle(dwItemHandle); uState = (DWORD)m_pDevOperator->m_stateProcessor.ChangeToItemState(dwImageState); ShowAppView(dwItemHandle, uState); HTREEITEM hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); if ((PZ_STATE_OFFLINE ==uState) &&(-1 != strSN.FindOneOf("PLC"))) { m_bDevState = TRUE; uStyle = PZ_STYLE_REMOTE_PLC; } else { m_bDevState = FALSE; } ::SendMessage(((CMainFrame*)AfxGetMainWnd())->m_hWnd, WM_SCHEDULE, (WPARAM)uStyle, (LPARAM)uState); return 0; } LRESULT CDevMngFrame::OnRefreshGRRec(WPARAM wParam, LPARAM lParam) { int iItemIndex = (int)wParam; CListCtrl &grList = ((CAppDevOLDetailListView*)((CAppDevOLView*)m_pAppDevView)->m_pDevOLGRListView)->GetListCtrl(); m_pDevOperator->RefreshGRRec((CNavDevView*)m_pNavDevView, grList, iItemIndex); return 0; } void CDevMngFrame::OnRefreshAllGRRec() { CListCtrl &grList = ((CAppDevOLDetailListView*)((CAppDevOLView*)m_pAppDevView)->m_pDevOLGRListView)->GetListCtrl(); m_pDevOperator->RefreshAllGRRec((CNavDevView*)m_pNavDevView, grList); } bool CDevMngFrame::ShowAppView(DWORD dwHandle, UINT uState) { DWORD dwDevHandle = (DWORD)VAL_ZERO; UINT uStyle = (UINT)VAL_ZERO; uStyle = (DWORD)m_pDevOperator->m_handleProcessor.GetStyleFromHandle(dwHandle); if ((UINT)VAL_ZERO != uState) { switch (uState) { case PZ_STATE_ONLINE: if (NULL != m_pAppDevView) { if (!m_pAppDevView->IsKindOf(RUNTIME_CLASS(CAppDevOLView))) { m_splitter.DeleteView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1); m_splitter.CreateView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1, RUNTIME_CLASS(CAppDevOLView), CSize((int)SPL_VIEW_APP_HEIGHT, (int)SPL_VIEW_APP_WIDTH), NULL); m_pAppDevView = static_cast(m_splitter.GetPane((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1)); } m_pDevOperator->ShowOLDeviceInfo(dwHandle, m_pAppDevView); } break; case PZ_STATE_OFFLINE: if (NULL != m_pAppDevView) { if (!m_pAppDevView->IsKindOf(RUNTIME_CLASS(CAppDevView))) { m_splitter.DeleteView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1); m_splitter.CreateView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1, RUNTIME_CLASS(CAppDevView), CSize((int)SPL_VIEW_APP_HEIGHT, (int)SPL_VIEW_APP_WIDTH), NULL); m_pAppDevView = static_cast(m_splitter.GetPane((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1)); } m_pDevOperator->ShowFLDeviceInfo(dwHandle, m_pAppDevView); } break; case PZ_STATE_NEW: default: if (NULL != m_pAppDevView) { if (!m_pAppDevView->IsKindOf(RUNTIME_CLASS(CBlankView))) { m_splitter.DeleteView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1); m_splitter.CreateView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1, RUNTIME_CLASS(CBlankView), CSize((int)SPL_VIEW_APP_HEIGHT, (int)SPL_VIEW_APP_WIDTH), NULL); m_pAppDevView = static_cast(m_splitter.GetPane((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1)); } } break; } } else { if (NULL != m_pAppDevView) { if (!m_pAppDevView->IsKindOf(RUNTIME_CLASS(CBlankView))) // if (_T("CBlankView") != m_pAppDevView->GetRuntimeClass()->m_lpszClassName) { m_splitter.DeleteView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1); m_splitter.CreateView((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1, RUNTIME_CLASS(CBlankView), CSize((int)SPL_VIEW_APP_HEIGHT, (int)SPL_VIEW_APP_WIDTH), NULL); m_pAppDevView = static_cast(m_splitter.GetPane((int)SPL_VIEW_ROW_0, (int)SPL_VIEW_COL_1)); } } } m_splitter.RecalcLayout(); return true; } void CDevMngFrame::OnDevieUpgrade() { int nRet = 0; if (LANG_ZHCN == g_iUILanguage) nRet = AfxMessageBox(_T("是否要进行升级?"), MB_YESNO); else nRet = MessageBoxEx(NULL, _T("Do you want to update?"), STRING_MESSAGEBOXEX_TITLE, MB_YESNO, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); if (IDYES != nRet) return; if (m_bIsUpdateDev) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("正在升级GD20设备,请稍候...")); else MessageBoxEx(NULL, _T("Is updating GD20 device,please wait..."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return ; } m_bIsUpdateDev = true; m_pDevOperator->DevieUpgrade((CNavDevView*)m_pNavDevView); m_bIsUpdateDev = false; Sleep(200); ((CMainFrame*)AfxGetMainWnd())->SetStatusText("ready"); } void CDevMngFrame::UploadDevinfoToSev(STSynDevParam DevPar) { extern float tcp_htonf(float f); char chMsgSyn[10] = { 0 }; CString szLabel = _T(""); int iLen = 0; theApp.m_NetWorkOper.SetSuspendForThread(true); //DevPar.uiMachineID = htonl(DevPar.uiMachineID); //DevPar.iGrThreshold = htonl(DevPar.iGrThreshold); //DevPar.fBatteryVol = tcp_htonf(DevPar.fBatteryVol); STRequestPacket requestPacket; requestPacket.clsPacketBase.ucCmd = EN_UPLOAD_DEV_INF; requestPacket.hWnd = this->m_hWnd; requestPacket.wDataLen = sizeof(DevPar); requestPacket.pData = new char[requestPacket.wDataLen]; memcpy(requestPacket.pData, (char*)(&DevPar), requestPacket.wDataLen); /*CString strLog; strLog.Format(_T("zm:setting GD args info CDevMngFrame::UploadDevinfoToSev fTemperature=%f,fBatteryVol=%f"), DevPar.fTemperature, DevPar.fBatteryVol); CFileOperTools::GetInstance()->WriteComLog(strLog);*/ float f = DevPar.fBatteryVol; float fT = DevPar.fTemperature; unsigned char *p,*pT, p0,pT0, p1,pT1; p = (unsigned char *)&f; p0 = p[0]; p1 = p[1]; p[0] = p[3]; p[3] = p0; p[1] = p[2]; p[2] = p1; pT = (unsigned char*)&fT; pT0 = pT[0]; pT1 = pT[1]; pT[0] = pT[3]; pT[3] = pT0; pT[1] = pT[2]; pT[2] = pT1; //strLog.Format(_T("zm:DevPar.fTemperature=%0x %0x %0x %0x DevPar.fBatteryVol= %0x %0x %0x %0x"), pT[3], pT[2], pT[1], pT[0], p[3], p[2], p[1], p[0]); //CFileOperTools::GetInstance()->WriteComLog(strLog); theApp.m_NetWorkOper.PutRequestPacket(requestPacket); if (requestPacket.pData) { delete[] requestPacket.pData; requestPacket.pData = NULL; } /*if (!theApp.m_NetWorkOper.SendCtrlMsgDirect(EN_UPLOAD_DEV_INF, 0xFFFFFFFF, 1, (char*)(&DevPar), sizeof(DevPar))) { theApp.m_NetWorkOper.SetSuspendForThread(false); AfxMessageBox(_T("upload device information send failed")); return; } if (EN_RECV_SUCCESS == theApp.m_NetWorkOper.RecvMsgDirect(chMsgSyn, &iLen, 10, 5000)) { BYTE ucReplayFlg = (BYTE)(chMsgSyn[0]); if ((ucReplayFlg != 0) || (iLen < 1)) { theApp.m_NetWorkOper.SetSuspendForThread(false); //AfxMessageBox(_T("upload device information recv failed")); return; } }*/ theApp.m_NetWorkOper.SetSuspendForThread(false); return; } LRESULT CDevMngFrame::OnShowDevParam(WPARAM wParam, LPARAM lParam) { Sleep(200); STSynDevParam* pStSynDevParam = (STSynDevParam*)lParam; CDialShowDevParam dialShowDebParam; pStSynDevParam->uiMachineID = ntohl(pStSynDevParam->uiMachineID); pStSynDevParam->fTemperature = tcp_ntohf(pStSynDevParam->fTemperature); pStSynDevParam->fBatteryVol = tcp_ntohf(pStSynDevParam->fBatteryVol); pStSynDevParam->iGrThreshold = ntohl(pStSynDevParam->iGrThreshold); dialShowDebParam.SetDevParam(pStSynDevParam); m_bIsPowerTfeqChg = false; if (IDOK ==dialShowDebParam.DoModal()) { //成员保存变量,GD设置成功后,发送给云端的数据 memcpy(&m_stSynDevParam, &dialShowDebParam.m_stDevParam, sizeof(STSynDevParam)); m_stSynDevParam.uiMachineID = htonl(dialShowDebParam.m_stDevParam.uiMachineID); m_stSynDevParam.fTemperature = tcp_htonf(dialShowDebParam.m_stDevParam.fTemperature); m_stSynDevParam.fBatteryVol = tcp_htonf(dialShowDebParam.m_stDevParam.fBatteryVol); m_stSynDevParam.iGrThreshold = htonl(dialShowDebParam.m_stDevParam.iGrThreshold); //CString strLog; //strLog.Format(_T("zm:setting GD args info:ID=%u,iGrThreshold=%d,ucPowerFreq=%d,ucBatteryAlarm=%d,ucCableType=%d,ucStacking=%d,ucChannelNum=%d,ucDownLoadNum=%d,fTemperature=%f,fBatteryVol=%f"),\ m_stSynDevParam.uiMachineID, m_stSynDevParam.iGrThreshold, m_stSynDevParam.ucPowerFreq, m_stSynDevParam.ucBatteryAlarm, m_stSynDevParam.ucCableType, m_stSynDevParam.ucStacking, m_stSynDevParam.ucChannelNum, m_stSynDevParam.ucDownLoadNum, m_stSynDevParam.fTemperature, m_stSynDevParam.fBatteryVol); //CFileOperTools::GetInstance()->WriteComLog(strLog); float f = m_stSynDevParam.fBatteryVol; float fT = m_stSynDevParam.fTemperature; unsigned char *p, *pT, p0, pT0, p1, pT1; p = (unsigned char *)&f; p0 = p[0]; p1 = p[1]; p[0] = p[3]; p[3] = p0; p[1] = p[2]; p[2] = p1; pT = (unsigned char*)&fT; pT0 = pT[0]; pT1 = pT[1]; pT[0] = pT[3]; pT[3] = pT0; pT[1] = pT[2]; pT[2] = pT1; //strLog.Format(_T("zm:DevPar.fTemperature=%0x %0x %0x %0x DevPar.fBatteryVol= %0x %0x %0x %0x"), pT[3], pT[2], pT[1], pT[0], p[3], p[2], p[1], p[0]); //CFileOperTools::GetInstance()->WriteComLog(strLog); //将数据发个GD设备,一期 STModifyDevParam stModifyParam; stModifyParam.iGrThreshold = htonl(dialShowDebParam.m_stDevParam.iGrThreshold); stModifyParam.ucBatteryAlarm = dialShowDebParam.m_stDevParam.ucBatteryAlarm; stModifyParam.ucCableType = dialShowDebParam.m_stDevParam.ucCableType; stModifyParam.ucPowerFreq = dialShowDebParam.m_stDevParam.ucPowerFreq; stModifyParam.ucStacking = dialShowDebParam.m_stDevParam.ucStacking; stModifyParam.ucDownLoadNum = dialShowDebParam.m_stDevParam.ucDownLoadNum; m_bIsPowerTfeqChg = (pStSynDevParam->ucPowerFreq == stModifyParam.ucPowerFreq) ? false : true; /*STSendDataInfo stSendData; stSendData.pData = (char*)(&stModifyParam); stSendData.wDataLen = sizeof(stModifyParam); stSendData.uiDevID = m_uiDevID; stSendData.ucDstType = EN_DEV_GD10; memset(m_chRevBuf, 0, sizeof(m_chRevBuf)); STRespDataInfo stRspData; stRspData.pData = m_chRevBuf; stRspData.pRecvLen = &m_iRcvLen; stRspData.iMaxRcvLen = MAX_RCV_CTRLBUF; stRspData.iTimeout = 6000; m_ucCmd = EN_CTRL_SET_DEV_PARAM; m_ucDevType = EN_DEV_GD10; m_ucCableType = dialShowDebParam.m_stDevParam.ucCableType; if (false==theApp.m_NetWorkOper.TransferOper(m_ucCmd, &stSendData, true, &stRspData, CDevMngFrame::NotifyFunc,this)) { AfxMessageBox(_T("Send synchronization set msg failed")); return 1; }*/ m_ucCmd = EN_CTRL_SET_DEV_PARAM; m_ucDevType = EN_DEV_GD10; m_ucCableType = dialShowDebParam.m_stDevParam.ucCableType; STRequestPacket requestPacket; requestPacket.clsPacketBase.ucCmd = EN_CTRL_SET_DEV_PARAM; requestPacket.clsPacketBase.ucDevType = EN_DEV_GD10; requestPacket.clsPacketBase.uiDevID = m_uiDevID; requestPacket.iTimeout = 6000; requestPacket.hWnd = this->m_hWnd; requestPacket.wDataLen = sizeof(stModifyParam); requestPacket.pData = new char[requestPacket.wDataLen]; if (requestPacket.pData == NULL) { return 1; } memcpy(requestPacket.pData, (char*)(&stModifyParam), requestPacket.wDataLen); theApp.m_NetWorkOper.PutRequestPacket(requestPacket); if (requestPacket.pData != NULL) { delete[] requestPacket.pData; requestPacket.pData = NULL; } } else { //避免用户没有上传设备到云端,因此初始化之前先上传一次 pStSynDevParam->uiMachineID = htonl(pStSynDevParam->uiMachineID); pStSynDevParam->fTemperature = tcp_htonf(pStSynDevParam->fTemperature); pStSynDevParam->fBatteryVol = tcp_htonf(pStSynDevParam->fBatteryVol); pStSynDevParam->iGrThreshold = htonl(pStSynDevParam->iGrThreshold); UploadDevinfoToSev(*pStSynDevParam); } return 0; } void CDevMngFrame::OnModifyDeviceParameter() { CListCtrl &detailList = ((CAppDevOLDetailListView*)((CAppDevOLView*)m_pAppDevView)->m_pDevOLDetailListView)->GetListCtrl(); m_pDevOperator->ModifyDeviceParameter((CNavDevView*)m_pNavDevView, detailList); } void CDevMngFrame::OnRegisterNewDevice() { m_pDevOperator->RegisterNewDevice((CNavDevView*)m_pNavDevView); ::SendMessage(((CMainFrame*)AfxGetMainWnd())->m_hWnd, WM_REFRESH, (WPARAM)OP_TD_SYN, (LPARAM)VAL_ZERO); } void CDevMngFrame::OnShowCableHeadDlg() { m_pDevOperator->ShowCableHeadDlg((CNavDevView*)m_pNavDevView); } void CDevMngFrame::OnUnregisterDevice() { int nRet = 0; if (LANG_ZHCN == g_iUILanguage) nRet = AfxMessageBox(_T("是否移除改设备?"), MB_YESNO); else nRet = MessageBoxEx(NULL, _T("Do you want to remove this device? "), STRING_MESSAGEBOXEX_TITLE, MB_YESNO, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); if (IDYES != nRet) return; m_pDevOperator->UnregisterDevice((CNavDevView*)m_pNavDevView); } void CDevMngFrame::OnModifyObservationTime() { if (APP_SUCCESS == m_pDevOperator->ModifyWindowTime((CNavDevView*)m_pNavDevView)) { HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); if (NULL != hDevItem) { dwItemHandle = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemData(hDevItem); dwImageState = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemState(hDevItem, TVIS_STATEIMAGEMASK); OnSchedule((WPARAM)dwItemHandle, (LPARAM)dwImageState); } } } void CDevMngFrame::OnRemoteDiagnosis() { } LRESULT CDevMngFrame::OnRefreshNavDevice(WPARAM wParam, LPARAM lParam) { // if (NULL == m_pNavDevView || NULL == m_pDevOperator) // { // AfxMessageBox(_T("Neither pNavDevView nor pDevOperator can be null!")); // return; // } m_pDevOperator->InitialNavDevView((CNavDevView*)m_pNavDevView); return 0; } void CDevMngFrame::OnGetAnlyseInfo() { if (m_strDiagnosisPath.IsEmpty()) { CString szCurFilePath = _T(""); szCurFilePath.Empty(); szCurFilePath.GetBufferSetLength(256); ::GetCurrentDirectory(szCurFilePath.GetLength(), szCurFilePath.GetBuffer(szCurFilePath.GetLength())); szCurFilePath.ReleaseBuffer(); m_strDiagnosisPath.Format(_T("%s\\Diagnosis"),szCurFilePath); } CDialExpDiagnosis dialExp; dialExp.SetOrgFilePath(m_strDiagnosisPath); if (IDOK != dialExp.DoModal()) { return; } m_strDiagnosisPath = dialExp.GetFilePath(); if (m_strDiagnosisPath.IsEmpty()) { return; } CString strSrc = _T(""); strSrc.Format(_T("%s/SD/logs"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr()); CDialUpgDeviceInfo* pDial = new CDialUpgDeviceInfo; pDial->Create(IDD_DIALOG_UPG_DEVICE, this); pDial->ShowWindow(SW_SHOW); pDial->SetShowTxt(_T("Getting diagnosis,please wait...")); if (CFileOperTools::GetInstance()->CopyFolder(strSrc,m_strDiagnosisPath)) AfxMessageBox(_T("操作失败")); else MessageBoxEx(NULL, _T("Operation failed"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); if (pDial != NULL) { delete pDial; pDial = NULL; } } void CDevMngFrame::OnRemGD10RollCall() { if (!theApp.m_NetWorkOper.GetLinkStatus()) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("连接中断")); else MessageBoxEx(NULL, _T("Connect the interrupt"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); if (!strSN.IsEmpty() && strSN.GetLength() < 12) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("远端SN序号错误")); else MessageBoxEx(NULL, _T("Remote SN serial number error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } DWORD dwDevID = atoi(strSN.Mid(2,9)); CDialRollCallCable dialRollCall; dialRollCall.SetDstDevID(dwDevID); dialRollCall.SetCableType(theApp.m_iCableType); dialRollCall.DoModal(); } void CDevMngFrame::OnRemGD10SynParam() { // TODO: Add your control notification handler code here HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; // DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); if (!strSN.IsEmpty() && strSN.GetLength() < 12) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("远端SN序号错误")); else MessageBoxEx(NULL, _T("Remote SN serial number error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } DWORD dwDevID = atoi(strSN.Mid(2,9)); // dwItemHandle = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemData(hDevItem); // DWORD dwDevID = (DWORD)m_pDevOperator->m_handleProcessor.GetStyleFromHandle(dwItemHandle); m_uiDevID = dwDevID; /*STSendDataInfo stSendData; stSendData.pData = NULL; stSendData.wDataLen = 0; stSendData.uiDevID = m_uiDevID; stSendData.ucDstType = EN_DEV_GD10; memset(m_chRevBuf, 0, sizeof(m_chRevBuf)); STRespDataInfo stRspData; stRspData.pData = m_chRevBuf; stRspData.pRecvLen = &m_iRcvLen; stRspData.iMaxRcvLen = MAX_RCV_CTRLBUF; stRspData.iTimeout = 30000; m_ucCmd = EN_CTRL_SYN_DEV_PARAM; m_ucDevType = EN_DEV_GD10;*/ /*if (false==theApp.m_NetWorkOper.TransferOper(m_ucCmd, &stSendData, true, &stRspData, CDevMngFrame::NotifyFunc,this)) { AfxMessageBox(_T("Send synchronization msg failed")); return; }*/ m_ucCmd = EN_CTRL_SYN_DEV_PARAM;//暂时保存,修改接口后应该没什么用 m_ucDevType = EN_DEV_GD10;//暂时保存,修改接口后应该没什么用 STRequestPacket requestPacket; requestPacket.clsPacketBase.ucCmd = EN_CTRL_SYN_DEV_PARAM; requestPacket.clsPacketBase.ucDevType = EN_DEV_GD10; requestPacket.clsPacketBase.uiDevID = m_uiDevID; requestPacket.iTimeout = 30000; requestPacket.hWnd = this->m_hWnd; requestPacket.wDataLen = 0; requestPacket.pData = NULL; theApp.m_NetWorkOper.PutRequestPacket(requestPacket); //CFileOperTools::GetInstance()->WriteComLog(_T("zm:CDevMngFrame::OnRemGD10SynParam() send device syn request************")); // if (!theApp.m_NetWorkOper.SendCtrlMsgDirect(EN_CTRL_SYN_DEV_PARAM,dwDevID, EN_DEV_GD10, NULL, 0)) // { // AfxMessageBox(_T("同步失败")); // return; // } // Sleep(300); // char chData[100] = {0}; // int iRecvLen = 0; // if (EN_RECV_SUCCESS != theApp.m_NetWorkOper.RecvMsgDirect(chData, &iRecvLen, 100, 9000)) // { // AfxMessageBox(_T("接收数据失败")); // return; // } // if (iRecvLen != sizeof(STSynDevParam)) // { // AfxMessageBox(_T("长度校验失败")); // return; // } /* STSynDevParam* pStSynDevParam = (STSynDevParam*)chData; CDialShowDevParam dialShowDebParam; dialShowDebParam.SetDevParam(pStSynDevParam); if (IDOK ==dialShowDebParam.DoModal()) { STModifyDevParam stModifyParam; stModifyParam.iGrThreshold = htonl(dialShowDebParam.m_stDevParam.iGrThreshold); stModifyParam.ucBatteryAlarm = dialShowDebParam.m_stDevParam.ucBatteryAlarm; stModifyParam.ucCableType = dialShowDebParam.m_stDevParam.ucCableType; stModifyParam.ucPowerFreq = dialShowDebParam.m_stDevParam.ucPowerFreq; stModifyParam.ucStacking = dialShowDebParam.m_stDevParam.ucStacking; bool bIsPowerTfeqChg = (pStSynDevParam->ucPowerFreq == stModifyParam.ucPowerFreq) ? false : true; if (!theApp.m_NetWorkOper.SendCtrlMsgDirect(EN_CTRL_SET_DEV_PARAM, dwDevID,EN_DEV_GD10,(char*)(&stModifyParam), sizeof(stModifyParam))) { AfxMessageBox(_T("设置参数信息失败")); return; } iRecvLen = 0; memset(chData, 0, sizeof(chData)); if (EN_RECV_SUCCESS != theApp.m_NetWorkOper.RecvMsgDirect(chData, &iRecvLen, 100, 6000)) { AfxMessageBox(_T("接收数据失败")); return; } CString strErr = _T(""); if (2 != iRecvLen) { strErr.Format(_T("数据响应长度(%d)错误"),iRecvLen); AfxMessageBox(strErr); return; } WORD wRes = *((WORD*)chData); wRes = ntohs(wRes); if (0 == wRes) { strErr.Empty(); if (bIsPowerTfeqChg) strErr = _T("\r\n但由于修改了工业频率, 请重启主机设备"); AfxMessageBox(_T("参数设置成功")+strErr); theApp.m_iCableType = dialShowDebParam.m_stDevParam.ucCableType; } else { strErr.Empty(); strErr.Format(_T("参数设置错误,返回错误码= %d"),wRes); AfxMessageBox(strErr); return; } } */ } //非在线任务管理 void CDevMngFrame::OnRemGD10TaskManage() { HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; // DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); if (!strSN.IsEmpty() && strSN.GetLength() < 12) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("远端SN序号错误")); else MessageBoxEx(NULL, _T("Remote SN serial number error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } DWORD dwDevID = atoi(strSN.Mid(2,9)); CDialTaskManagerOffline dialTaskManageOffline; dialTaskManageOffline.SetDstDevID(dwDevID); dialTaskManageOffline.DoModal(); AfxGetApp()->m_pMainWnd->SendMessage(WM_REFRESH, OP_TD_SYN, 0); } //查看离线设备的服务端信息 void CDevMngFrame::OnViewOfflineDeviceTaskManager() { //CFileOperTools::GetInstance()->WriteComLog(_T("zm:Offline task manager test---------- begin")); HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; // DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strDeviceSN; strDeviceSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); //查找PLC设备 DWORD dwStyle = 0; CString strPLCID; HTREEITEM hNextItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetNextSiblingItem(hDevItem); while (hNextItem != NULL) { strPLCID = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hNextItem); if (strPLCID.Mid(0, 3).Compare(_T("PLC")) == 0) { strPLCID = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hNextItem); if (!strPLCID.IsEmpty()) { g_dwPLCID = atoi(strPLCID.Mid(3, 10)); } break; } hNextItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetNextSiblingItem(hNextItem); } if (!strDeviceSN.IsEmpty() && strDeviceSN.GetLength() < 11) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("远端SN序号错误")); else MessageBoxEx(NULL, _T("Remote SN serial number error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } g_dwDeviceSN = atoi(strDeviceSN.Mid(2, 9)); CDialOfflineDeviceTaskManager dialTaskManage; dialTaskManage.SetDeviceID(g_dwDeviceSN); dialTaskManage.SetPLCID(g_dwPLCID); CString strLog; strLog.Format(_T("CDevMngFrame::OnViewOfflineDeviceTaskManager() DeviceSN=%u PLCID=%u"), g_dwDeviceSN, g_dwPLCID); CFileOperTools::GetInstance()->WriteComLog(strLog); dialTaskManage.DoModal(); //CFileOperTools::GetInstance()->WriteComLog(_T("zm:Online test---------- end")); AfxGetApp()->m_pMainWnd->SendMessage(WM_REFRESH, OP_TD_SYN, 0); } //在线测试 void CDevMngFrame::OnTrustTaskManager() { //CFileOperTools::GetInstance()->WriteComLog(_T("zm:Online test---------- begin")); HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; // DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strDeviceSN; strDeviceSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); //查找PLC设备 DWORD dwStyle = 0; CString strPLCID; HTREEITEM hNextItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetNextSiblingItem(hDevItem); while (hNextItem != NULL) { strPLCID = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hNextItem); if (strPLCID.Mid(0,3).Compare(_T("PLC")) == 0) { strPLCID = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hNextItem); if (!strPLCID.IsEmpty()) { g_dwPLCID = atoi(strPLCID.Mid(3, 10)); } break; } hNextItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetNextSiblingItem(hNextItem); } if (!strDeviceSN.IsEmpty() && strDeviceSN.GetLength() < 11) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("远端SN序号错误")); else MessageBoxEx(NULL, _T("Remote SN serial number error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } g_dwDeviceSN = atoi(strDeviceSN.Mid(2, 9)); CDialTaskManager dialTaskManage; dialTaskManage.SetDeviceID(g_dwDeviceSN); dialTaskManage.SetPLCID(g_dwPLCID); CString strLog; strLog.Format(_T("CDevMngFrame::OnTrustTaskManager() DeviceSN=%u PLCID=%u"), g_dwDeviceSN, g_dwPLCID); CFileOperTools::GetInstance()->WriteComLog(strLog); dialTaskManage.DoModal(); AfxGetApp()->m_pMainWnd->SendMessage(WM_REFRESH, OP_TD_SYN, 0); } void CDevMngFrame::OnRemGD10TimerTdCfg() { CDialTimerTask dialTimerTd; dialTimerTd.DoModal(); } void CDevMngFrame::OnRemGD10TimerTdRun() { HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; // DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); if (!strSN.IsEmpty() && strSN.GetLength() < 12) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("远端SN序号错误")); else MessageBoxEx(NULL, _T("Remote SN serial number error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } DWORD dwDevID = atoi(strSN.Mid(2,9)); CDialTimerTaskMeasu dialTimerMeasu; dialTimerMeasu.SetDevID(dwDevID); dialTimerMeasu.DoModal(); AfxGetApp()->m_pMainWnd->SendMessage(WM_REFRESH, OP_TD_SYN, 0); } UINT32 CDevMngFrame::GetSelPlcID() { HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; // DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); if (NULL == hDevItem) { CString strLog; strLog.Format(_T("zm:CDevMngFrame::GetSelPlcID() NULL == hDevItem")); CFileOperTools::GetInstance()->WriteComLog(strLog); return 0; } CString strSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); if (strSN.GetLength() < 5) { CString strLog; strLog.Format(_T("zm:CDevMngFrame::GetSelPlcID() strSN(%s) length < 5"), strSN); CFileOperTools::GetInstance()->WriteComLog(strLog); //AfxMessageBox(_T("远端PLC序号错误")); return 0; } int iIndex = strSN.Find(_T("(")); if (iIndex<4) { //AfxMessageBox(_T("远端PLC名称错误")); //return 0; return atoi(strSN.Mid(3)); } return atoi(strSN.Mid(3, iIndex-3)); } void CDevMngFrame::OnRemPlcPowOn() { if (TRUE == m_bDevState) { if(LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("离线设备只能查询状态")); else MessageBoxEx(NULL, _T("Offline devices can only view status!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } m_uiDevID = g_dwDeviceSN; CString strLog; strLog.Format(_T("zm:开机 DevSN=%d \n"), m_uiDevID); OutputDebugString(strLog); UINT32 uiDevID = GetSelPlcID(); STRemPlcDataInfo stPlcDataInfo; memset(&stPlcDataInfo, 0, sizeof(STRemPlcDataInfo)); stPlcDataInfo.ucPacketIndex = 1; stPlcDataInfo.ucCtrlK3 = 1; stPlcDataInfo.ucCtrlK4 = 1; //1,2,5,6设置成2 stPlcDataInfo.ucCtrlK1 = 2; stPlcDataInfo.ucCtrlK2 = 2; stPlcDataInfo.ucCtrlK5 = 2; stPlcDataInfo.ucCtrlK6 = 2; /*STSendDataInfo stSendData; stSendData.pData = (char*)(&stPlcDataInfo); stSendData.wDataLen = sizeof(STRemPlcDataInfo); stSendData.uiDevID = uiDevID; stSendData.ucDstType = EN_DEV_PLC; m_ucDevType = EN_DEV_PLC; memset(m_chRevBuf, 0, sizeof(m_chRevBuf)); STRespDataInfo stRspData; stRspData.pData = m_chRevBuf; stRspData.pRecvLen = &m_iRcvLen; stRspData.iMaxRcvLen = MAX_RCV_CTRLBUF; stRspData.iTimeout = 20000;*/ //m_ucCmd = 1; /*if (false==theApp.m_NetWorkOper.TransferOper(m_ucCmd, &stSendData, true, &stRspData, CDevMngFrame::NotifyFunc,this)) { AfxMessageBox(_T("Send plc power on failed")); return; }*/ m_ucCmd = EN_CTRL_PLC_POWER_ON_OR_OFF;//暂时保存,修改接口后应该没什么用 m_ucDevType = EN_DEV_PLC;//暂时保存,修改接口后应该没什么用 STRequestPacket requestPacket; requestPacket.clsPacketBase.ucCmd = EN_CTRL_PLC_POWER_ON_OR_OFF; requestPacket.clsPacketBase.ucDevType = EN_DEV_PLC; requestPacket.clsPacketBase.uiDevID = uiDevID; requestPacket.iTimeout = 20000; requestPacket.hWnd = this->m_hWnd; requestPacket.wDataLen = sizeof(STRemPlcDataInfo); requestPacket.pData = new char[requestPacket.wDataLen]; if (requestPacket.pData == NULL) { return; } m_IsOffFlag = FALSE; memcpy(requestPacket.pData, (char*)(&stPlcDataInfo), requestPacket.wDataLen); theApp.m_NetWorkOper.PutRequestPacket(requestPacket); if (requestPacket.pData != NULL) { delete[] requestPacket.pData; requestPacket.pData = NULL; } } void CDevMngFrame::OnRemPlcPowOff() { if (TRUE == m_bDevState) { if(LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("离线设备只能查询状态")); else MessageBoxEx(NULL, _T("Offline devices can only view status!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } int nRet = 0; CString strTips; if (g_iUILanguage == LANG_ZHCN) { strTips.Format(_T("此操作会影响正在测试的任务,请确认服务端无正在测试的任务!\n是否继续?")); nRet = AfxMessageBox(strTips, MB_YESNO); } else { strTips.Format(_T("This operation will affect the tasks being tested. Please make sure there are no tasks being tested on the server! \ncontinue ?")); nRet = MessageBoxEx(NULL, strTips, STRING_MESSAGEBOXEX_TITLE, MB_YESNO, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } if (IDYES != nRet) return; m_uiDevID = g_dwDeviceSN; CString strLog; strLog.Format(_T("zm:关机 DevSN=%d \n"), m_uiDevID); OutputDebugString(strLog); UINT32 uiDevID = GetSelPlcID(); STRemPlcDataInfo stPlcDataInfo; memset(&stPlcDataInfo, 0, sizeof(STRemPlcDataInfo)); stPlcDataInfo.ucPacketIndex = 1; stPlcDataInfo.ucCtrlK3 = 0; stPlcDataInfo.ucCtrlK4 = 0; //1,2,5,6设置成2 stPlcDataInfo.ucCtrlK1 = 2; stPlcDataInfo.ucCtrlK2 = 2; stPlcDataInfo.ucCtrlK5 = 2; stPlcDataInfo.ucCtrlK6 = 2; /*STSendDataInfo stSendData; stSendData.pData = (char*)(&stPlcDataInfo); stSendData.wDataLen = sizeof(STRemPlcDataInfo); stSendData.uiDevID = uiDevID; stSendData.ucDstType = EN_DEV_PLC; memset(m_chRevBuf, 0, sizeof(m_chRevBuf)); STRespDataInfo stRspData; stRspData.pData = m_chRevBuf; stRspData.pRecvLen = &m_iRcvLen; stRspData.iMaxRcvLen = MAX_RCV_CTRLBUF; stRspData.iTimeout = 20000;*/ //m_ucCmd = 1; /*if (false==theApp.m_NetWorkOper.TransferOper(m_ucCmd, &stSendData, true, &stRspData, CDevMngFrame::NotifyFunc,this)) { AfxMessageBox(_T("Send plc power off failed")); return; }*/ //ok m_ucCmd = EN_CTRL_PLC_POWER_ON_OR_OFF;//暂时保存,修改接口后应该没什么用 m_ucDevType = EN_DEV_PLC;//暂时保存,修改接口后应该没什么用 STRequestPacket requestPacket; requestPacket.clsPacketBase.ucCmd = EN_CTRL_PLC_POWER_ON_OR_OFF; requestPacket.clsPacketBase.ucDevType = EN_DEV_PLC; requestPacket.clsPacketBase.uiDevID = uiDevID; requestPacket.iTimeout = 20000; requestPacket.hWnd = this->m_hWnd; requestPacket.wDataLen = sizeof(STRemPlcDataInfo); requestPacket.pData = new char[requestPacket.wDataLen]; if (requestPacket.pData == NULL) { return; } m_IsOffFlag = TRUE; memcpy(requestPacket.pData, (char*)(&stPlcDataInfo), requestPacket.wDataLen); theApp.m_NetWorkOper.PutRequestPacket(requestPacket); if (requestPacket.pData != NULL) { delete[] requestPacket.pData; requestPacket.pData = NULL; } } void CDevMngFrame::OnRemQueryPlcStatus() { if (EN_ON_LIEN_VERSION_1 == g_iOnLineVersion) { CDialDevStatusTimerShow dialPlcStatus; dialPlcStatus.DoModal(); } else { CDialQueryPLCStatus plcStatus; plcStatus.SetPLCID(GetSelPlcID()); plcStatus.DoModal(); } } void CDevMngFrame::OnRemMeasuTaskPacket() { HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; // DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = ((CNavDevView*)m_pNavDevView)->m_devTree.GetSelectedItem(); CString strSN = ((CNavDevView*)m_pNavDevView)->m_devTree.GetItemText(hDevItem); if (!strSN.IsEmpty() && strSN.GetLength() < 12) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("远端SN序号错误")); else MessageBoxEx(NULL, _T("Remote SN serial number error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } DWORD dwDevID = atoi(strSN.Mid(2,9)); CDialMeasuTaskPacket dialTaskPacket; dialTaskPacket.SetDevID(dwDevID); dialTaskPacket.DoModal(); AfxGetApp()->m_pMainWnd->SendMessage(WM_REFRESH, OP_TD_SYN, 0); } void CDevMngFrame::OnRemPlcSetting() { if (TRUE == m_bDevState) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("离线设备只能查看状态")); else MessageBoxEx(NULL, _T("Offline devices can only view status!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } CDialPlcStatusSetting dialPlcSet; dialPlcSet.SetTimerInterval(m_iPlcTimerInterval); if (dialPlcSet.DoModal() != IDOK) { return; } m_iPlcTimerInterval = dialPlcSet.GetTimerInterval(); CString strTimerInterval = ""; strTimerInterval.Format(_T("%d"), m_iPlcTimerInterval); WritePrivateProfileString("PLC_SET","TimeInterval",strTimerInterval, "./config.ini"); UINT32 uiDevID = GetSelPlcID(); STRemPlcDataInfo stPlcDataInfo; memset(&stPlcDataInfo, 0, sizeof(STRemPlcDataInfo)); stPlcDataInfo.ucPacketIndex = 1; stPlcDataInfo.uiAnaLogQua[0] = htonl(dialPlcSet.GetTimerInterval()); /*STSendDataInfo stSendData; stSendData.pData = (char*)(&stPlcDataInfo); stSendData.wDataLen = sizeof(STRemPlcDataInfo); stSendData.uiDevID = uiDevID; stSendData.ucDstType = EN_DEV_PLC; m_ucDevType = EN_DEV_PLC; memset(m_chRevBuf, 0, sizeof(m_chRevBuf)); STRespDataInfo stRspData; stRspData.pData = m_chRevBuf; stRspData.pRecvLen = &m_iRcvLen; stRspData.iMaxRcvLen = MAX_RCV_CTRLBUF; stRspData.iTimeout = 10000; m_ucCmd = 2; if (false==theApp.m_NetWorkOper.TransferOper(m_ucCmd, &stSendData, true, &stRspData, CDevMngFrame::NotifyFunc,this)) { AfxMessageBox(_T("Send plc status setting cmd failed")); return; }*/ m_ucCmd = EN_CTRL_SYN_DEV_PARAM;//暂时保存,修改接口后应该没什么用 m_ucDevType = EN_DEV_PLC;//暂时保存,修改接口后应该没什么用 STRequestPacket requestPacket; requestPacket.clsPacketBase.ucCmd = EN_CTRL_SYN_DEV_PARAM; requestPacket.clsPacketBase.ucDevType = EN_DEV_PLC; requestPacket.clsPacketBase.uiDevID = uiDevID; requestPacket.iTimeout = 20000; requestPacket.hWnd = this->m_hWnd; requestPacket.wDataLen = sizeof(STRemPlcDataInfo); requestPacket.pData = new char[requestPacket.wDataLen]; if (requestPacket.pData == NULL) { return; } memcpy(requestPacket.pData, (char*)(&stPlcDataInfo), requestPacket.wDataLen); theApp.m_NetWorkOper.PutRequestPacket(requestPacket); if (requestPacket.pData != NULL) { delete[] requestPacket.pData; requestPacket.pData = NULL; } } //DEL void CDevMngFrame::ShowDevParam(const STSynDevParam* pStSynDevParam) //DEL { //DEL CDialShowDevParam dialShowDebParam; //DEL dialShowDebParam.SetDevParam(pStSynDevParam); //DEL m_bIsPowerTfeqChg = false; //DEL if (IDOK ==dialShowDebParam.DoModal()) //DEL { //DEL STModifyDevParam stModifyParam; //DEL stModifyParam.iGrThreshold = htonl(dialShowDebParam.m_stDevParam.iGrThreshold); //DEL stModifyParam.ucBatteryAlarm = dialShowDebParam.m_stDevParam.ucBatteryAlarm; //DEL stModifyParam.ucCableType = dialShowDebParam.m_stDevParam.ucCableType; //DEL stModifyParam.ucPowerFreq = dialShowDebParam.m_stDevParam.ucPowerFreq; //DEL stModifyParam.ucStacking = dialShowDebParam.m_stDevParam.ucStacking; //DEL m_bIsPowerTfeqChg = (pStSynDevParam->ucPowerFreq == stModifyParam.ucPowerFreq) ? false : true; //DEL //DEL STSendDataInfo stSendData; //DEL stSendData.pData = (char*)(&stModifyParam); //DEL stSendData.wDataLen = sizeof(stModifyParam); //DEL stSendData.uiDevID = m_uiDevID; //DEL stSendData.ucDstType = EN_DEV_GD10; //DEL memset(m_chRevBuf, 0, sizeof(m_chRevBuf)); //DEL //DEL STRespDataInfo stRspData; //DEL stRspData.pData = m_chRevBuf; //DEL stRspData.pRecvLen = &m_iRcvLen; //DEL stRspData.iMaxRcvLen = MAX_RCV_CTRLBUF; //DEL stRspData.iTimeout = 6000; //DEL m_ucCmd = EN_CTRL_SET_DEV_PARAM; //DEL m_ucDevType = EN_DEV_GD10; //DEL m_ucCableType = dialShowDebParam.m_stDevParam.ucCableType; //DEL if (false==theApp.m_NetWorkOper.TransferOper(m_ucCmd, &stSendData, true, &stRspData, CDevMngFrame::NotifyFunc,this)) //DEL { //DEL AfxMessageBox(_T("Send synchronization set msg failed")); //DEL return; //DEL } //DEL //DEL //DEL } //DEL //DEL //DEL /* //DEL if (!theApp.m_NetWorkOper.SendCtrlMsgDirect(EN_CTRL_SET_DEV_PARAM, dwDevID,EN_DEV_GD10,(char*)(&stModifyParam), sizeof(stModifyParam))) //DEL { //DEL AfxMessageBox(_T("设置参数信息失败")); //DEL return; //DEL } //DEL iRecvLen = 0; //DEL memset(chData, 0, sizeof(chData)); //DEL if (EN_RECV_SUCCESS != theApp.m_NetWorkOper.RecvMsgDirect(chData, &iRecvLen, 100, 6000)) //DEL { //DEL AfxMessageBox(_T("接收数据失败")); //DEL return; //DEL } //DEL CString strErr = _T(""); //DEL if (2 != iRecvLen) //DEL { //DEL strErr.Format(_T("数据响应长度(%d)错误"),iRecvLen); //DEL AfxMessageBox(strErr); //DEL return; //DEL } //DEL WORD wRes = *((WORD*)chData); //DEL wRes = ntohs(wRes); //DEL if (0 == wRes) //DEL { //DEL strErr.Empty(); //DEL if (bIsPowerTfeqChg) //DEL strErr = _T("\r\n但由于修改了工业频率, 请重启主机设备"); //DEL AfxMessageBox(_T("参数设置成功")+strErr); //DEL theApp.m_iCableType = //DEL } //DEL else //DEL { //DEL strErr.Empty(); //DEL strErr.Format(_T("参数设置错误,返回错误码= %d"),wRes); //DEL AfxMessageBox(strErr); //DEL return; //DEL } //DEL } //DEL */ //DEL } // void CDevMngFrame::NotifyFunc(LPARAM lMsgType, LPARAM lResStatus,LPVOID lpParam) // { // CDevMngFrame* pDevManage = (CDevMngFrame*)lpParam; // CString strInfo; // if (pDevManage->m_ucDevType == EN_DEV_GD10) // { // if (pDevManage->m_ucCmd == EN_CTRL_SYN_DEV_PARAM) // { // if (lResStatus != EN_RECV_SUCCESS) // { // strInfo.Format(_T("recv response data failed.error(%d,%d,%d)"),lMsgType,lResStatus,pDevManage->m_ucCmd); // AfxMessageBox(strInfo); // return; // } // // STSynDevParam* pStSynDevParam = (STSynDevParam*)(pDevManage->m_chRevBuf); // theApp.m_pDevManager->UpdateDevInfo(*pStSynDevParam, EN_DEV_GD10); // pDevManage->PostMessage(WM_SHOW_DEV_PARAM, 0, (LPARAM)pStSynDevParam); // } // else if (pDevManage->m_ucCmd == EN_CTRL_SET_DEV_PARAM) // { // if (lResStatus != EN_RECV_SUCCESS) // { // strInfo.Format(_T("recv response data failed.error(%d,%d,%d)"),lMsgType,lResStatus,pDevManage->m_ucCmd); // AfxMessageBox(strInfo); // return; // } // if (pDevManage->m_iRcvLen < 1) // { // strInfo.Empty(); // strInfo.Format(_T("The length of set synchronization error.actually_len=%d,should=2"),pDevManage->m_iRcvLen); // AfxMessageBox(strInfo); // return; // } // WORD wRes = *((WORD*)(pDevManage->m_chRevBuf)); // wRes = ntohs(wRes); // if (0 == wRes) // { // strInfo.Empty(); // if (LANG_ZHCN == g_iUILanguage) // { // if (pDevManage->m_bIsPowerTfeqChg) // strInfo = _T("\r\n但由于修改了工业频率, 请重启主机设备"); // AfxMessageBox(_T("参数设置成功")+strInfo); // } // else // { // if (pDevManage->m_bIsPowerTfeqChg) // strInfo = _T("\r\npower frequency changed,please restart the mainframe"); // AfxMessageBox(_T("Parameter has been setted up successfully")+strInfo); // } // // theApp.m_iCableType = pDevManage->m_ucCableType; // // //GD设置参数成功后,将参数传递给云端 // pDevManage->UploadDevinfoToSev(pDevManage->m_stSynDevParam); // } // else // { // strInfo.Empty(); // strInfo.Format(_T("set device paramter error,error_code=%d"),wRes); // AfxMessageBox(strInfo); // return; // } // } // else // { // strInfo.Empty(); // strInfo.Format(_T("Unknow cmd(%d) in GD10 device."),pDevManage->m_ucCmd); // AfxMessageBox(strInfo); // return; // } // } // else if (EN_DEV_PLC == pDevManage->m_ucDevType) // { // if (lResStatus != EN_RECV_SUCCESS) // { // if (EN_RECV_TIMEOUT == lResStatus) // { // strInfo.Format(_T("The operation timed out, please try again later")); // } // else // { // strInfo.Format(_T("recv plc response data failed.error(%d,%d,%d)"), lMsgType, lResStatus, 0); // } // AfxMessageBox(strInfo); // return; // } // if (pDevManage->m_iRcvLen != sizeof(STRemPlcDataInfo)) // { // AfxMessageBox(_T("长度校验失败")); // return; // } // STRemPlcDataInfo* pPlcInfo = (STRemPlcDataInfo*)(pDevManage->m_chRevBuf); // if ( 1== pPlcInfo->ucResult ) // { // if (2 == pDevManage->m_ucCmd) // { // CDialPlcStatusShow dialStatusShow; // dialStatusShow.SetRemPlcData(pPlcInfo); // dialStatusShow.DoModal(); // } // else // { // if (LANG_ZHCN == g_iUILanguage) // AfxMessageBox(_T("操作成功")); // else // AfxMessageBox("Operation success"); // } // } // else // { // if (LANG_ZHCN == g_iUILanguage) // AfxMessageBox(_T("操作失败")); // else // AfxMessageBox("Operation failed"); // } // } // else // { // strInfo.Empty(); // strInfo.Format(_T("Unknow device type(%d)."),pDevManage->m_ucDevType); // AfxMessageBox(strInfo); // } // // } //DEL void CDevMngFrame::NotifyFunc(LPVOID lParam, LPARAM rParam, LPVOID pWnd) //DEL { //DEL //DEL CDevMngFrame* pDevManage = (CDevMngFrame*)pWnd; //DEL LPSTCTRLCMDINFO pCtrlCmdInfo = NULL; //DEL char* pData=((LPSTCTRLCMDINFO)lParam)->pData; //DEL int iLen = ((LPSTCTRLCMDINFO)lParam)->iDataLen; //DEL if (EN_FORCE_LOGIN == rParam) //DEL { //DEL if (!theApp.m_NetWorkOper.SendCtrlMsgDirect(EN_CTRL_USER_LOGIN, 0xFFFFFFFF, 1, (char*)(&theApp.m_uiUserID), sizeof(UINT32))) //DEL { //DEL AfxMessageBox(_T("user login information send failed")); //DEL return ; //DEL } //DEL //DEL char chMsg[200] = {0}; //DEL int ilen = 0; //DEL if (EN_RECV_SUCCESS == theApp.m_NetWorkOper.RecvMsgDirect(chMsg, &ilen, 200, 4000)) //DEL { //DEL short usDevNum = ntohs(*((short*)chMsg)); //DEL if (ilen != (2+usDevNum*sizeof(STSigRemoteDev))) //DEL { //DEL CString strErr = _T(""); //DEL strErr.Format(_T("recv device number error.total_len = %d, device_number = %d"), ilen, usDevNum); //DEL AfxMessageBox(strErr); //DEL return ; //DEL } //DEL STSigRemoteDev stRemDev; //DEL for (int i = 0; i < usDevNum; i++) //DEL { //DEL memcpy(&stRemDev,chMsg+2+i*sizeof(STSigRemoteDev), sizeof(STSigRemoteDev)); //DEL stRemDev.uiDevID = ntohl(stRemDev.uiDevID); //DEL theApp.m_pDevManager->AddRemoteDevice(stRemDev); //DEL } //DEL pDevManage->OnRefreshNavDevice(NULL, NULL); //DEL } //DEL } //DEL else if (EN_DEV_ONLINE == rParam) //DEL { //DEL WORD wNum = ntohs(*(WORD*)pData); //DEL if (iLen != (2 + wNum*sizeof(STSigRemoteDev))) //DEL { //DEL CString strErr; //DEL strErr.Format(_T("新增设备长度信息错误,本该(%d),实际(%d)"),1 + wNum*sizeof(STSigRemoteDev),iLen); //DEL AfxMessageBox(strErr); //DEL return; //DEL } //DEL STSigRemoteDev* pRemDev = NULL; //DEL for (int i=0; i < wNum; i++) //DEL { //DEL pRemDev = (STSigRemoteDev*)(pData+2+i*sizeof(STSigRemoteDev)); //DEL theApp.m_pDevManager->AddRemoteDevice(*pRemDev); //DEL } //DEL pDevManage->OnRefreshNavDevice(NULL, NULL); //DEL } //DEL else //DEL { //DEL CString strErr = _T(""); //DEL strErr.Format(_T("Unknow cmd(%d) in ctr_cmd"),rParam); //DEL AfxMessageBox(strErr); //DEL //DEL } //DEL //DEL //DEL } LRESULT CDevMngFrame::PreNetResponse(WPARAM wParam, LPARAM lParam) { LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam; if (pResponsePacket == NULL) { return FALSE; } CString strLog; if (wParam != EN_RECV_SUCCESS)//返回0,操作成功 { if (EN_RECV_TIMEOUT == wParam) { if (g_iUILanguage == LANG_ZHCN) AfxMessageBox(_T("操作超时,请稍后重试")); else MessageBoxEx(NULL, _T("The operation timed out, please try again later"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } else { if (g_iUILanguage == LANG_ZHCN) { strLog.Format(_T("接收响应报错,错误码(%d)"), wParam); AfxMessageBox(strLog); } else { strLog.Format(_T("Received response error, error code(%d)"), wParam); MessageBoxEx(NULL, strLog, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } } return 0; } switch (pResponsePacket->clsPacketBase.ucCmd) { case EN_UPLOAD_DEV_INF: { BYTE ucReplayFlg = (BYTE)(pResponsePacket->pData[0]); if (pResponsePacket->wDataLen < 1) { theApp.m_NetWorkOper.SetSuspendForThread(false); if (g_iUILanguage == LANG_ZHCN) { AfxMessageBox(_T("上传设备信息失败")); } else { MessageBoxEx(NULL, _T("Upload device information failed"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return FALSE; } if (ucReplayFlg == 3) { if (g_iUILanguage == LANG_ZHCN) { AfxMessageBox(_T("有任务正在运行,不能上传设备参数")); } else { MessageBoxEx(NULL, _T("A task is running and cannot upload device parameters"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } } } break; case EN_CTRL_PLC_POWER_ON_OR_OFF: { if (pResponsePacket->wDataLen != sizeof(STRemPlcDataInfo)) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("长度校验失败")); else MessageBoxEx(NULL, _T("Length check failed"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return 0; } STRemPlcDataInfo* pPlcInfo = (STRemPlcDataInfo*)(pResponsePacket->pData); if (pPlcInfo == NULL) { return 0; } if (1 == pPlcInfo->ucResult) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("操作成功")); else MessageBoxEx(NULL, _T("Operation success"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); CString strLog; strLog.Format(_T("zm:开关机m_uiDevID=%d\n"), m_uiDevID); OutputDebugString(strLog); if (m_uiDevID > 0) { CString strLog; CString strDevSN; strDevSN.Format(_T("SN%d"), m_uiDevID); STSigRemoteDev stRemoteDev; stRemoteDev.ucDevType = EN_DEV_GD10; stRemoteDev.uiDevID = m_uiDevID; if (m_IsOffFlag)//关机 { strLog.Format(_T("zm:设备列表移除设备CDevMngFrame::PreNetResponse 关机 SN=%u"), stRemoteDev.uiDevID); CFileOperTools::GetInstance()->WriteComLog(strLog); theApp.m_pDevManager->DeleteRemoteDevice(stRemoteDev); theApp.m_pDevManager->AddOfflineObjInMem(strDevSN); } else//开机 { strLog.Format(_T("zm:设备列表添加设备CDevMngFrame::PreNetResponse 开机 SN=%u"), stRemoteDev.uiDevID); CFileOperTools::GetInstance()->WriteComLog(strLog); theApp.m_pDevManager->AddRemoteDevice(stRemoteDev); theApp.m_pDevManager->DeleteObjInMem(strDevSN); } RefreshNavDevice(NULL, NULL); } } else if (pPlcInfo->ucResult == FAILED_OPERATOR_GD_OFF) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("操作失败")); else MessageBoxEx(NULL, _T("Operation failed"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } } break; case EN_CTRL_SYN_DEV_PARAM://PLC { switch (m_ucDevType) { case EN_DEV_PLC: { if (pResponsePacket->wDataLen != sizeof(STRemPlcDataInfo)) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("长度校验失败")); else MessageBoxEx(NULL, _T("Length check failed"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return 0; } STRemPlcDataInfo* pPlcInfo = (STRemPlcDataInfo*)(pResponsePacket->pData); if (pPlcInfo == NULL || 1 != pPlcInfo->ucResult) { return 0; } CDialPlcStatusShow dialStatusShow; dialStatusShow.SetRemPlcData(pPlcInfo); dialStatusShow.DoModal(); } break; case EN_DEV_GD10: { if (pResponsePacket->wDataLen != sizeof(STSynDevParam)) { CFileOperTools::GetInstance()->WriteComLog(_T("zm:CDevMngFrame::OnRemGD10SynParam() recv device syn length error************")); if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("长度校验失败")); else MessageBoxEx(NULL, _T("Length check failed"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return 0; } memcpy(&m_stSynDevParam, (STSynDevParam*)(pResponsePacket->pData), sizeof(STSynDevParam)); theApp.m_pDevManager->UpdateDevInfo(m_stSynDevParam, EN_DEV_GD10); CString strLog; strLog.Format(_T("zm:recv GD setting GD args info:ID=%u,iGrThreshold=%d,ucPowerFreq=%d,ucBatteryAlarm=%d,ucCableType=%d,ucStacking=%d,ucChannelNum=%d,ucDownLoadNum=%d,fTemperature=%f,fBatteryVol=%f"), m_stSynDevParam.uiMachineID, m_stSynDevParam.iGrThreshold, m_stSynDevParam.ucPowerFreq, m_stSynDevParam.ucBatteryAlarm, m_stSynDevParam.ucCableType, m_stSynDevParam.ucStacking, m_stSynDevParam.ucChannelNum, m_stSynDevParam.ucDownLoadNum, m_stSynDevParam.fTemperature, m_stSynDevParam.fBatteryVol); CFileOperTools::GetInstance()->WriteComLog(strLog); float f = m_stSynDevParam.fBatteryVol; float fT = m_stSynDevParam.fTemperature; unsigned char *p, *pT, p0, pT0, p1, pT1; p = (unsigned char *)&f; p0 = p[0]; p1 = p[1]; p[0] = p[3]; p[3] = p0; p[1] = p[2]; p[2] = p1; pT = (unsigned char*)&fT; pT0 = pT[0]; pT1 = pT[1]; pT[0] = pT[3]; pT[3] = pT0; pT[1] = pT[2]; pT[2] = pT1; strLog.Format(_T("zm:recv GD m_stSynDevParam.fTemperature=%0x %0x %0x %0x m_stSynDevParam.fBatteryVol= %0x %0x %0x %0x"), pT[3], pT[2], pT[1], pT[0], p[3], p[2], p[1], p[0]); CFileOperTools::GetInstance()->WriteComLog(strLog); PostMessage(WM_SHOW_DEV_PARAM, 0, (LPARAM)&m_stSynDevParam); } break; default: break; } } break; case EN_CTRL_SET_DEV_PARAM: { if (pResponsePacket->wDataLen < 1) { return 0; } WORD wRes = *((WORD*)(pResponsePacket->pData)); wRes = ntohs(wRes); if (0 == wRes) { if (LANG_ZHCN == g_iUILanguage) { if (m_bIsPowerTfeqChg) strLog = _T("\r\n但由于修改了工业频率, 请重启主机设备"); AfxMessageBox(_T("参数设置成功") + strLog); } else { if (m_bIsPowerTfeqChg) strLog = _T("\r\npower frequency changed,please restart the mainframe"); MessageBoxEx(NULL, _T("Parameters setted successfully") + strLog, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } theApp.m_iCableType = m_ucCableType; //GD设置参数成功后,将参数传递给云端 UploadDevinfoToSev(m_stSynDevParam); } else { if (LANG_ZHCN == g_iUILanguage) { strLog.Format(_T("设置设备参数错误,错误码%d"), wRes); AfxMessageBox(strLog); } else { strLog.Format(_T("Set device paramter error,error_code=%d"), wRes); MessageBoxEx(NULL, strLog, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return 0; } } break; default: { if (m_ucDevType == EN_DEV_GD10) { CString strInfo; if (LANG_ZHCN == g_iUILanguage) { strInfo.Format(_T("GD10设备的未知命令%d"), m_ucCmd); AfxMessageBox(strInfo); } else { strInfo.Format(_T("Unknow cmd(%d) in GD10 device."), m_ucCmd); MessageBoxEx(NULL, strInfo, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } } } break; } return TRUE; }