📄 rtusimdlg.cpp
字号:
{
strCheck = "e";
}
break;
case 1:
{
strCheck = "m";
}
break;
case 2:
{
strCheck = "n";
}
break;
case 3:
{
strCheck = "o";
}
break;
case 4:
{
strCheck = "s";
}
break;
default:
break;
}
}
strTmp += strCheck;
strTmp += ",8,1";
m_msComm.SetSettings(strTmp);
m_msComm.SetPortOpen(true);
return true;
}
void CRTUSimDlg::AddMsg(CString &strMsg)
{
if(m_bRun)
{
CString strBuffer = "";
if(m_edtMsg.GetLineCount() > 500)
{
m_edtMsg.SetWindowText(strBuffer);
}
CTime tTmp;
tTmp = CTime::GetCurrentTime();
strBuffer = tTmp.Format("%H:%M:%S ");
strMsg = strBuffer + strMsg;
m_edtMsg.GetWindowText (strBuffer);
if (!strBuffer.IsEmpty())
{
strBuffer += "\r\n";
}
strBuffer += strMsg;
m_edtMsg.SetWindowText (strBuffer);
m_edtMsg.LineScroll (m_edtMsg.GetLineCount(), 0);
}
}
BEGIN_EVENTSINK_MAP(CRTUSimDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CRTUSimDlg)
ON_EVENT(CRTUSimDlg, IDC_MSCOMM, 1 /* OnComm */, OnOnCommMscomm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CRTUSimDlg::OnOnCommMscomm()
{
short sEvent = m_msComm.GetCommEvent();
// if(sEvent == 2)
{
// if(m_cbProtocal.GetCurSel() <3)
// return;
COleVariant vTmp;
CByteArray baTmp;
int nCount = m_msComm.GetInBufferCount();
vTmp = m_msComm.GetInput();
BYTE * pData = (BYTE *)vTmp.parray->pvData;
for(int i = 0; i < nCount; i++)
{
baTmp.Add(pData[i]);
}
DisplayData(true, baTmp);
if(m_pProtocal != NULL)
{
m_pProtocal->ReciveData(baTmp);
}
}
}
void CRTUSimDlg::DisplayData(BOOL bIn, CByteArray &baData)
{
CString strTmp, strMsg;
if(bIn)
{
strMsg += "-> ";
}
else
{
strMsg += "<- ";
}
for(int i = 0; i < baData.GetSize(); i++)
{
strTmp.Format("%02X ", baData[i]);
strMsg += strTmp;
}
AddMsg(strMsg);
}
/*
0 CDT85
1 CDT新部颁
2 DISA
3 DNP 3.0
4 东芝
5 101
6 645科陆协议
*/
void CRTUSimDlg::InitProtocal()
{
if(m_pProtocal != NULL)
{
delete m_pProtocal;
m_pProtocal = NULL;
}
switch(m_cbProtocal.GetCurSel())
{
case 0: //CDT85
break;
case 1: //CDT新部颁
{
SetTimer(1000,1000,NULL);
m_pProtocal = new CProtocolCDT91;
m_pProtocal->SetMainWnd(this);
}
break;
case 2: //DISA
{
SetTimer(1001,1000,NULL);
m_pProtocal = new CProtocolDisa;
m_pProtocal->SetMainWnd(this);
}
break;
case 3: //DNP 3.0
{
m_pProtocal = new CDnpExplain;
m_pProtocal->SetMainWnd(this);
}
break;
case 4: //东芝
{
SetTimer(1002,1000,NULL);
m_pProtocal = new CProtocolTos;
m_pProtocal->SetMainWnd(this);
}
break;
case 5: //101
{
m_pProtocal = new CProtocol101;
m_pProtocal->SetMainWnd(this);
}
break;
case 6:
m_pProtocal = new CProtocal645;
m_pProtocal->SetMainWnd(this);
break;
default:
{
m_pProtocal = NULL;
}
break;
}
}
void CRTUSimDlg::OnChangeEditUab()
{
PropareData();
}
void CRTUSimDlg::OnChangeEditUbc()
{
PropareData();
}
void CRTUSimDlg::OnChangeEditUca()
{
PropareData();
}
void CRTUSimDlg::OnChangeEditIa()
{
PropareData();
}
void CRTUSimDlg::OnChangeEditIb()
{
PropareData();
}
void CRTUSimDlg::OnChangeEditIc()
{
PropareData();
}
void CRTUSimDlg::OnChangeEditCount()
{
PropareData();
}
void CRTUSimDlg::PropareData()
{
if(m_pProtocal != NULL)
{
m_pProtocal->m_waAnalog.RemoveAll();
m_pProtocal->m_baDigital.RemoveAll();
m_pProtocal->m_dwaCount.RemoveAll();
WORD wTmp;
wTmp = (WORD)(m_fUab / 1000 * 0xffff);
m_pProtocal->m_waAnalog.Add(wTmp);
wTmp = (WORD)(m_fUbc / 1000 * 0xffff);
m_pProtocal->m_waAnalog.Add(wTmp);
wTmp = (WORD)(m_fUca / 1000 * 0xffff);
m_pProtocal->m_waAnalog.Add(wTmp);
wTmp = (WORD)(m_fIa / 1000 * 0xffff);
m_pProtocal->m_waAnalog.Add(wTmp);
wTmp = (WORD)(m_fIb / 1000 * 0xffff);
m_pProtocal->m_waAnalog.Add(wTmp);
wTmp = (WORD)(m_fIc / 1000 * 0xffff);
m_pProtocal->m_waAnalog.Add(wTmp);
BYTE byTmp;
if(m_bBreakerOpen)
{
byTmp = 0;
}
else
{
byTmp = 1;
}
m_pProtocal->m_baDigital.Add(byTmp);
DWORD dwTmp;
dwTmp = (DWORD)(m_uCount);
m_pProtocal->m_dwaCount.Add(dwTmp);
m_pProtocal->m_wAddr = m_uAddr;
}
}
void CRTUSimDlg::OnChangeEditAddr()
{
SaveSetting();
PropareData();
}
void CRTUSimDlg::ChangeState()
{
if(m_pProtocal != NULL)
{
m_bBreakerOpen = !(m_pProtocal->m_baDigital[0] & 0X01);
}
if(m_bBreakerOpen)
{
CBitmap bmTmp;
if(bmTmp.LoadBitmap(IDB_BITMAP_OPEN))
{
m_stState.SetBitmap(bmTmp);
}
}
else
{
CBitmap bmTmp;
if(bmTmp.LoadBitmap(IDB_BITMAP_CLOSE))
{
m_stState.SetBitmap(bmTmp);
}
}
}
void CRTUSimDlg::OnTimer(UINT nIDEvent)
{
CByteArray baTmp;
switch(nIDEvent)
{
case RANDTIMER:
if(OnOff != OnOff)
OnStaticState();
RandData();
break;
case 1000://cdt91自动上发
if(!m_bBreakerOpen != OnOff)
{
OnStaticState();
}
m_pProtocal->ReciveData(baTmp);
break;
case 1001://disa自动上发
if(!m_bBreakerOpen != OnOff)
{
OnStaticState();
}
m_pProtocal->ReciveData(baTmp);
break;
case 1002://东芝
if(!m_bBreakerOpen != OnOff)
{
OnStaticState();
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
void CRTUSimDlg::RandData()
{
UpdateData();
float dTmp;
dTmp = (float)rand();
m_fUab += (dTmp - RAND_MAX) / RAND_MAX / 1000;
dTmp = (float)rand();
m_fUbc += (dTmp - RAND_MAX) / RAND_MAX / 1000;
dTmp = (float)rand();
m_fUca += (dTmp - RAND_MAX) / RAND_MAX / 1000;
dTmp = (float)rand();
m_fIa += (dTmp - RAND_MAX) / RAND_MAX / 1000;
dTmp = (float)rand();
m_fIb += (dTmp - RAND_MAX) / RAND_MAX / 1000;
dTmp = (float)rand();
m_fIc += (dTmp - RAND_MAX) / RAND_MAX / 1000;
PropareData();
UpdateData(FALSE);
}
void CRTUSimDlg::OnSelchangeComboCheck()
{
SaveSetting();
OpenComm();
}
void CRTUSimDlg::OnPause()
{
GetSetting();
OpenComm();
InitProtocal();
PropareData();
}
void CRTUSimDlg::OnOK()
{
m_edtMsg.SetWindowText("");
}
void CRTUSimDlg::OnStop()
{
m_bRun = !m_bRun;
CWnd* pWnd = GetDlgItem(IDC_STOP);
if (pWnd != NULL)
{
if(!m_bRun)
{
pWnd->SetWindowText("开始");
}
else
pWnd->SetWindowText("停止");
}
}
void CRTUSimDlg::OnAFault()
{
if(m_pProtocal != NULL)
{
m_pProtocal->DoAFault();
}
}
void CRTUSimDlg::OnBFault()
{
if(m_pProtocal != NULL)
{
m_pProtocal->DoBFault();
}
}
void CRTUSimDlg::OnCFault()
{
if(m_pProtocal != NULL)
{
m_pProtocal->DoCFault();
}
}
void CRTUSimDlg::OnFaultOccur()
{
UpdateData(true);
if(m_pProtocal==NULL)
{
return ;
}
if (!m_CheckAFault&&!m_CheckBFault&&!m_CheckCFault&&!m_3I0OverCurrent&&!m_3U0OverSetting)
{
AfxMessageBox("请正确选择故障设定!");
return;
}
CFaultRec *pFault=new CFaultRec;
pFault->m_AOverCurrent=m_CheckAFault;
pFault->m_BOverCurrrent=m_CheckBFault;
pFault->m_COverCurrrent=m_CheckCFault;
pFault->m_3I0OverCurrent=m_3I0OverCurrent;
pFault->m_3U0OverSetting=m_3U0OverSetting;
pFault->m_wDelayTime=m_FaultOccurTime;
if (m_Direction)
{
pFault->m_byDirection=1;
}
else
{
pFault->m_byDirection=0;
}
pFault->m_wFaultValueIa=(WORD)m_fIa;
pFault->m_wFaultValueIb=(WORD)m_fIb;
pFault->m_wFaultValueIc=(WORD)m_fIc;
pFault->m_wFaultValueUa=(WORD)m_fUab;
pFault->m_wFaultValueUb=(WORD)m_fUbc;
pFault->m_wFaultValueUc=(WORD)m_fUca;
CTime timeCurrent;
timeCurrent=CTime::GetCurrentTime();
SYSTEMTIME faultTime;
timeCurrent.GetAsSystemTime(faultTime);
pFault->m_stTime=faultTime;
pFault->m_byType=0;
m_pProtocal->m_paFault.Add(pFault);
}
void CRTUSimDlg::OnTimeache()
{
m_pProtocal->m_timeAnch=true;
m_TimeStatus="等待校时.....";
CButton *pButton=(CButton *)GetDlgItem(IDC_TIMEACHE);
// SetDlgItemText(IDC_TIMEACHE,"dsdsd");
UpdateData(false);
}
void CRTUSimDlg::OnTimeComeback()
{
m_TimeStatus="正常";
m_pProtocal->m_timeAnch=false;
UpdateData(false);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -