Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

1806 lines
58 KiB
C++

// 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<CView*>(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<CView*>(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<CView*>(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<CView*>(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<CView*>(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<CView*>(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;
}