📄 remotemonitorview.cpp
字号:
}
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 + -