我正在尝试从秤 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/