using System;
using System.IO.Ports;
class Program
{
static void Main()
{
// 创建串口对象
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
try
{
// 打开串口
serialPort.Open();
// 设置数据接收事件处理程序
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
Console.WriteLine("串口已打开,等待数据...");
// 持续运行,直到用户按下任意键
Console.ReadKey();
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("无法访问指定的串口。请检查权限或确保串口未被其他程序占用。");
}
catch (IOException)
{
Console.WriteLine("发生 I/O 错误。请检查串口配置。");
}
finally
{
if (serialPort.IsOpen)
{
// 关闭串口
serialPort.Close();
Console.WriteLine("串口已关闭。");
}
}
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("接收到的数据: " + indata);
}
}
创建串口对象:
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
这里我们创建了一个 SerialPort 对象,并指定了串口名称(如 "COM1")、波特率(9600)、校验位(无)、数据位(8)和停止位(1)。
打开串口:
serialPort.Open();
使用 Open() 方法打开串口以进行通信。
设置数据接收事件处理程序:
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
当串口接收到数据时,会触发 DataReceived 事件,并调用 DataReceivedHandler 方法来处理接收到的数据。
事件处理程序:
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("接收到的数据: " + indata);
}
在 DataReceivedHandler 方法中,我们从串口中读取接收到的数据并打印到控制台。
异常处理:
使用 try-catch-finally 块来捕获可能发生的异常,例如权限问题或 I/O 错误,并确保在程序结束前关闭串口。
关闭串口:
if (serialPort.IsOpen)
{
serialPort.Close();
Console.WriteLine("串口已关闭。");
}
在程序结束时,确保串口被正确关闭。
上一篇:c# nlog
下一篇:c#获取时间戳
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站