在 C# 中,使用串口通信通常通过 System.IO.Ports 命名空间中的 SerialPort 类来实现。SerialPort 类提供了多种方法来读取串口数据,每种方法在使用场景和功能上有所不同
1. Read 方法
Read 方法从输入缓冲区读取指定数量的字节,并将它们写入指定的数组中。
public int Read(byte[] buffer, int offset, int count)
- 参数:
buffer:用于存储读取数据的字节数组。offset:从buffer中的哪个位置开始写入数据。count:要读取的字节数。
- 返回值:实际读取的字节数。
2. ReadByte 方法
ReadByte 方法从输入缓冲区读取一个字节。
public int ReadByte()
- 返回值:读取的字节,如果已到达流的末尾,则返回 -1。
3. ReadChar 方法
ReadChar 方法从输入缓冲区读取一个字符。
public int ReadChar()
- 返回值:读取的字符,如果已到达流的末尾,则返回 -1。
4. ReadLine 方法
ReadLine 方法从输入缓冲区读取一行数据,直到遇到换行符(\n)或文件结束。
public string ReadLine()
- 返回值:读取的字符串,如果已到达流的末尾,则返回
null。
5. ReadTo 方法
ReadTo 方法从输入缓冲区读取数据,直到遇到指定的字符串。
public string ReadTo(string value)
- 参数:
value:终止读取的字符串。 - 返回值:读取的字符串,如果已到达流的末尾,则返回
null。
6. ReadExisting 方法
ReadExisting 方法从输入缓冲区读取所有可用的数据。
public string ReadExisting()
- 返回值:读取的字符串。
使用示例
以下是一个简单的示例,展示了如何使用 SerialPort 类的不同读取方法:
using System;
using System.IO.Ports;
public class SerialPortExample
{
public static void Main()
{
// 创建 SerialPort 实例
using (SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One))
{
// 打开串口
serialPort.Open();
// 读取数据
try
{
// 读取一行数据
string line = serialPort.ReadLine();
Console.WriteLine("读取到的行: " + line);
// 读取指定数量的字节
byte[] buffer = new byte[10];
int bytesRead = serialPort.Read(buffer, 0, buffer.Length);
Console.WriteLine("读取到的字节数: " + bytesRead);
Console.WriteLine("读取到的字节: " + BitConverter.ToString(buffer, 0, bytesRead));
// 读取一个字节
int byteValue = serialPort.ReadByte();
Console.WriteLine("读取到的字节: " + byteValue);
// 读取所有可用的数据
string existingData = serialPort.ReadExisting();
Console.WriteLine("读取到的所有数据: " + existingData);
}
catch (TimeoutException)
{
Console.WriteLine("读取超时");
}
finally
{
// 关闭串口
serialPort.Close();
}
}
}
}
总结
Read:适用于需要读取指定数量字节的场景。ReadByte:适用于需要读取单个字节的场景。ReadChar:适用于需要读取单个字符的场景。ReadLine:适用于需要读取一行数据的场景。ReadTo:适用于需要读取到指定字符串的场景。ReadExisting:适用于需要读取所有可用数据的场景。

1万+

被折叠的 条评论
为什么被折叠?



