C# serialport在接收时提前停止

C# serialport在接收时提前停止,c#,serial-port,C#,Serial Port,大家好 我的问题如下: 我正在使用serialport与zigbee类设备进行通信,但当我在C#app中发送以下内容时,该设备仍在工作: (字符串为“002300D6F000076CF27431E”(图片中发送两次) 我从仪器中得到部分答案(从图片中读取窗口): 但是,当我通过终端将“002300D6F000076CF27431E”直接发送到端口时,我让设备回答这个问题: 这是完全正确的答案 当然,我需要最后一行(其中包含0024部分) 我认为(我在编程方面还不是很好)这部分收到的数据: p

大家好

我的问题如下:

我正在使用serialport与zigbee类设备进行通信,但当我在C#app中发送以下内容时,该设备仍在工作:

(字符串为“002300D6F000076CF27431E”(图片中发送两次)

我从仪器中得到部分答案(从图片中读取窗口):

但是,当我通过终端将“002300D6F000076CF27431E”直接发送到端口时,我让设备回答这个问题:

这是完全正确的答案

当然,我需要最后一行(其中包含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);
private void port\u DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{//用于接收数据的事件
string txt=port.ReadExisting();
睡眠(10);
List msg=reader.Read(Regex.Split(txt,“\r\n”);
DataReceived(发送方,new System.EventArgs(),msg);
我在谷歌上搜索了ReadExisting,但似乎这是正确的方法???? 还是不是


有人能给我解释一下这种行为吗?

这是设计的。ReadExisting()按照它所说的做,它只返回串行端口读取缓冲区中存在的字符。串行端口是非常慢的设备,通常每个ReadExisting()只能得到几个字符这在使用调试器时尤其棘手,调试器会大大降低程序的速度,让串行端口驱动程序有时间接收更多字符


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

好的,那是什么?那是你的程序的屏幕转储?还是标准终端?你也写发送代码吗?你好,亨克,屏幕转储来自串行端口监视器。汉斯,你是对的!!但是我现在有另一个问题:在te设备的答案中有4个“0d0a”行终止符。我怎样才能找到第四个?你不明白答案。第四个终止符还没有发送。设置SerialPort.NewLine=“\r\n”并使用ReadLine(),你会没事的。这是一个异常错误(我没有提到)(我的错)用于接收字符串,这不是程序所期望的。目前ReadExisting仍在工作。