csharp,using System.IO.Ports;,SerialPort port = new SerialPort("COM1", 9600);,port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);,port.Open();private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e),{, SerialPort sp = (SerialPort)sender;, string indata = sp.ReadExisting();, Console.WriteLine("Data Received: " + indata);,},
“在C#中实现串口通信数据接收程序,主要涉及到System.IO.Ports
命名空间下的SerialPort
类,以下是一个简单的示例,展示如何创建一个基本的串口通信数据接收程序:
一、引入必要的命名空间
using System; using System.IO.Ports; using System.Text; using System.Windows.Forms;
二、设计界面(以Windows Forms应用程序为例)
1、打开Visual Studio,创建一个新的Windows Forms App项目。
2、在窗体上添加以下控件:
一个ComboBox
用于选择串口。
一个Button
用于打开串口。
一个TextBox
用于显示接收到的数据。
三、编写代码
在Form1.cs中定义成员变量
private SerialPort serialPort; private string selectedPortName;
初始化串口对象
在Form的构造函数或Load事件中初始化SerialPort
对象,并填充串口号下拉列表。
public Form1() { InitializeComponent(); InitializeSerialPort(); } private void InitializeSerialPort() { serialPort = new SerialPort(); serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); // 获取系统中可用的串口号并添加到ComboBox中 foreach (string port in SerialPort.GetPortNames()) { comboBox_Ports.Items.Add(port); } if (comboBox_Ports.Items.Count > 0) { comboBox_Ports.SelectedIndex = 0; } }
打开串口按钮的点击事件处理程序
private void btn_OpenPort_Click(object sender, EventArgs e) { selectedPortName = comboBox_Ports.SelectedItem.ToString(); serialPort.PortName = selectedPortName; serialPort.BaudRate = 9600; // 根据实际需要设置波特率 serialPort.Parity = Parity.None; serialPort.DataBits = 8; serialPort.StopBits = StopBits.One; try { if (!serialPort.IsOpen) { serialPort.Open(); btn_OpenPort.Text = "关闭串口"; } else { serialPort.Close(); btn_OpenPort.Text = "打开串口"; } } catch (Exception ex) { MessageBox.Show("无法打开串口: " + ex.Message); } }
数据接收事件处理程序
当串口接收到数据时,会触发DataReceivedHandler
事件,在这个事件中,我们可以读取串口缓冲区中的数据,并将其显示在TextBox中。
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); txt_ReceivedData.Invoke(new Action(() => txt_ReceivedData.AppendText(indata + " "))); }
关闭串口时的清理工作
在Form的FormClosing事件中确保串口被正确关闭。
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (serialPort != null && serialPort.IsOpen) { serialPort.Close(); } }
四、运行程序
编译并运行程序后,你应该能够看到一个窗口,其中包含一个下拉列表用于选择串口,一个按钮用于打开和关闭串口,以及一个文本框用于显示接收到的数据,当你通过串口发送数据时,数据应该会实时显示在文本框中。
五、相关问答FAQs
问:如果串口不可用或被其他程序占用怎么办?
答:首先检查串口是否已被其他程序占用,如果是,请关闭占用串口的程序,确保串口连接正确且设备已通电,尝试重新启动计算机或更换串口线缆。
问:如何设置串口的参数(如波特率、数据位等)?
答:可以通过SerialPort
对象的BaudRate
、Parity
、DataBits
和StopBits
属性来设置串口的参数。serialPort.BaudRate = 9600;
设置了波特率为9600,根据实际需求调整这些参数以确保与连接的设备兼容。
小编有话说
通过以上步骤,我们可以轻松地在C#中实现一个串口通信数据接收程序,这个程序不仅可以实时接收并显示串口数据,还提供了简单的用户界面来管理串口连接,根据具体应用场景的需求,还可以进一步扩展和完善这个程序的功能,希望这篇教程能帮助你快速上手C#串口编程!
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1603273.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复