安装依赖库
System.IO.Ports
using System. Diagnostics ;
using System. IO. Ports ;
using System. Text ;
using System. Windows ;
using System. Windows. Controls ;
using System. Windows. Data ;
using System. Windows. Documents ;
using System. Windows. Input ;
using System. Windows. Markup. Localizer ;
using System. Windows. Media ;
using System. Windows. Media. Imaging ;
using System. Windows. Navigation ;
using System. Windows. Shapes ; namespace GasAlarmFactoryTools
{ struct TestInfoData { public string dev_uuid; public string dev_simcard; public string private_data; public string datetime; } ; public partial class MainWindow : Window { SerialPort mSerialPort = new SerialPort ( ) ; private Thread recvThread; long recvTimems = 0 ; int rxLen = 0 ; byte [ ] rxBuff = new byte [ 128 ] ; private List< string > baudrateList = new List< string > { "4800" , "9600" , "19200" , "38400" , "57600" , "115200" , "256000" , "1000000" , "2000000" , "3000000" } ; public MainWindow ( ) { InitializeComponent ( ) ; string [ ] ports = System. IO. Ports. SerialPort. GetPortNames ( ) ; comboBoxComName. ItemsSource = ports; comboBoxComName. SelectedIndex = 0 ; comboBoxBaudrate. ItemsSource = baudrateList; } protected override void OnClosing ( System. ComponentModel. CancelEventArgs e) { if ( MessageBox. Show ( "确定要退出吗?" , "确认" , MessageBoxButton. YesNo) != MessageBoxResult. Yes) { e. Cancel = true ; } mSerialPort. Close ( ) ; if ( recvThread != null ) { recvThread. Abort ( ) ; } base . OnClosing ( e) ; } private void recvTimerCalback ( object obj) { this . Dispatcher. Invoke ( new Action ( ( ) => { } ) ) ; } private void recvThreadTask ( ) { Thread. Sleep ( 200 ) ; try { while ( true ) { Thread. Sleep ( 1 ) ; if ( mSerialPort. IsOpen) { int datalength = mSerialPort. BytesToRead; if ( datalength >= 1 ) { for ( int i = 0 ; i < datalength; i++ ) { recvTimems = Environment. TickCount; byte data = ( byte ) mSerialPort. ReadByte ( ) ; rxBuff[ rxLen++ ] = data; if ( rxBuff. Length == rxLen) { rxLen = 0 ; Array. Clear ( rxBuff, 0 , rxBuff. Length) ; Console. WriteLine ( "Error================" + rxBuff. Length + "\n" ) ; } } } recvTimerCalback ( null ) ; } } } catch ( Exception ex) { Console. WriteLine ( " ----------异常------------" ) ; } } private void btnOpenCloseCom_Click ( object sender, RoutedEventArgs e) { if ( mSerialPort. IsOpen) { mSerialPort. Close ( ) ; btnOpenCloseCom. Content = "打开串口" ; btnOpenCloseCom. Background = Brushes. Red; Console. WriteLine ( "关闭串口成功" ) ; Debug. WriteLine ( "关闭串口成功" ) ; comboBoxComName. IsEnabled = true ; comboBoxBaudrate. IsEnabled = true ; comboBoxDataBits. IsEnabled = true ; comboBoxStopBits. IsEnabled = true ; comboBoxParity. IsEnabled = true ; comboBoxHandshake. IsEnabled = true ; } else { mSerialPort. BaudRate = 4800 ; mSerialPort. DataBits = 8 ; mSerialPort. StopBits = StopBits. One; mSerialPort. Parity = Parity. None; mSerialPort. Handshake = Handshake. None; Console. WriteLine ( "baudrate SelectedIndex:" + comboBoxBaudrate. SelectedIndex) ; Console. WriteLine ( "baudrate SelectedValue:" + comboBoxBaudrate. SelectedValue) ; Console. WriteLine ( "baudrate Text:" + comboBoxBaudrate. Text) ; mSerialPort. PortName = comboBoxComName. SelectedItem. ToString ( ) ; if ( comboBoxBaudrate. SelectedIndex < 0 ) { mSerialPort. BaudRate = Convert. ToInt32 ( comboBoxBaudrate. Text) ; } else { switch ( comboBoxBaudrate. SelectedValue) { case "4800" : mSerialPort. BaudRate = 4800 ; break ; case "9600" : mSerialPort. BaudRate = 9600 ; break ; case "19200" : mSerialPort. BaudRate = 19200 ; break ; case "38400" : mSerialPort. BaudRate = 38400 ; break ; case "57600" : mSerialPort. BaudRate = 57600 ; break ; case "115200" : mSerialPort. BaudRate = 115200 ; break ; case "256000" : mSerialPort. BaudRate = 256000 ; break ; case "1000000" : mSerialPort. BaudRate = 1000000 ; break ; case "2000000" : mSerialPort. BaudRate = 2000000 ; break ; case "3000000" : mSerialPort. BaudRate = 3000000 ; break ; default : MessageBox. Show ( "波特率设置有误!" ) ; break ; } } switch ( comboBoxDataBits. SelectedIndex) { case 0 : mSerialPort. DataBits = 5 ; break ; case 1 : mSerialPort. DataBits = 6 ; break ; case 2 : mSerialPort. DataBits = 7 ; break ; case 3 : mSerialPort. DataBits = 8 ; break ; default : mSerialPort. DataBits = 8 ; break ; } switch ( comboBoxStopBits. SelectedIndex) { case 0 : mSerialPort. StopBits = StopBits. One; break ; case 1 : mSerialPort. StopBits = StopBits. OnePointFive; break ; case 2 : mSerialPort. StopBits = StopBits. Two; break ; default : mSerialPort. StopBits = StopBits. One; break ; } switch ( comboBoxParity. SelectedIndex) { case 0 : mSerialPort. Parity = Parity. None; Console. WriteLine ( "无校验" ) ; break ; case 1 : mSerialPort. Parity = Parity. Odd; Console. WriteLine ( "奇校验" ) ; break ; case 2 : mSerialPort. Parity = Parity. Even; Console. WriteLine ( "偶校验" ) ; break ; case 3 : mSerialPort. Parity = Parity. Mark; Console. WriteLine ( "校验位1" ) ; break ; case 4 : mSerialPort. Parity = Parity. Space; Console. WriteLine ( "校验位0" ) ; break ; default : mSerialPort. Parity = Parity. None; break ; } switch ( comboBoxHandshake. SelectedIndex) { case 0 : mSerialPort. Handshake = Handshake. None; break ; case 1 : mSerialPort. Handshake = Handshake. XOnXOff; break ; case 2 : mSerialPort. Handshake = Handshake. RequestToSend; break ; case 3 : mSerialPort. Handshake = Handshake. RequestToSendXOnXOff; break ; default : mSerialPort. Handshake = Handshake. None; break ; } try { mSerialPort. Open ( ) ; btnOpenCloseCom. Content = "关闭串口" ; btnOpenCloseCom. Background = Brushes. Green; } catch ( Exception ex) { MessageBox. Show ( ex. Message. ToString ( ) ) ; } } } }
}
mSerialPort. Write ( new byte [ ] { 0xAA , 0x00 , 0x08 , 0x00 , 0xB2 , 0x55 } , 0 , 6 ) ;