2

我想通过 readline() 从串行端口文本行读取
文本是 ASCII 并且在终端中一切正常(数据非常好),但是当我通过 readline 读取时,它会返回文本中的某个位置?示例 - 这是常规的:

!!!;34;248;45;215;43;226;33;235;32;240;35;250;36;240;37;246;40;263;41;272;42;261;39;270;44;256;47;241;49;8888;50;8888;38;245;46;460;48;363

这将返回 readline() :

!!!;34;248;45;215;43;226;?33;235;32;240;35;250;36;240?;37;246;40;263;41;272;42;261?;39;270;44;256;47;241;49;888?8;50;8888;38;245;46;460;48;3?63

代码很简单:

this.serialPort1.PortName = "COM3";    
this.serialPort1.BaudRate = 19200;                     
this.serialPort1.Parity = System.IO.Ports.Parity.Mark; 
this.serialPort1.Open();

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    prectenyRadek=this.serialPort1.ReadLine();
    this.Invoke(new EventHandler(DisplayText));
}

private void DisplayText(object sender, EventArgs e)
{
    richTextBox1.AppendText(prectenyRadek);    
}

有没有人知道,什么以及为什么加我“?”

4

2 回答 2

1

问题是平价。当我将奇偶校验从 Mark 切换到 Space 时,它​​开始正常工作。(我的行之间的数据是奇偶校验标记,但这条线没有某处 9 位)。

于 2012-07-31T04:59:20.223 回答
1

“如果秤发送二进制数据,则编码属性很重要。默认值为 ASCII,因此如果二进制数据中的字节 >= 128,则会生成很多问号。在这种情况下,您应该使用 Read() 而不是 ReadLine( ). 你想用哪个来开始解决这个问题,你想查看原始字节值,从问号看不到太多。特别注意你从 a 得到的最后一两个字节阅读,他们应该很好地重复。”

来源:SerialPort.ReadLine() 返回垃圾

于 2012-07-30T07:42:38.540 回答