使用SerialPort的DataReceived事件

时间:2013-02-18 13:42:35

标签: c# com serial-port

我试图在PC上的COM端口上读取设备的输出。 我写了一个C#程序来做到这一点。 使用PuTTY,我可以看到我希望从我的设备输出的输出。 问题是我的SerialPort.ReadExisting();函数中的函数DataReceived给出了一个完全不同的字符串。 使用SerialPort从COM端口读取的正确方法是什么?

此外,我从SerialPort.ReadExisting();获得的字符串是我发送给设备的字符串的片段。

以下是初始化SerialPort

的代码
    SerialPort port;

    void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string data = port.ReadExisting();
    }

    void init_serialport(object sender, EventArgs e)
    {
        if (port != null)
        {
            port.Close();
        }

        port = new SerialPort( /* ... */ );
        port.BaudRate = 9600;
        port.Parity = Parity.None;
        port.DataBits = 8;
        port.StopBits = StopBits.One;
        port.Handshake = Handshake.RequestToSend;

        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

        try
        {
            port.Open();
        }
        catch (Exception ex)
        {
             // ...
        }
    }

3 个答案:

答案 0 :(得分:1)

  

我从SerialPort.ReadExisting()获得的字符串;是我发送到设备的字符串的片段。

我看一下SerialPort.ReceivedBytesThreshold。

“获取或设置DataReceived事件发生之前内部输入缓冲区中的字节数。”

答案 1 :(得分:0)

我首先看看port对象的Read方法,查看原始字节并验证它们是否符合您的期望,然后将问题缩小到转换为字符串时的编码。

提供了有关此内容的更多信息here.

答案 2 :(得分:0)

您收到了片段,因为SerialPort.Existing()在较短的时间内执行并完成,然后您的发送设备需要发送整个字符串。

如果字符串有一个字符串,则需要连续重复调用或直到收到字符串结尾。