📄 modbustooldlg.cpp
字号:
void CModBusToolDlg::Initailize_Control()
{
//---------HH 2006-2-5--------------------------------------
m_ComPort = (CComboBox *)GetDlgItem( IDC_COMBO_COMPORT );
m_ComBaud = (CComboBox *)GetDlgItem( IDC_COMBO_BAUD );
m_Command = (CComboBox *)GetDlgItem( IDC_COMBO_COMMAND );
m_ComMachine = (CComboBox *)GetDlgItem( IDC_COMBO_MACHINE );
m_TimeInterval=(CComboBox *)GetDlgItem( IDC_COMBO_INTERVAL);
//----add comport-------------------------------------------
m_ComPort->AddString("COM1");
m_ComPort->AddString("COM2");
m_ComPort->AddString("COM3");
m_ComPort->AddString("COM4");
m_ComPort->SetCurSel(0);
//----add communication baud--------------------------------
m_ComBaud->AddString("1200");
m_ComBaud->AddString("2400");
m_ComBaud->AddString("2250");
m_ComBaud->AddString("4800");
m_ComBaud->AddString("9600");
m_ComBaud->AddString("19200");
m_ComBaud->AddString("38400");
m_ComBaud->AddString("43000");
m_ComBaud->AddString("57600");
m_ComBaud->AddString("115200");
m_ComBaud->SetCurSel(3);
//-----add send and receive of timer interval---------------
m_TimeInterval->AddString("1");
m_TimeInterval->AddString("10");
m_TimeInterval->AddString("20");
m_TimeInterval->AddString("30");
m_TimeInterval->AddString("40");
m_TimeInterval->AddString("50");
m_TimeInterval->AddString("100");
m_TimeInterval->AddString("200");
m_TimeInterval->AddString("300");
m_TimeInterval->AddString("500");
m_TimeInterval->AddString("1000");
m_TimeInterval->AddString("2000");
m_TimeInterval->SetCurSel(6);
//-----add machine number list------------------------------
CString pszNumber;
for ( int n = 1; n<128; n++ )
{
pszNumber.Format( "%d",n );
m_ComMachine->AddString( pszNumber );
}
m_ComMachine->SetCurSel( ZERO );
//--reading command filr add to command list----------------
CStdioFile ofile;
if ( !ofile.Open("Command.txt",CFile::modeRead|CFile::typeText) )
{
MessageBox("Open Command.txt File Failed !",TITLE,MB_ICONINFORMATION );
return;
}
CString pszReadText;
while ( ofile.ReadString( pszReadText ) )
{
if ( pszReadText != "" )
m_Command->AddString( pszReadText );
}
int count = m_Command->GetCount();
if ( count > 0 )
m_Command->SetCurSel(0);
}
void CModBusToolDlg::OnClear()
{
intRX = intTX = 0;
m_Edit[1]->SetWindowText("");
Change_Work_Status();
}
void CModBusToolDlg::OnSelchangeComboCommand()
{
CString szText,szTemp;
unsigned char crc[6];
m_Command->GetLBText( m_Command->GetCurSel(),szText );
if ( szText == "" )
{
MessageBox( "所选项目不包含有效命令字符. 重试......",TITLE,MB_ICONINFORMATION );
return ;
}
int r_pos = szText.ReverseFind(',');
r_pos++;
szTemp = szText.Right( szText.GetLength() - r_pos );
szText = "";
if ( uiTerm <= 0x0A )
szText.Format( "0%X ",uiTerm );
else
szText.Format( "%X ",uiTerm );
//----mask crc codeing----------------------------------
if ( m_CheckCrc->GetCheck() )
{
//CString t = szTemp.Left( szTemp.GetLength() - 4 ) ;
::Make_Info( crc ,szTemp );
unsigned short crcValue = Get_CRC_Value( crc,6 );
if ( crcValue > 0 )
{
for ( int n=2 ;n<szTemp.GetLength() - 4; n+=2 )
{
szText += szTemp.GetAt( n );
szText += szTemp.GetAt( n+1 );
szText +=" ";
}
unsigned short hchar = 0,lchar = 0;
hchar = crcValue / 256;
lchar = crcValue % 256;
CString linechar,tt;
if ( hchar <= 0x0F )
linechar.Format( "0%X ",hchar );
else
linechar.Format( "%X ",hchar );
tt = linechar;
if ( lchar <= 0x0F )
linechar.Format( "0%X ",lchar );
else
linechar.Format( "%X ",lchar );
tt += linechar;
szText += tt;
}
else
{
for ( int n=2 ;n<szTemp.GetLength(); n+=2 )
{
szText += szTemp.GetAt( n );
szText += szTemp.GetAt( n+1 );
szText +=" ";
}
}
}
else
{
for ( int n=2 ;n<szTemp.GetLength(); n+=2 )
{
szText += szTemp.GetAt( n );
szText += szTemp.GetAt( n+1 );
szText +=" ";
}
}
m_Edit[0]->SetWindowText( szText );
}
BOOL CModBusToolDlg::Change_Communication_Param()
{
if ( lpNewComThread != NULL )
{
delete lpNewComThread;
lpNewComThread = NULL;
}
lpNewComThread = new CNewComThread();
if ( byPort >0 && dwBaud != 0 )
{
if ( lpNewComThread->InitNumber( byPort,dwBaud ,'N',8,1) )
{
lpNewComThread->Set_TimeInterval( uiInterval );
lpNewComThread->Set_Communication_Mode( blMode );
Change_Work_Status( TRUE );
return ( TRUE );
}
else
{
Change_Work_Status( FALSE );
return ( FALSE );
}
}
Change_Work_Status();
return ( TRUE );
}
void CModBusToolDlg::OnSelchangeComboComport()
{
CString szPort,szTemp;
m_ComPort->GetLBText( m_ComPort->GetCurSel(),szPort );
if ( szPort != "" )
{
szTemp = szPort.Right( 1 );
byPort = atoi( szTemp );
}
else
byPort = 1;
Change_Communication_Param();
}
void CModBusToolDlg::OnSelchangeComboBaud()
{
CString szBaud,szTemp;
m_ComBaud->GetLBText( m_ComBaud->GetCurSel(),szBaud );
if ( szBaud != "" )
{
dwBaud = atoi( szBaud );
}
else
dwBaud = 9600;
Change_Communication_Param();
}
void CModBusToolDlg::Change_Work_Status( BOOL blTrue )
{
CString pszdisplay;
if ( byPort >0 && byPort < 5 )
{
if ( blTrue )
{
pszdisplay.Format( "状态: 打开通讯串口: COM%d 波特率: %d 数据位: %d 校验位: %s 停止位: %d RX: %d TX: %d",
byPort,
dwBaud,
8,
"N",
1,
intRX,
intTX);
m_Status->SetWindowText( pszdisplay );
m_Button[0]->EnableWindow( TRUE );
}
else
{
m_Button[0]->EnableWindow( FALSE );
pszdisplay.Format( "状态:串口 COM%d 正在使用,请更改......",byPort );
MessageBox( pszdisplay,TITLE,MB_ICONINFORMATION );
m_Status->SetWindowText( pszdisplay );
}
}
}
void CModBusToolDlg::OnSelchangeComboMachine()
{
CString pszText;
m_ComMachine->GetLBText( m_ComMachine->GetCurSel(),pszText );
if ( pszText != "" )
{
uiTerm = atoi( pszText );
}
}
void CModBusToolDlg::OnSelchangeComboInterval()
{
CString pszText;
m_TimeInterval->GetLBText( m_TimeInterval->GetCurSel(),pszText );
if ( pszText != "" )
{
uiInterval = atoi( pszText );
if ( lpNewComThread != NULL )
lpNewComThread->Set_TimeInterval( uiInterval );
}
}
void CModBusToolDlg::OnCheckMode()
{
CString pszText;
blMode = m_CheckMode->GetCheck();
if ( lpNewComThread != NULL )
lpNewComThread->Set_Communication_Mode( blMode );
if ( !blMode )
{
m_CheckCrc->SetCheck( FALSE );
m_CheckCrc->EnableWindow( FALSE );
m_CheckMode->SetWindowText( "以字符发送和接收" );
}
else
{
m_CheckCrc->SetCheck( TRUE );
m_CheckCrc->EnableWindow( TRUE );
m_CheckMode->SetWindowText( "以十六进制发送和接收" );
}
}
void CModBusToolDlg::OnCheckNotcrc()
{
blNotCrc = m_CheckNotCrc->GetCheck();
if ( blNotCrc )
m_CheckCrc->SetCheck( FALSE );
}
void CModBusToolDlg::OnTimer(UINT nIDEvent)
{
CString pszText,pszTemp, pszTemp1;
if ( nIDEvent ==1 )
{
if ( lpNewComThread->ReceiveData_Command() )
{
if ( m_Edit[1]->GetLineCount() > 200 )
{
m_Edit[1]->SetWindowText( "" );
}
int len = m_Edit[1]->GetWindowTextLength();
m_Edit[1]->SetSel( len,len );
pszTemp1 = lpNewComThread->Get_ReceiveValue();
pszText = "";
for ( int n=0; n<pszTemp1.GetLength(); n+=2 )
{
pszText += pszTemp1.GetAt( n );
pszText += pszTemp1.GetAt( n+1 );
pszText += " ";
}
pszTemp += pszText;
m_Edit[1]->ReplaceSel( pszTemp );
intRX += ( pszTemp1.GetLength() /3 );
Change_Work_Status();
}
}
CDialog::OnTimer(nIDEvent);
}
void CModBusToolDlg::OnCheckAutoreceive()
{
if ( m_CheckAutoReceive->GetCheck() )
SetTimer( 1,500 ,NULL );
else
KillTimer( 1 );
}
void CModBusToolDlg::OnButsetdatato()
{
CString psztext,pszInsert;
CString szh,szl;
unsigned short shortcrc = 0;
int lchar = 0,hchar = 0 ,len = 0;
m_editData->GetWindowText( psztext );
int v = ::Check_InputData( psztext );
switch (v)
{
case 1:
//-------------------------------------------------
UpdateData( TRUE );
dwSetValue = m_EditData;
if ( dwSetValue > 0)
{
hchar = dwSetValue / 256;
lchar = dwSetValue % 256;
}
if ( hchar < 0x10 )
szh.Format( " 0%X ",hchar );
else
szh.Format( " %X ",hchar );
if ( lchar < 0x10 )
szl.Format( "0%X ",lchar );
else
szl.Format( "%X ",lchar );
pszInsert = szh;
pszInsert += szl;
m_Edit[0]->GetWindowText( psztext );
if ( psztext == "" )
return;
if ( psztext.GetLength() > 0x0A )
{
szh = psztext.Left( 11 );
szl = psztext.Right( 6 );
}
psztext = szh;
psztext += pszInsert;
//psztext += szl;
len = Str2Hex( psztext,(unsigned char*)sendByte );
shortcrc= ::Get_CRC_Value( sendByte,len );
hchar = shortcrc / 256;
lchar = shortcrc % 256;
if ( hchar < 0x10 )
szl.Format( "0%X ",hchar );
else
szl.Format( "%X ",hchar );
psztext += szl;
if ( lchar < 0x10 )
szl.Format( "0%X",lchar );
else
szl.Format( "%X",lchar );
psztext += szl;
m_Edit[0]->SetWindowText( psztext );
//-------------------------------------------------
break;
case 2:
MessageBox( "输入的数据类型错误。",TITLE,MB_ICONINFORMATION );
m_editData->SetFocus();
break;
case 3:
MessageBox( "输入的数据超长或数据类型错误。",TITLE,MB_ICONINFORMATION );
m_editData->SetFocus();
break;
case 4:
break;
default:
break;
}
}
void CModBusToolDlg::OnButComport()
{
CString psztext;
m_butPort->GetWindowText( psztext );
if ( psztext == "关闭串口" )
{
if ( lpNewComThread != NULL )
{
delete lpNewComThread;
lpNewComThread = NULL;
}
m_ComPort->EnableWindow( FALSE );
m_butPort->SetWindowText( "打开串口" );
m_bmpButton[0].EnableWindow( FALSE );
}
else
{
m_butPort->SetWindowText( "关闭串口" );
Change_Communication_Param();
m_ComPort->EnableWindow( TRUE );
m_bmpButton[0].EnableWindow( TRUE );
}
}
void CModBusToolDlg::OnButConvent()
{
CString pszUnicode,pszSource;
int u = lpNewConVert.DoModal();
if ( u == 0 )
pszUnicode = lpNewConVert.m_EditAfter;
m_Edit[0]->GetWindowText( pszSource );
if ( (pszSource != "") && pszUnicode != "" )
{
pszSource +=" ";
pszSource += pszUnicode;
}
else
{
pszSource = pszUnicode;
}
m_Edit[0]->SetWindowText( pszSource );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -