⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remotemonitorview.cpp

📁 电缆故障监控系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}

void CRemotemonitorView::OnSelect() 
{
	// TODO: Add your command handler code here
	m_nCurTool=ID_SELECT;
	HCURSOR hCursor;
    hCursor=AfxGetApp()->LoadCursor(IDC_SELECT);
	::SetClassLong(GetSafeHwnd(), GCL_HCURSOR, (LONG)hCursor);
	
}

void CRemotemonitorView::OnUpdateSelect(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
    CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd();
	pCmdUI->Enable(pWnd->m_bFlag);
	pCmdUI->SetCheck(m_nCurTool== ID_SELECT);
	
}

void CRemotemonitorView::OnDelete() 
{
	// TODO: Add your command handler code here
	CRemotemonitorDoc* pDoc = GetDocument();
	int i;

	if(m_usrCurrentObject)
	{//当前选中了图元
		for(i=pDoc->m_aObjects.GetSize()-1; i>=0; i--)
		{//遍历图元数据列表
			if(pDoc->m_aObjects[i] == m_usrCurrentObject)
			{//找到需删除的图元
				pDoc->m_aObjects.RemoveAt(i);
				delete m_usrCurrentObject;
				m_usrCurrentObject = NULL;
				break;
			}
		}
		pDoc->SetModifiedFlag(TRUE);
		Invalidate();
	}	
}

void CRemotemonitorView::OnUpdateDelete(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(m_nCurTool == ID_SELECT && m_usrCurrentObject != NULL);
	//当选中图元时,才可使用删除功能
	
}
BOOL CRemotemonitorView::SeekFrameHead(int &start)
{
	int m=0;
	while(m<InDataLen)
	{
        if((InDataBuf[m]==SYN)&&(InDataBuf[m+1]==DLE)&&(InDataBuf[m+2]==STX))
		{
		   // 找到同步头
           start=m;
		   return TRUE;
		}
		else
		   m++;
	}
    start=0;
	return FALSE;	// 没找到同步头
}
BOOL CRemotemonitorView::SeekFrameEnd(int start,int &end)
{
	int m=start;
	while(m<(InDataLen-1))
	{
		if(InDataBuf[m]==DLE&&InDataBuf[m+1]==DLE)//数据中出现了DLE
			m+=2;
		else if(InDataBuf[m]==DLE&&InDataBuf[m+1]==ETX)
		{
		   // 找到包结束标志
           end=m;
		   return TRUE;
		}
		else
		   m++;
	}
    end=0;
	return FALSE;	// 没找到同步头
}
unsigned char CRemotemonitorView::crc(BYTE* buffer,int Len)
{
    unsigned char fcs;
	fcs=0x00;
	while(Len--)
	{
		fcs^=*buffer++;
	}
	return fcs;
}
//在Header和Data中插入转义字符DLE
int CRemotemonitorView::InsertDLE(BYTE* buffer0,BYTE* buffer1,int len)
{
	int i;
	int addbyte=0;
	for(i=0;i<sizeof(PKSTART);i++)
		*buffer1++=*buffer0++;
	for(i=0;i<len;i++)
	{
	   *buffer1=*buffer0;
       if(*buffer0==0x10)
	   {
          buffer1++;
          *buffer1=0x10;
          addbyte++;
	   }
	   buffer1++;
	   buffer0++;
	}
	for(i=0;i<sizeof(PKEND)+2;i++)
		*buffer1++=*buffer0++;
	return  addbyte;
}
//去掉转义字符DLE
int CRemotemonitorView::DeleteDLE(int nStart,int nEnd)
{
	int m,n;
	m=nStart+3;
	n=nEnd;
	while(m<n)
	{
		if(InDataBuf[m]==DLE&&InDataBuf[m+1]==DLE)
		{
           memcpy(&InDataBuf[m+1],&InDataBuf[m+2],InDataLen-(m+2));
           InDataLen--;
		   n--;
		}
		m++;
	}
	return n;
}
void CRemotemonitorView::SendLR()
{
   unsigned char SendBuf[1024];
   unsigned char SendBuf1[1024];
   int nlen;
   int addByte;

   memset(SendBuf,0,sizeof(SendBuf));
   memset(SendBuf1,0,sizeof(SendBuf1));
   memcpy(SendBuf,&m_pkstart,sizeof(PKSTART));
   nlen=sizeof(PKSTART);
   m_header.pktype=0x01;
   m_header.para=0x00;
   memcpy(SendBuf+nlen,&m_header,sizeof(HEADER));
   nlen+=sizeof(HEADER);
   memcpy(SendBuf+nlen,&m_pkend,sizeof(PKEND));
   nlen+=sizeof(PKEND);
   addByte=InsertDLE(SendBuf,SendBuf1,nlen-sizeof(PKSTART)-sizeof(PKEND));
   nlen+=addByte;
   WriteCommBlock(&Comminfo, (LPSTR)SendBuf1,nlen);
}

void CRemotemonitorView::SendLA(int nflag)
{
   unsigned char SendBuf[1024];
   unsigned char SendBuf1[1024];
   int nlen;
   int addByte;

   memset(SendBuf,0,sizeof(SendBuf));
   memset(SendBuf1,0,sizeof(SendBuf1));
   memcpy(SendBuf,&m_pkstart,sizeof(PKSTART));
   nlen=sizeof(PKSTART);
   m_header.pktype=0x02;
   if(nflag==1)
     m_header.para=0x01;//对LR应答
   else if(nflag==2)
     m_header.para=0x02;//对正确的LT应答
   else
     m_header.para=0x04;//对错误的LT应答
   memcpy(SendBuf+nlen,&m_header,sizeof(HEADER));
   nlen+=sizeof(HEADER);
   memcpy(SendBuf+nlen,&m_pkend,sizeof(PKEND));
   nlen+=sizeof(PKEND);
   addByte=InsertDLE(SendBuf,SendBuf1,nlen-sizeof(PKSTART)-sizeof(PKEND));
   nlen+=addByte;
   WriteCommBlock(&Comminfo, (LPSTR)SendBuf1,nlen);
}

void CRemotemonitorView::SendLT()
{
   unsigned char SendBuf[1024];
   unsigned char SendBuf1[1024];
   int nlen;
   int addByte;
   CString str;
   LPTSTR p;

   memset(SendBuf,0,sizeof(SendBuf));
   memset(SendBuf1,0,sizeof(SendBuf1));
   memcpy(SendBuf,&m_pkstart,sizeof(PKSTART));
   nlen=sizeof(PKSTART);
   m_header.pktype=0x04;
   m_header.para=0x00;
   memcpy(SendBuf+nlen,&m_header,sizeof(HEADER));
   nlen+=sizeof(HEADER);
   str=m_strArray.GetAt(0);
   p=str.GetBuffer(1024); 
   memcpy(SendBuf+nlen,p,str.GetLength());
   maptoDTMF(SendBuf+nlen,str.GetLength());
   str.ReleaseBuffer();
   nlen+=str.GetLength();
   SendBuf[nlen]=crc(SendBuf+sizeof(PKSTART),sizeof(HEADER)+str.GetLength());
   nlen+=1;
   memcpy(SendBuf+nlen,&m_pkend,sizeof(PKEND));
   nlen+=sizeof(PKEND);
   addByte=InsertDLE(SendBuf,SendBuf1,nlen-sizeof(PKSTART)-sizeof(PKEND));
   nlen+=addByte;
   WriteCommBlock(&Comminfo, (LPSTR)SendBuf1,nlen);
}
void CRemotemonitorView::maptoDTMF(unsigned char* pbuff,int len)
{
	CString str;
	int nIndex;
	str=pbuff;

	if(str.Left(2)=="CD")//GBK码下载
	{
      pbuff[len-1]=0x0b;//把最后的*变为0x0b
      nIndex=str.Find("#")+1;
      while(nIndex--)
	  {
		*pbuff=asctodtmf[*pbuff];
         pbuff++;
	  }
      str=pbuff;
      nIndex=str.Find("#")+1;
      while(nIndex--)
	  {
		*pbuff=asctodtmf[*pbuff];
         pbuff++;
	  }
      str=pbuff;
      nIndex=str.Find("#")+1;
      while(nIndex--)
	  {
		*pbuff=asctodtmf[*pbuff];
         pbuff++;
	  }
	}
	else if(str.Left(2)=="BD")
	{
      pbuff[len-1]=0x0b;//把最后的*变为0x0b
	  nIndex=str.Find('#')+1;
      while(nIndex--)
	  {
		*pbuff=asctodtmf[*pbuff];
         pbuff++;
	  }
	}
	else
	{
        while(len--)
		{
			*pbuff=asctodtmf[*pbuff];
            pbuff++;
		}
	}
}

void CRemotemonitorView::SetAlarmFlag(CString strNodeNum,CString strCableNum)
{
	int i;
	int nNodeNum;
    CDrawObject* pObject=NULL;
	CRemotemonitorDoc* pDoc = GetDocument();
    nNodeNum=atoi(strNodeNum)*100+atoi(strCableNum);
	for(i=0;i<pDoc->m_aObjects.GetSize(); i++)
	{
		pObject = pDoc->m_aObjects[i];
        if(pObject&&pObject->GetMark()==nNodeNum)
		{
           pObject->m_bAlarm=TRUE;
		   break;
		}
	}
}

void CRemotemonitorView::ProcessRevInfo(CString strRevInfo)
{
	CString strNodeNum;
	int     nNode;
	CString strFenjiName;
	CString strCableNum;
	CString strCableName;
	CString strNodeName;
//	CString strState;
	CString strDistance;
	CString strAlarmTime;
	CString strMaintenance[6];
	CString strTelephone[6];

	CString strTemp;

    int nIndex;
	int nYear,nMonth,nDay,nHour,nMinite,nSecond;
	int nAlarmtype;
	int i;
	CString strSendInfo;

	CTime time;
    time=CTime::GetCurrentTime();

    if(strRevInfo.Left(2)==_T("AA"))
	{
       strRevInfo.Delete(0,3);
	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
       strNodeNum=strRevInfo.Left(nIndex);
	   if(atoi(strNodeNum)<1||atoi(strNodeNum)>999)
		   return;
       strRevInfo.Delete(0,nIndex);//#号没有删除
	   do
	   {
           strRevInfo.Delete(0,1);//把开始的#删除
		   nIndex=strRevInfo.Find('#');
		   if(nIndex==-1) return;
		   strCableNum=strRevInfo.Left(nIndex);
		   if(atoi(strCableNum)<1||atoi(strCableNum)>16)
			   return;
		   strRevInfo.Delete(0,nIndex+1);
		   nAlarmtype=atoi(strRevInfo.Left(1));
		   if(nAlarmtype<0||nAlarmtype>8)
			   return;
           strRevInfo.Delete(0,1);
		   nNode=atoi(strNodeNum)*100+atoi(strCableNum);
		   strTemp.Format("%d",nNode);
		   m_cabletable.m_strSort=_T("[Id]");
           m_cabletable.m_strFilter=_T("[Id] = "+strTemp); 
           m_cabletable.Requery();
		   if(!(m_cabletable.IsEOF()&&m_cabletable.IsBOF()))//不为空
		   {
			   m_cabletable.Edit();
			   m_cabletable.m_state=nAlarmtype;
			   m_cabletable.Update();
		   }
		   //此处将布/撤防状态写入数据库
	   }while(strRevInfo.Left(1)!="*");
	}
/*    else if(strRevInfo.Left(2)==_T("AB"))
	{
       strRevInfo.Delete(0,3);

	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
       strNodeNum=strRevInfo.Left(nIndex);// 分机号
       strRevInfo.Delete(0,nIndex+1);

	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
	   strCableNum=strRevInfo.Left(nIndex);//电缆号
	   strRevInfo.Delete(0,nIndex+1);

	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
	   strTemp=strRevInfo.Left(nIndex);//月
	   strRevInfo.Delete(0,nIndex+1);
       nMonth=atoi(strTemp);

	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
	   strTemp=strRevInfo.Left(nIndex);//日
	   strRevInfo.Delete(0,nIndex+1);
       nDay=atoi(strTemp);

	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
	   strTemp=strRevInfo.Left(nIndex);//时
	   strRevInfo.Delete(0,nIndex+1);
       nHour=atoi(strTemp);

	   nIndex=strRevInfo.Find('*');
	   if(nIndex==-1) return;
	   strTemp=strRevInfo.Left(nIndex);//分
	   strRevInfo.Delete(0,nIndex+1);
       nMinite=atoi(strTemp);

       nSecond=0;

       nYear=time.GetYear();
	   CTime alarmtime(nYear,nMonth,nDay,nHour,nMinite,nSecond);

       cablealarmtable.m_strSort=_T("[alarmtime]");
       nNode=atoi(strNodeNum)*100+atoi(strCableNum);
	   strTemp.Format("%d",nNode);
       cablealarmtable.m_strFilter=_T("[cablenumber]="+strTemp);
       if(!cablealarmtable.IsOpen())
          cablealarmtable.Open();
	   if(!(cablealarmtable.IsBOF()&&cablealarmtable.IsEOF()))
	   {
		   while(!cablealarmtable.IsEOF())
               cablealarmtable.MoveNext();
           cablealarmtable.MovePrev();
           cablealarmtable.Edit();
           cablealarmtable.m_recovertime=alarmtime;
           cablealarmtable.Update();
	   }
	   if(cablealarmtable.IsOpen())
          cablealarmtable.Close();
	}
	*/
    else if(strRevInfo.Left(2)==_T("AC"))
	{
       strRevInfo.Delete(0,3);
	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
       strNodeNum=strRevInfo.Left(nIndex);
	   if(atoi(strNodeNum)<1||atoi(strNodeNum)>999)
		   return;
       strRevInfo.Delete(0,nIndex+1);
	   nIndex=strRevInfo.Find('*');
	   if(nIndex==-1) return;
       strTemp=strRevInfo.Left(nIndex);//无应答等待时间
	   if(atoi(strTemp)<1||atoi(strTemp)>99)
		   return;
	   m_fenjitable.m_strSort=_T("[Id]");
       m_fenjitable.m_strFilter=_T("[Id] = "+strNodeNum); 
       m_fenjitable.Requery();
	   if(!(m_fenjitable.IsEOF()&&m_fenjitable.IsBOF()))//不为空
	   {
		   m_fenjitable.Edit();
		   m_fenjitable.m_ackwaittime=atoi(strTemp);
		   m_fenjitable.Update();
	   }
	}
    else if(strRevInfo.Left(2)==_T("AD"))
	{
       strRevInfo.Delete(0,3);
	   nIndex=strRevInfo.Find('#');
	   if(nIndex==-1) return;
       strNodeNum=strRevInfo.Left(nIndex);
	   if(atoi(strNodeNum)<1||atoi(strNodeNum)>999)
		   return;
       strRevInfo.Delete(0,nIndex+1);
	   nIndex=strRevInfo.Find('*');
	   if(nIndex==-1) return;
       strTemp=strRevInfo.Left(nIndex);//灵敏度
	   if(atoi(strTemp)<1||atoi(strTemp)>30)
		   return;
	   m_fenjitable.m_strSort=_T("[Id]");
       m_fenjitable.m_strFilter=_T("[Id] = "+strNodeNum); 
       m_fenjitable.Requery();
	   if(!(m_fenjitable.IsEOF()&&m_fenjitable.IsBOF()))//不为空
	   {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -