大家好日子,
我的问题如下:
我正在使用serialport与类似zigbee的设备进行通信,但是当我在C#应用程序中发送以下内容时,这是有效的:
(字符串为“0023000D6F000076CF27431e”(图片发送两次)
我从设备中得到答案的一部分(从图片中读取窗口):
然而,当我通过终端直接向端口发送“0023000D6F000076CF27431e”时,我会让设备回答这个问题:
这是完全正确的答案。
当然我需要最后一行(其中包含0024部分)。
我认为(我的编程还不是很好)这部分收到了数据:
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{// Event for receiving data
string txt = port.ReadExisting();
Thread.Sleep(10);
List<PlugwiseMessage> msg = reader.Read(Regex.Split(txt, "\r\n"));
DataReceived(sender, new System.EventArgs(), msg);
我用Google搜索了ReadExisting但似乎这是正确的方法去? 或者不是吗?
有人可以向我解释这种行为吗?
答案 0 :(得分:1)
这是设计的。 ReadExisting()执行它所说的,它只返回串行端口读缓冲区中存在的字符。串口是非常慢的设备,通常每次ReadExisting()调用只能获得几个字符。当您使用调试器时,这会特别棘手,这会使您的程序大量减速,使串行端口驱动程序有时间接收其他字符。
您可以使用ReadLine(),您将从每个调用的串行终端输出中获得一行文本。这是因为设备正在发送换行作为行终止符(十六进制转储中的0x0a)。删除Sleep()调用,只会让事情变得更糟。