serialport readline()添加问号“?”

时间:2012-07-30 07:37:46

标签: c# serial-port readline

我希望通过readline()来读取serialport的文本行 文本是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);    
}

有没有人有想法,为什么以及为什么加我“?”

2 个答案:

答案 0 :(得分:1)

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

来源:SerialPort.ReadLine() returns garbage

答案 1 :(得分:1)

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