安装依赖库
- 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);