从串口读取时C#的问题

时间:2010-10-13 20:53:22

标签: c#

我在C#中遇到串口读取器问题。

如果我通过串口发送5555,则程序打印出555。 这是程序

public static void Main()
{
    byte[] buffer = new byte[256];
    string buff;
    using (SerialPort sp = new SerialPort("COM2", 6200))
    {
        sp.Open();
        //read directly
        sp.Read(buffer, 0, (int)buffer.Length);
        //read using a Stream
        sp.BaseStream.Read(buffer, 0, (int)buffer.Length);
        string sir = System.Text.Encoding.Default.GetString(buffer);
        Console.WriteLine(sir);

2 个答案:

答案 0 :(得分:1)

您需要使用“Read”方法返回的int。返回的值将告诉您实际读取了多少字节。您可能需要循环并多次调用“Read”,直到您已经读取了所需的字节数。

更新: This other question有一些示例代码,显示如何多次读取,直到您有足够的数据进行处理。

答案 1 :(得分:1)

您的计算机和其他设备的UART都可能有一个硬件缓冲区,该缓冲区根据为连接启用的实际硬件控制传递数据。因此你必须照顾:

  • 硬件控制流程设置;
  • 数据读/写的时间;

请记住,您正在使用具有自己的时序的实时硬件设备,需要您的应用程序遵守。与硬件设备通信是进程。换句话说,一次性读取可能不足以检索逻辑级别上您期望的所有输入。

更新: Google针对“SerialPort教程C#”并研究其中的一些,例如this one