c# - 串行端口的 Readline 锁定

标签 c# serial-port

我正在尝试从秤 RS232 接口(interface)读取数据。它通过串行端口发送一个连续的 ASCII 字符串流,我很难得到。我只想获取它发送的数据的一行。我想我假设我会使用 Readline 来获取数据,但它只是在我运行它时锁定了 PC。我认为它正在尝试获取所有数据并且在数据停止之前不会停止?这是我正在使用的代码:

private void button1_Click(object sender, EventArgs e)
    {
        serialPort1.PortName = "COM4";
        serialPort1.BaudRate = 9600;
        serialPort1.DataBits = 8;
        serialPort1.Parity = Parity.None;
        serialPort1.StopBits = StopBits.One;

        //opening the serial port
        serialPort1.Open();

        string str = serialPort1.ReadLine();

        MessageBox.Show(str);

        serialPort1.Close();

    }

你能帮我确定如何只获取一行输出数据并关闭连接吗?

最佳答案

SerialPort.ReadLine被定义为阻止“直到第一次出现 NewLine 值”,其中 NewLine默认为换行。您是否在流中发送换行符?请注意,换行符 (ASCII 0x0A) 与您可能发送的回车符 (ASCII 0x0D) 不同。

如果需要,您可以重新定义换行符,或者如果感觉行尾不正确,您可以使用 SerialPort.ReadTo 读取给定的字符串。 .您还可以设置 read timeout .

您可能更喜欢使用 SerialPort.Read 之一从端口读取给定数量的字节,而不是一行。过载。

如果这些都不适用,请确保您实际上是在您认为自己所在的位置发送数据 - 打开 HyperTerminal/TeraTerm/您最喜欢的串行终端,使用与上面使用的相同的串行端口设置对其进行配置,并确保您看到的是您希望看到的数据。

关于c# - 串行端口的 Readline 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3794826/

相关文章:

javascript - IHttpActionResult 不会返回 JSON 对象

c# - 筛选excel表格

c# - 不使用 ThreadPool 的 C# 中的周期性任务

c - Linux 串行端口 (tty) 重定向

c++ - 如何在 C++ 中处理完整的 CircularBuffer

c# - 企业环境中的自动更新 (C#)

c# - 文档设计 - 更新评论

c - 串行端口输入缓冲区的字节数

java - 为什么我的 Java 程序没有从 Arduino 获取串行信息?

C# 在另一个函数中打破其他函数循环