gpt4 book ai didi

C#串口读取错误

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:35 24 4
gpt4 key购买 nike

我正在开发一款软件,它读取通过 COM 端口发送的数据并在实时图形和文本框中显示值(用于调试)。一开始读起来还不错,但突然其中一个数字分成两部分。像这样:

63 - 64 - 65 - 66 - 67 - 6 - 8 - 69 - 70 - 80

应该是 68。这让图表全错了!

这是什么原因?

我的代码如下:

   private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(RxString);
textBox1.AppendText(" - ");

}



private void comPort_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
RxString = comPort.ReadExisting();
this.Invoke(new EventHandler(DisplayText));

newRead = Convert.ToDouble(RxString);
AddDataToGraph(zedGraph, howfar, newRead);
howfar++;


}

提前致谢。

最佳答案

无法保证您将获得多大的数据 block ....

它可以一次获取字符,也可以一次获取多个字符。

通常,永远不要依赖时间来计算逻辑“ block ”(在您的情况下为数字)之间的差异。而是创建一个您可以解释的协议(protocol)。

在你的情况下,如果你有一个非常简单的协议(protocol),你发送一个数字 [space] number [space] number 然后你可以解析出

例如...

RxString += comPort.ReadExisting();  // add to an existing string
if(RxString.Contains(" ") // ok, there is a space, so we can parse out a number
{
// parse...
newRead = Convert.ToDouble(RxString.Substring(0,RxString.IndexOf(" "));
RxString = RxString.Remove(0,RxString.IndexOf(" ")+1;
AddDataToGraph(zedGraph, howfar, newRead);
howfar++;
}

如果您使用的是 123,123,234,123,343\n

    RxString += comPort.ReadExisting();  // add to an existing string
if(RxString.Contains("\n") // ok, there is a linefeed, so we can parse out all the numbers
{
// parse...
var line = RxString.Substring(0, RxString.IndexOf("\n"));
var values = line.Split(new char[] {','}, StringSplitOptions.None).ToList();
values.ForEach(v => AddDataToGraph(zedGraph, howFar, Convert.ToDouble(v)));
RxString = RxString.Remove(0, RxString.IndexOf("\n"));
howfar++;
}

关于C#串口读取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8979811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com