从串行端口读取二进制数据

时间:2010-04-16 19:01:04

标签: c# .net binary serial-port

我之前使用C#通过串口从GPS读取NMEA数据。现在我正在做类似的事情,但不是串口的GPS。我正在尝试阅读TNC的KISS声明。我正在使用这个事件处理程序。

comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

这是port_DataReceived。

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

        sBuffer = data;

        try
        {
            this.Invoke(new EventHandler(delegate { ProcessBuffer(sBuffer); }));
        }
        catch { }
    }

我遇到的问题是每个语句多次调用该方法。所以只使用部分语句调用ProcessBuffer方法。我怎么能读完整个陈述?

3 个答案:

答案 0 :(得分:2)

串行通信允许使用超时将数据流分解为消息。但是跟随 KISS TNC此协议中没有提供此类功能。

  

每个帧都在前面和   然后是特殊的FEND(帧结束)   字符,类似于HDLC标志。   没有提供CRC或校验和。在   此外,没有RS-232C握手   使用信号。

我的建议是通过解码帧结束字符来将数据流分解为消息。

答案 1 :(得分:0)

volody是对的:您必须查找FEND(0xC0),并且只在您看到它时尝试处理缓冲区。

答案 2 :(得分:0)

见这个

Serial 101