📄 monitor.cpp
字号:
return 0;
}
// 起动告警查询线程
//必须在起动监测线程后再起动询问线程
BOOL CMonitor::StartAsking(int iSecond)
{
ResetEvent(m_hEventArray[0]);
ResetEvent(m_hEventArray[1]);
ResetEvent(m_hEventArray[2]);
SetEvent(m_hEventArray[2]);
m_pThread = AfxBeginThread(SendThd,(LPVOID)this);
if (m_pThread != NULL)
return m_AskingStatus = TRUE;
else
return m_AskingStatus = FALSE;
}
void CMonitor::OnSetFocus(CWnd* /*pOldWnd*/)
{
// 将焦点前移到视图窗口
//m_wndView.SetFocus();
}
void CMonitor::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
//CRect rctMain,rctBar,rctStatus;
//m_wndToolBar.GetWindowRect(rctBar);
//m_wndStatusBar.GetWindowRect(rctStatus);
//ScreenToClient(rctBar);
//GetWindowRect(rctMain);
//ScreenToClient(rctMain);
//ScreenToClient(rctStatus);
//rctMain.top = rctBar.bottom;
//rctMain.bottom = rctStatus.top;
//
//m_wndView.MoveWindow(rctMain);
// TODO: 在此处添加消息处理程序代码
}
void CMonitor::OnCmStart()
{
// TODO: 在此添加命令处理程序代码
BOOL blResult = this->StartMonitoring();
if (blResult)
this->StartAsking(0);
}
void CMonitor::OnCmStop()
{
// TODO: 在此添加命令处理程序代码
this->StopMonitoring();
}
void CMonitor::OnAppExit()
{
PostQuitMessage(0);
// TODO: 在此添加命令处理程序代码
}
//设备状态改变
LRESULT CMonitor::onStatusChange(WPARAM wParam, LPARAM lParam)
{
//处理告警或消警状态变化
CEquipmentPort *port = (CEquipmentPort *)wParam;
CString strSQL,strTable,strTip ; //SQL语句
_variant_t var;
_RecordsetPtr pRsPtr ;
int iResult = 0 ;
CString sSql;
CString strSpotSort;
int iSVDID;
CString sFile;
pRsPtr.CreateInstance(__uuidof(Recordset));
/****************************************************************************
保存告警信息
****************************************************************************/
if (port->AlarmState != PORT_NORMAL ) //告警
{
//取得被监测设备资料ID及序号
if(pRsPtr->State == 1 )
pRsPtr->Close();
strSQL.Format("Select SVDID,SVSpotSort From CMTSVModulePort Where SVMID = %d and SVMPSort = %d",port->SVMID,port->SVMPSort);
iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
if (iResult == 0)
{
p_adodb->GetFieldValue("SVDID",pRsPtr,iSVDID);
p_adodb->GetFieldValue("SVSpotSort",pRsPtr,strSpotSort);
pRsPtr->Close();
}
/****************************************************
存入告警信息资料
*****************************************************/
if (port->AlarmLevel > 1)
{
strSQL.Format("Select top 1 * From CMTAlarmInfo Where SVMAddrCode = '%s' and SVMPSort = %d Order By AStartTime Desc",port->CodeAddr,port->SVMPSort);
int iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
if(iResult == 0)
{
if (!pRsPtr->adoEOF)
{
pRsPtr->PutCollect(_variant_t("AEndTime"),_variant_t(_bstr_t(port->tmUpdateTime.Format(_T("%Y-%m-%d %H:%M:%S")))));
pRsPtr->PutCollect(_variant_t("AlarmLevel"),_variant_t(_bstr_t(port->AlarmLevel)));
pRsPtr->UpdateBatch(adAffectCurrent);
pRsPtr->Close();
}else
pRsPtr->Close();
}
}else
{
strSQL.Format("Insert into CMTAlarmInfo(SVMPSort,SVMAddrCode,SVDID,SVSpotSort,AlarmLevel,AStartTime,AlarmNote,AlarmState,AlarmValue,SVMID) \
values(%d,'%s',%d,'%s',%d,'%s','%s',%d,%f,%d)",port->SVMPSort,port->CodeAddr,iSVDID,strSpotSort,1,port->tmStartTime.Format(_T("%Y-%m-%d %H:%M:%S")), \
port->SourceAddr,port->AlarmState,port->value,port->SVMID);
iResult = p_adodb->ExecuteSQL(strSQL);
}
if (theApp.m_Baseinfo.PlaySound == 1)
{
m_pMedia.SetVoice(port->CodeAddr,port->SVMPSort,m_hWnd);
m_pMedia.AlarmVoice();
}
}else //销警
{
strSQL.Format("Select top 1 * From CMTAlarmInfo Where SVMAddrCode = '%s' and SVMPSort = %d Order By AStartTime Desc",port->CodeAddr,port->SVMPSort);
int iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
if(iResult == 0)
{
if (!pRsPtr->adoEOF)
{
pRsPtr->PutCollect(_variant_t("AEndTime"),_variant_t(_bstr_t(port->tmUpdateTime.Format(_T("%Y-%m-%d %H:%M:%S")))));
pRsPtr->PutCollect(_variant_t("AlarmState"),_variant_t(3));
pRsPtr->PutCollect(_variant_t("AlarmLevel"),_variant_t(_bstr_t(port->AlarmLevel)));
pRsPtr->UpdateBatch(adAffectCurrent);
pRsPtr->Close();
}else
pRsPtr->Close();
}
//if (theApp.m_Baseinfo.PlaySound == 1)
//{
// m_pMedia.SetVoice(port->CodeAddr,port->SVMPSort,m_hWnd);
// m_pMedia.AlarmVoice();
//}
}
::SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STATUS_CHANGE,wParam,0);
//播放告警声音
//m_pMedia.Open("wav\\CMFWMDF.wav",this->m_hWnd);
//生成告警文本信息
/****************************************************************************
发出告警短信息
****************************************************************************/
//取得告警信息的发送对象
//发送告警信息
if (theApp.m_Baseinfo.SMSOpen)
SendAlarmInfo(port);
//BOOL bDail= TRUE;
//if (bDail)
//{
// //拨打电话
// m_Gsm->Dail("13502885226");
//}
return LRESULT();
}
//设备发生告警
LRESULT CMonitor::onAlarming(WPARAM wParam, LPARAM lParam)
{
//接收告警信息
return LRESULT();
}
//读取设备实时采集数据
LRESULT CMonitor::onReadData(WPARAM wParam, LPARAM lParam)
{
//接收经过分析后的数据
return LRESULT();
}
// 初始化监测设备端口状态
int CMonitor::IniEquipPort()
{
CString strSQL,strTable,strTip ; //SQL语句
_variant_t var;
_RecordsetPtr pRsPtr ;
CEquipmentPort *m_eport;
CString strValue ; //存放返回字值
int iValue = 0; //存放返回字值
double dValue = 0; //存放返回字值
strValue.Empty();
m_EquipState.RemoveAll();
pRsPtr.CreateInstance(__uuidof(Recordset));
strTable = "VW_ModulePort" ; //监测模块表
strSQL.Format("SELECT * FROM %s Order By SVMID,SVMPSort",strTable) ;
int iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
if (iResult == 0 )
{
while (!pRsPtr->adoEOF )
{
m_eport = new CEquipmentPort;
m_eport->AlarmState = PORT_NORMAL;
m_eport->tmStartTime = m_eport->tmUpdateTime = CTime::GetCurrentTime();
m_eport->AlarmLevel = 0;
p_adodb->GetFieldValue("SVMPID",pRsPtr,iValue);
m_eport->SVMPID = iValue;
p_adodb->GetFieldValue("SVMPSort",pRsPtr,iValue);
m_eport->SVMPSort =iValue;
p_adodb->GetFieldValue("SVMID",pRsPtr,iValue);
m_eport->SVMID = iValue;
p_adodb->GetFieldValue("SVMTNUM",pRsPtr,strValue);
m_eport->SVMTNUM = strValue;
p_adodb->GetFieldValue("SVMTNUM",pRsPtr,strValue);
m_eport->value = 0;
p_adodb->GetFieldValue("SVMAddrCode",pRsPtr,strValue);
m_eport->CodeAddr = strValue ;
p_adodb->GetFieldValue("SVMAddrSource",pRsPtr,strValue);
m_eport->SourceAddr = strValue;
p_adodb->GetFieldValue("SVMTrueName",pRsPtr,strValue);
m_eport->SVMTrueName = strValue;
m_EquipState.Add(*m_eport);
pRsPtr->MoveNext();
}
pRsPtr->Close();
}
return 0;
}
// WEB接收数据包分析
int CMonitor::WebDataAnalyse(CInfoFrame frame)
{
CPtcWEB *m_ptcWeb;
CString strAnwser,strIP,strTip,strTemp;
SockAddrIn sockAddr;
int iResult = 0;
try
{
if ((frame.addrType != 0))
{
m_ptcWeb = new CPtcWEB();
iResult = m_ptcWeb->Analyse(frame,strAnwser);
if (iResult == 0 && strAnwser.GetLength() >0)
{
strIP = frame.address;
//strTemp.Format("%d",theApp.m_Baseinfo.WebPort);
//sockAddr.CreateFrom(strIP.GetBuffer(),strTemp.GetBuffer());
m_udpServer[0]->SendTo(strAnwser,strIP,theApp.m_Baseinfo.WebPort);
//m_udpServer[0]->WriteTo(strAnwser.GetBuffer(),strAnwser.GetLength(),sockAddr);
TRACE0(strAnwser);
}
else
TRACE0("结果分析错误...");
delete m_ptcWeb;
return(0);
}else
return(-1);
}
catch(_com_error e)
{
strTip.Format("与WEB通信发生错误:%d:%s",e.Error,e.Description);
theApp.WriteTxtLog(strTip);
}
return 0;
}
// 初始化短信组件
BOOL CMonitor::IniGsmInfo(void)
{
BOOL bResult = FALSE;
m_Gsm = new CGsmComm();
bResult = m_Gsm->InitGSM(theApp.m_Baseinfo.GSMPort);
if (!bResult)
{
theApp.WriteTxtLog(_T("GSM MODEM起动失败..."));
theApp.m_Baseinfo.SMSOpen = FALSE;
theApp.m_Baseinfo.VoiceOpen = FALSE;
return FALSE;
}
bResult = m_Gsm->SetServiceNum(theApp.m_Baseinfo.SMSCenter);
if(bResult)
{
theApp.WriteTxtLog(_T("GSM MODEM起动..."));
theApp.m_Baseinfo.SMSOpen = TRUE;
}else
{
theApp.WriteTxtLog(_T("GSM MODEM起动失败..."));
theApp.m_Baseinfo.SMSOpen = FALSE;
theApp.m_Baseinfo.VoiceOpen = FALSE;
}
return bResult;
}
// 送出告警信息
int CMonitor::SendAlarmInfo(CEquipmentPort *m_ptAlarm)
{
//取得要发送的人员
BOOL bResult;
_variant_t var;
_RecordsetPtr pRsPtr ;
int iContainID,iValue;
CString strValue,strValue1;
CString strName,strSQL,strTip,strPhone,strSend,strTable,strMsg;
strName = "Manager";
strSend = "Send";
iContainID = 0;
iValue = 0;
try{
if (m_ptAlarm)
{
pRsPtr.CreateInstance(__uuidof(Recordset));
strTable = "VW_ModulePortNote" ; //各监测端口说明
strSQL.Format("SELECT * FROM %s Where SVMID = %d And SVMPID = %d",strTable,m_ptAlarm->SVMID,m_ptAlarm->SVMPID) ;
int iResult = p_adodb->ReadDB(strSQL,pRsPtr,strTip);
if (iResult == 0 )
{
if (!pRsPtr->adoEOF )
{
strValue.Empty();
strValue1.Empty();
iContainID = 0;
p_adodb->GetFieldValue("ContainID",pRsPtr,iContainID);
p_adodb->GetFieldValue("SVDTrueName",pRsPtr,strValue);
p_adodb->GetFieldValue("SVSpotNote",pRsPtr,strValue1);
if (strValue.GetLength() >0 && strValue1.GetLength())
{
strMsg.Format("%s设备%s列发生了%d级告警,请检查...",strValue,strValue1,m_ptAlarm->AlarmLevel);
}else
{
p_adodb->GetFieldValue("SVMTrueName",pRsPtr,strValue);
p_adodb->GetFieldValue("SVMPMemo",pRsPtr,strValue1);
if (strValue1.GetLength() <=0)
{
p_adodb->GetFieldValue("SVMPSort",pRsPtr,iValue);
strValue1.Format("%d",iValue);
}
if (strValue.GetLength() >0 && strValue1.GetLength())
{
if (m_ptAlarm->AlarmState == PORT_WARNING)
strMsg.Format("%s设备%s列发生了%d级告警,请检查...",strValue,strValue1,m_ptAlarm->AlarmLevel);
else if (m_ptAlarm->AlarmState == PORT_NORMAL)
strMsg.Format("%s设备%s列发生了%d级告警,请检查...",strValue,strValue1,m_ptAlarm->AlarmLevel);
}
}
}
pRsPtr->Close();
}
if (pRsPtr->State == 1)
pRsPtr->Close();
if (iContainID > 0 )
{
strTable = "VW_USER_ROOM" ; //各监测端口说明
strSQL.Format("SELECT * FROM %s Where AlarmFlag = 1 and ContainID = %d",strTable,iContainID) ;
if (p_adodb->ReadDB(strSQL,pRsPtr,strTip) == 0)
{
while (!pRsPtr->adoEOF )
{
p_adodb->GetFieldValue("TrueName",pRsPtr,strValue);
p_adodb->GetFieldValue("Mobile",pRsPtr,strValue1);
if (strValue1.GetLength() > 0)
{
if (strMsg.GetLength() == 0)
{
strMsg = "设备发生了告警,请维护人员详细检查...";
}
bResult = m_Gsm->GsmAddMsg(strMsg,strValue1,strValue,NULL,0);
if (theApp.m_Baseinfo.SaveLog == 1)
{
if(bResult)
strTip.Format("发送短信给%s人:%s",strValue,strValue1);
else
strTip.Format("发送短信失败[%s:%s]",strValue,strValue1);
p_adodb->WriteLog(strTip);
}
}
pRsPtr->MoveNext();
}
pRsPtr->Close();
}
}
}
return 0;
}
catch (_com_error e)
{
strTip.Format("发送短信出现错误:%d:%s",e.Error,e.Description);
theApp.WriteTxtLog(strTip);
return -1;
}
}
LRESULT CMonitor::onSendSMSInfo(WPARAM wParam, LPARAM lParam)
{
//Send message to mobile phone
CString strNo,strMsg,strTip;
strNo = (LPCTSTR)wParam;
strMsg = (LPCTSTR)lParam;
if (strNo.Compare("00") != 0 )
{
int iResult = m_Gsm->GsmAddMsg(strMsg,strNo,_T("远程短信"),NULL,1);
if (iResult == 0 )
{
//CString strTip;
strTip = "SM|00";
m_udpServer[0]->SendTo(strTip,theApp.m_Baseinfo.WebIP,theApp.m_Baseinfo.WebPort);
}else
{
strTip = "SM|FF|GSM BUSY";
m_udpServer[0]->SendTo(strTip,theApp.m_Baseinfo.WebIP,theApp.m_Baseinfo.WebPort);
}
}else
{
m_udpServer[0]->SendTo(strMsg,theApp.m_Baseinfo.WebIP,theApp.m_Baseinfo.WebPort);
}
return LRESULT();
}
// 关闭GSMMODEM
BOOL CMonitor::ClsoeGSM(void)
{
try
{
m_Gsm->bExitRead = TRUE;
m_Gsm->CloseGsm();
delete m_Gsm;
return TRUE;
}
catch(_com_error e)
{
return FALSE;
}
}
//打开音频播放器
//##ModelId=44B6F8850149
LRESULT CMonitor::onSoundOpen(UINT wParam, LONG lParam)
{
TRACE0("程序:调用 CMDFDlg::OnMM_WOM_OPEN()") ;
m_pMedia.OnOpen();
return 0;
}
//结束音频播放器
//##ModelId=44B6F885014D
LRESULT CMonitor::onSoundDone(UINT wParam, LONG lParam)
{
TRACE0("程序:调用 CMDFDlg::OnMM_WOM_DONE()") ;
m_pMedia.OnClose();
return 0;
}
//关闭音频播放器
//##ModelId=44B6F885015A
LRESULT CMonitor::onSoundClose(UINT wParam, LONG lParam)
{
TRACE0("程序:调用 CMDFDlg::OnMM_WOM_CLOSE()") ;
m_pMedia.Free() ;
return 0; //theApp.
}
//##ModelId=44B6F8850168
LRESULT CMonitor::GsmVoice(WPARAM wParam,LPARAM lParam)
{
TRACE0("程序:调用 CMDFDlg::GsmVoice()") ;
m_pMedia.AlarmVoice();
return 0;
}
//##ModelId=44B6F885016C
LRESULT CMonitor::GsmVoiceClose(WPARAM wParam,LPARAM lParam)
{
TRACE0("程序:调用 CMDFDlg::GsmVoiceClose()") ;
//if (m_pMedia.m_bPlay)
//{
m_pMedia.CloseVoice();
//}
return 0;
}
void CMonitor::OnCmSound()
{
// TODO: 在此添加命令处理程序代码
CString strTip;
strTip = "33962181";
m_Gsm->Dail(strTip);
//m_pMedia.SetVoice(_T("1"),1,m_hWnd);
//m_pMedia.AlarmVoice();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -