📄 cdtprotocoldlg.cpp
字号:
order = order & 0xfff;
sprintf( text, "%d", order );
Value = (*( pBuf + 4 ) >> 7 );
if( Value ) str = _T("合");
else str = _T("分");
nIdex = m_listSOE.GetItemCount();
sprintf( text, "%d", nIdex );
m_listSOE.InsertItem( nIdex, text );
sprintf( text, "%02d-%02d-%02d %02d:%02d:%02d:%03d",
Date.wYear-2000,
Date.wMonth,
Date.wDay,
soetime.wHour,
soetime.wMinute,
soetime.wSecond,
soetime.wMilliseconds );
m_listSOE.SetItemText( nIdex, 1, text );
GetYXListItem( order, strEvent );
strEvent += str;
m_listSOE.SetItemText( nIdex, 2, strEvent );
break;
default: break;
}
}
void CCDTProtocolDlg::OnProcessYKVerify( BYTE* pBuf )
{
if ( ( pBuf[1] == pBuf[3] ) && ( pBuf[2] == pBuf[4] ) )
{
if ( pBuf[1] != 0xff )
{
m_YKnum = pBuf[2];
m_Ykdlg.m_btnYkexec.EnableWindow( TRUE );
m_Ykdlg.m_btnYkesc.EnableWindow( TRUE );
}
else
{
m_Ykdlg.GetDlgItem( IDOK )->EnableWindow( TRUE );
m_Ykdlg.m_btnYkexec.EnableWindow( FALSE );
m_Ykdlg.m_btnYkesc.EnableWindow( FALSE );
}
}
}
void CCDTProtocolDlg::OnBtnOpen()
{
// TODO: Add your control notification handler code here
SerialParam m_param;
CIniFile inifile( ".//settings.ini" );
m_param.comno = inifile.ReadInteger( "串口设置", "串口号", 1 );
m_param.baudrate = (DWORD)inifile.ReadInteger( "串口设置", "波特率", 9600 );
m_param.bytesize = (BYTE)inifile.ReadInteger( "串口设置", "数据位", 8 );
m_param.stopbits = (BYTE)inifile.ReadInteger( "串口设置", "停止位", ONESTOPBIT );
m_param.parity = (BYTE)inifile.ReadInteger( "串口设置", "校验位", EVENPARITY );
if ( InitComm( m_param ) )
{
if ( OpenComm() )
{
StartRun();
m_btnOpen.EnableWindow( FALSE );
m_btnClose.EnableWindow( TRUE );
m_btnSetTime.EnableWindow( TRUE );
m_btnYKCtrl.EnableWindow( TRUE );
m_btnYTCtrl.EnableWindow( TRUE );
m_btnReset.EnableWindow( TRUE );
}
else
{
}
}
else
{
AfxMessageBox( "打开串口失败!" );
}
}
void CCDTProtocolDlg::OnBtnClose()
{
// TODO: Add your control notification handler code here
CloseComm();
m_btnOpen.EnableWindow( TRUE );
m_btnClose.EnableWindow( FALSE );
m_btnSetTime.EnableWindow( FALSE );
m_btnYKCtrl.EnableWindow( FALSE );
m_btnYTCtrl.EnableWindow( FALSE );
m_btnReset.EnableWindow( FALSE );
}
BOOL CCDTProtocolDlg::ReadColorParam()
{
FILE* pf;
char text[128];
strcpy( text, ".//Color.Set" );
if ( ( pf = fopen( text, "rb" )) == NULL )
{
return FALSE;
}
else
{
fread( &m_paramcolor, sizeof( struColorParam ), 1, pf );
fclose( pf );
return TRUE;
}
}
void CCDTProtocolDlg::WriteColorParam()
{
FILE* pf;
char text[128];
strcpy( text, ".//Color.Set" );
if ( ( pf = fopen( text, "w+" ) ) == NULL )
{
printf( "Can not open file: %s\n", text );
}
else
{
fwrite( &m_paramcolor, sizeof( struColorParam ), 1, pf );
fclose( pf );
}
}
void CCDTProtocolDlg::OnBtnColorset()
{
// TODO: Add your control notification handler code here
CColorParam dlg;
if ( dlg.DoModal() == IDOK )
{
m_paramcolor.YxColor = dlg.m_btnYx.GetBkColor();
m_paramcolor.ErrorColor = dlg.m_btnError.GetBkColor();
m_paramcolor.YmColor = dlg.m_btnYm.GetBkColor();
m_paramcolor.YcColor = dlg.m_btnYc.GetBkColor();
m_paramcolor.SynColor = dlg.m_btnSyn.GetBkColor();
m_paramcolor.InsertColor = dlg.m_btnInsert.GetBkColor();
m_paramcolor.CtrlColor = dlg.m_btnCtrl.GetBkColor();
m_paramcolor.SoeColor = dlg.m_btnSoe.GetBkColor();
WriteColorParam();
}
}
void CCDTProtocolDlg::DisplayRxData( BYTE* pBuf, COLORREF color, BOOL IsCheck, BOOL isHead )
{
if ( !m_bshowNeed )
{
return;
}
CString str, temp;
if ( isHead )
{
m_ctrlRxMsg.AddColorLine( "", color );
}
for ( int i = 0; i < 6; i++ )
{
temp.Format( "%02X", pBuf[i] );
str += temp;
}
if ( IsCheck )
{
str += "+ ";
m_ctrlRxMsg.AddColorString( str, color );
}
else
{
str += "x";
m_ctrlRxMsg.AddColorString( str, 0x000000 );
}
if ( m_ctrlRxMsg.GetLineCount() >= 200 )
{
m_ctrlRxMsg.ClearAll();
}
}
void CCDTProtocolDlg::OnSetWindowsPos()
{
CRect listrect;
CRect rect;
CRect rct;
CRect rc;
m_tabCtrl.GetClientRect( rect );
rect.left += 10; rect.top += 10;
rect.bottom += 12; rect.right += 12;
m_tabCtrl.MoveWindow( rect );
GetClientRect( listrect );
listrect.left = rect.left; listrect.top = rect.bottom+5;
listrect.right = rect.right; listrect.bottom -= 10;
m_listYX.MoveWindow( listrect );
m_listYC.MoveWindow( listrect );
m_listYM.MoveWindow( listrect );
m_listCOS.MoveWindow( listrect );
m_listSOE.MoveWindow( listrect );
GetClientRect( rc );
rc.left = rect.right; rc.top = rect.top+25;
rc.right -= 10; rc.bottom /= 4; rc.bottom *= 3;
m_ctrlRxMsg.MoveWindow( rc );
m_btnOpen.GetClientRect( rct );
rct.left = rect.right; rct.top = rect.top;
rct.right += rect.right; rct.bottom = rect.bottom;
m_btnOpen.MoveWindow( rct );
int m_width = rct.Width();
int m_hight = rct.Height();
rct.left += m_width; rct.right += m_width;
m_btnClose.MoveWindow( rct );
rct.left += m_width; rct.right += m_width;
m_btnColorSet.MoveWindow( rct );
rct.left += m_width; rct.right += m_width;
m_btnAddFile.MoveWindow( rct );
rct.left += m_width; rct.right += m_width;
m_btnStopShow.MoveWindow( rct );
rct.left += m_width; rct.right += m_width;
m_btnClear.MoveWindow( rct );
rct.left = rect.right; rct.top = rc.bottom+5;
rct.right = rct.left+m_width; rct.bottom = rct.top+m_hight;
m_btnSetTime.MoveWindow( rct );
rct.left += m_width; rct.right += m_width;
m_btnYKCtrl.MoveWindow( rct );
rct.left += m_width; rct.right += m_width;
m_btnYTCtrl.MoveWindow( rct );
rct.left += m_width; rct.right += m_width;
m_btnReset.MoveWindow( rct );
GetClientRect( rc );
rc.left = rect.right; rc.bottom -= 10;
rc.right -= 10; rc.top = rct.bottom+5;
m_ctrlTxMsg.MoveWindow( rc );
}
void CCDTProtocolDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if ( !m_bsizeInit )
{
return;
}
OnSetWindowsPos();
}
void CCDTProtocolDlg::OnSelchangeTabCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
switch( m_tabCtrl.GetCurSel() )
{
case 0:
m_listYX.ShowWindow( SW_SHOW );
break;
case 1:
m_listYC.ShowWindow( SW_SHOW );
break;
case 2:
m_listYM.ShowWindow( SW_SHOW );
break;
case 3:
m_listCOS.ShowWindow( SW_SHOW );
break;
case 4:
m_listSOE.ShowWindow( SW_SHOW );
break;
default:
break;
}
*pResult = 0;
}
void CCDTProtocolDlg::OnSelchangingTabCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
switch( m_tabCtrl.GetCurSel() )
{
case 0:
m_listYX.ShowWindow( SW_HIDE );
break;
case 1:
m_listYC.ShowWindow( SW_HIDE );
break;
case 2:
m_listYM.ShowWindow( SW_HIDE );
break;
case 3:
m_listCOS.ShowWindow( SW_HIDE );
break;
case 4:
m_listSOE.ShowWindow( SW_HIDE );
break;
default:
break;
}
*pResult = 0;
}
void CCDTProtocolDlg::OnBtnAddFile()
{
// TODO: Add your control notification handler code here
CString m_strPath;
CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"配置文件(*.csv)|*.csv|所有文件(*.*)|*.*|");
if ( FileDlg.DoModal() == IDOK )
{
m_strPath = FileDlg.GetPathName();
int i, m_num;
CString m_item;
CStringArray m_StrArray;
CIniFile inifile( m_strPath );
inifile.ReadSection( "遥信量", m_StrArray );
m_num = m_StrArray.GetSize();
if ( m_num > 0 )
{
for ( i = 0; i < m_num; i++ )
{
m_item = m_StrArray.GetAt( i );
m_item = inifile.ReadString( "遥信量", m_item );
if ( m_item != "" )
{
m_item = m_item.Mid( m_item.Find( "," )+1 );
m_item = m_item.Mid( m_item.Find( "," )+1 );
m_item = m_item.Mid( m_item.Find( "," )+1 );
m_listYX.SetItemText( i, 1, m_item );
}
}
}
inifile.ReadSection( "遥测量", m_StrArray );
m_num = m_StrArray.GetSize();
if ( m_num > 0 )
{
for ( i = 0; i < m_num; i++ )
{
m_item = m_StrArray.GetAt( i );
m_item = inifile.ReadString( "遥测量", m_item );
if ( m_item != "" )
{
m_item = m_item.Mid( m_item.Find( "," )+1 );
m_item = m_item.Mid( m_item.Find( "," )+1 );
m_item = m_item.Mid( m_item.Find( "," )+1 );
m_listYC.SetItemText( i, 1, m_item );
m_listYC.SetItemText( i, 2, "2047" );
}
}
}
}
}
void CCDTProtocolDlg::GetYXListItem( int nIdex, CString& strItem )
{
strItem = m_listYX.GetItemText( nIdex, 1 );
}
void CCDTProtocolDlg::OnBtnStopShow()
{
// TODO: Add your control notification handler code here
m_bshowNeed = !m_bshowNeed;
if ( m_bshowNeed )
{
m_btnStopShow.SetWindowText( "(&P)暂停显示" );
}
else
{
m_btnStopShow.SetWindowText( "(&P)继续显示" );
}
}
void CCDTProtocolDlg::OnBtnSetTime()
{
// TODO: Add your control notification handler code here
}
void CCDTProtocolDlg::OnBtnYkCtrl()
{
// TODO: Add your control notification handler code here
m_Ykdlg.DoModal();
}
void CCDTProtocolDlg::OnBtnYtCtrl()
{
// TODO: Add your control notification handler code here
}
void CCDTProtocolDlg::OnBtnReset()
{
// TODO: Add your control notification handler code here
}
void CCDTProtocolDlg::OnYkSelect( BYTE YkNo, BYTE YkCmd )
{
BYTE buf[6] = { 0xeb, 0x90, 0xeb, 0x90, 0xeb, 0x90 };
WriteComm( buf, 6 );
buf[0] = 0x71;
buf[1] = CDTC_YK_SELECT;
buf[2] = 0x03;
buf[3] = 0x01;
buf[4] = 0x00;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_SELECT;
buf[1] = YkCmd;
buf[2] = YkNo;
buf[3] = YkCmd;
buf[4] = YkNo;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_SELECT;
buf[1] = YkCmd;
buf[2] = YkNo;
buf[3] = YkCmd;
buf[4] = YkNo;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_SELECT;
buf[1] = YkCmd;
buf[2] = YkNo;
buf[3] = YkCmd;
buf[4] = YkNo;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
}
void CCDTProtocolDlg::OnYkExec( void )
{
BYTE buf[6] = { 0xeb, 0x90, 0xeb, 0x90, 0xeb, 0x90 };
WriteComm( buf, 6 );
buf[0] = 0x71;
buf[1] = CDTC_YK_EXECUTE;
buf[2] = 0x03;
buf[3] = 0x01;
buf[4] = 0x00;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_EXECUTE;
buf[1] = 0xaa;
buf[2] = m_YKnum;
buf[3] = 0xaa;
buf[4] = m_YKnum;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_EXECUTE;
buf[1] = 0xaa;
buf[2] = m_YKnum;
buf[3] = 0xaa;
buf[4] = m_YKnum;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_EXECUTE;
buf[1] = 0xaa;
buf[2] = m_YKnum;
buf[3] = 0xaa;
buf[4] = m_YKnum;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
}
void CCDTProtocolDlg::OnYkCancel( void )
{
BYTE buf[6] = { 0xeb, 0x90, 0xeb, 0x90, 0xeb, 0x90 };
WriteComm( buf, 6 );
buf[0] = 0x71;
buf[1] = CDTC_YK_CANCEL;
buf[2] = 0x03;
buf[3] = 0x01;
buf[4] = 0x00;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_CANCEL;
buf[1] = 0x55;
buf[2] = m_YKnum;
buf[3] = 0x55;
buf[4] = m_YKnum;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_CANCEL;
buf[1] = 0x55;
buf[2] = m_YKnum;
buf[3] = 0x55;
buf[4] = m_YKnum;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
buf[0] = CDTF_YK_CANCEL;
buf[1] = 0x55;
buf[2] = m_YKnum;
buf[3] = 0x55;
buf[4] = m_YKnum;
buf[5] = GetCRC8( buf, 5 );
WriteComm( buf, 6 );
}
void CCDTProtocolDlg::OnBtnClear()
{
// TODO: Add your control notification handler code here
m_ctrlRxMsg.ClearAll();
m_listCOS.DeleteAllItems();
m_listSOE.DeleteAllItems();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -