当前位置: 首页> 科技> IT业 > 安徽省建筑平台信息网_苏州网站开发建设方案_学习软件的网站_整站优化包年

安徽省建筑平台信息网_苏州网站开发建设方案_学习软件的网站_整站优化包年

时间:2025/7/12 6:14:00来源:https://blog.csdn.net/u013420428/article/details/146180481 浏览次数:1次
安徽省建筑平台信息网_苏州网站开发建设方案_学习软件的网站_整站优化包年

C# WPF 串口通信

  • 安装依赖库

安装依赖库

  • 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;};/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{// TODO: 串口相关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();// 获取所有可用串口端口,并添加到comboBoxCOMstring[] ports = System.IO.Ports.SerialPort.GetPortNames();comboBoxComName.ItemsSource = ports;comboBoxComName.SelectedIndex = 0;  // 默认选择索引comboBoxBaudrate.ItemsSource = baudrateList;    // 波特率设置combobox数据源}/// <summary>/// 窗口关闭处理/// </summary>/// <param name="e"></param>protected override void OnClosing(System.ComponentModel.CancelEventArgs e){if (MessageBox.Show("确定要退出吗?", "确认", MessageBoxButton.YesNo) != MessageBoxResult.Yes){// 用户选择“否”,取消关闭e.Cancel = true;}mSerialPort.Close();//mTimer.Dispose();if (recvThread != null){                recvThread.Abort();}base.OnClosing(e);}private void recvTimerCalback(object obj){this.Dispatcher.Invoke(new Action(() =>{// TODO: 处理接收到的数据}));}private void recvThreadTask(){Thread.Sleep(200);try{while (true){Thread.Sleep(1);if (mSerialPort.IsOpen){int datalength = mSerialPort.BytesToRead;if (datalength >= 1){//Console.WriteLine("BytesToRead:" + datalength);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");}//Console.WriteLine(data.ToString("X2"));}}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{// TODO: 串口默认设置mSerialPort.BaudRate = 4800; // 波特率mSerialPort.DataBits = 8;   // 数据位mSerialPort.StopBits = StopBits.One;    // 停止位mSerialPort.Parity = Parity.None;   // 校验位mSerialPort.Handshake = Handshake.None; // 流控位// mSerialPort.ReadTimeout = 1500; // 读超时// mSerialPort.Encoding = Encoding.UTF8; // 编码方式// mSerialPort.RtsEnable = true;// mSerialPort.DataReceived += SerialPort_DataReceived;Console.WriteLine("baudrate SelectedIndex:" + comboBoxBaudrate.SelectedIndex);Console.WriteLine("baudrate SelectedValue:" + comboBoxBaudrate.SelectedValue);Console.WriteLine("baudrate Text:" + comboBoxBaudrate.Text);// TODO: 串口端口选择mSerialPort.PortName = comboBoxComName.SelectedItem.ToString();// TODO: 设置串口波特率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;}}// TODO: 串口数据位设置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;}// TODO: 串口停止位设置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;}// TODO: 串口校验位设置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;   // 校验位1Console.WriteLine("校验位1");break;case 4:mSerialPort.Parity = Parity.Space;   // 校验位0Console.WriteLine("校验位0");break;default:mSerialPort.Parity = Parity.None;   // 无校验break;}// TODO: 串口流控位设置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;}// TODO: 尝试打开串口try {mSerialPort.Open();btnOpenCloseCom.Content = "关闭串口";btnOpenCloseCom.Background = Brushes.Green;}catch (Exception ex) {MessageBox.Show(ex.Message.ToString());}}}}
}
// TODO: 串口写入数据  3个参数(buf, offset, len);
mSerialPort.Write(new byte[] { 0xAA, 0x00, 0x08, 0x00, 0xB2, 0x55 }, 0, 6);
关键字:安徽省建筑平台信息网_苏州网站开发建设方案_学习软件的网站_整站优化包年

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: