我之前使用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方法。我怎么能读完整个陈述?
答案 0 :(得分:2)
串行通信允许使用超时将数据流分解为消息。但是跟随 KISS TNC此协议中没有提供此类功能。
每个帧都在前面和 然后是特殊的FEND(帧结束) 字符,类似于HDLC标志。 没有提供CRC或校验和。在 此外,没有RS-232C握手 使用信号。
我的建议是通过解码帧结束字符来将数据流分解为消息。
答案 1 :(得分:0)
volody是对的:您必须查找FEND(0xC0),并且只在您看到它时尝试处理缓冲区。
答案 2 :(得分:0)
见这个