1

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

此外,我从中获得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)
        {
             // ...
        }
    }
4

3 回答 3

1

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

我会看看 SerialPort.ReceivedBytesThreshold。

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

于 2013-02-19T09:54:34.970 回答
0

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

此处提供了更多信息

于 2013-02-18T13:54:13.717 回答
0

您收到了片段,因为 SerialPort.Existing() 执行和完成的时间比您的发送设备发送整个字符串所需的时间更短。

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

于 2013-02-19T12:49:20.443 回答