C#串口通讯,保存数据
时间: 2025-01-08 16:06:31 浏览: 5
### C# 串口通信示例代码
为了实现C#中的串口通信并将接收到的数据保存至文件,下面提供了一个完整的例子。此代码展示了如何配置`SerialPort`实例、监听数据接收事件以及将这些数据存储到本地文件。
#### 配置并打开串口连接
```csharp
using System;
using System.IO.Ports;
class Program {
static SerialPort _serialPort;
public static void Main() {
// 创建一个新的SerialPort对象,并设置其属性
_serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
try {
_serialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
_serialPort.Open();
Console.WriteLine("串口已打开");
while (_serialPort.IsOpen) {
// 主线程保持活动状态以便持续监听输入
System.Threading.Thread.Sleep(100);
}
} catch (UnauthorizedAccessException ex) {
Console.WriteLine($"无法访问端口: {ex.Message}");
} catch (IOException ex) {
Console.WriteLine($"I/O 错误发生: {ex.Message}");
} finally {
if (_serialPort != null && _serialPort.IsOpen)
_serialPort.Close();
}
}
/// <summary>
/// 当有新数据到达时触发的方法.
/// </summary>
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) {
var sp = (SerialPort)sender;
string receivedData = sp.ReadExisting();
SaveDataToFile(receivedData);
}
/// <summary>
/// 将给定字符串形式的数据追加写入指定路径下的文本文件中.
/// </summary>
private static void SaveDataToFile(string dataToWrite) {
const string filePath = @"D:\received_data.txt";
try {
using (var sw = new StreamWriter(filePath, append: true, encoding: Encoding.UTF8)) {
sw.Write(dataToWrite);
}
} catch (Exception ex) {
Console.Error.WriteLine($"未能成功记录日志 ({filePath}): {ex.Message}");
}
}
}
```
这段代码实现了基本的串口通讯功能[^2],并且每当检测到来自外部硬件的新消息时就会调用`SerialPort_DataReceived`函数来处理传入的信息流[^3]。此外,在这个过程中还包含了错误捕捉机制用于应对可能发生的异常情况,比如尝试打开已经被占用或者其他原因不可用的端口等问题[^4]。
阅读全文