serialport在收到时提前停止

时间:2011-08-04 09:13:14

标签: c# serial-port

大家好日子,

我的问题如下:

我正在使用serialport与类似zigbee的设备进行通信,但是当我在C#应用程序中发送以下内容时,这是有效的:

(字符串为“0023000D6F000076CF27431e”(图片发送两次)

我从设备中得到答案的一部分(从图片中读取窗口):

send the string twice with different answer

然而,当我通过终端直接向端口发送“0023000D6F000076CF27431e”时,我会让设备回答这个问题: By therminal

这是完全正确的答案。

当然我需要最后一行(其中包含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但似乎这是正确的方法去? 或者不是吗?

有人可以向我解释这种行为吗?

1 个答案:

答案 0 :(得分:1)

这是设计的。 ReadExisting()执行它所说的,它只返回串行端口读缓冲区中存在的字符。串口是非常慢的设备,通常每次ReadExisting()调用只能获得几个字符。当您使用调试器时,这会特别棘手,这会使您的程序大量减速,使串行端口驱动程序有时间接收其他字符。

您可以使用ReadLine(),您将从每个调用的串行终端输出中获得一行文本。这是因为设备正在发送换行作为行终止符(十六进制转储中的0x0a)。删除Sleep()调用,只会让事情变得更糟。