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

📄 cdtprotocoldlg.cpp

📁 一个模拟主站的CDT调试工具。可以根据需要来设置同步字
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -