我希望通过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);
}
有没有人有想法,为什么以及为什么加我“?”
答案 0 :(得分:1)
“如果比例发送二进制数据,则编码属性很重要。默认为ASCII,因此如果二进制数据中的字节数> = 128,则生成大量问号。在这种情况下,您应该使用Read()而不是ReadLine()。你想用什么来开始解决这个问题,你想要查看原始字节值,你不能从问号中看到太多。要特别注意最后一个或两个字节你从阅读中得到的,他们应该重复一遍。“
答案 1 :(得分:1)
问题是平价。当我从Mark切换到Space时,它开始工作正常。 (我的行之间的数据是奇偶校验标记,但这行不在9位)。