最近在做的項目中涉及到串口通信編程,隊友在做這一模塊的時候遇到了一個相信很多人都可能遇到的問題,那就是接受數據的沖突或者丟失。隊友讓我幫他調試的時候,足足花了近兩個小時才把問題給解決了,現覺得有必要總結一下以給遇到類似問題的朋友一個思路吧~
問題是這樣的,從相應的硬件設備每隔2秒便發送一個大小為15的字節數據,存的是16進制數據,每條數據以7E開頭以7E結尾。例如:7E 09 01 1A ... 7E。但是PC端在接受顯示的時候卻出現了問題,如前五個數據接受正常,接下來的都是以00填充,而剩下的10個數據卻出現在下條數據顯示的位置。如下所示:
7E 09 01 1A 5C 00 00 00 00 00 00 00 00 00 00 /////// 03 06 1A 2C 3D 09 6C 32 12 7E 00 00 00 00 00 00/////// ........
總之感覺錯位了,對了,先把PC端代碼貼一下吧:
public partial class Form1 : Form
{
/// <summary>
/// 接受數據的串口類
/// </summary>
SerialPort spReceive;
delegate void ReceivData(byte[] bytes);
public Form1()
{
Form1.CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
spReceive =new SerialPort("COM5", 57600, Parity.None, 8, StopBits.One);
spReceive.Open();
//設置觸發DataReceived事件的閥值,在調試中發現這個不起作用,不解~
spReceive.ReceivedBytesThreshold =15;
spReceive.DataReceived +=new System.IO.Ports.SerialDataReceivedEventHandler(spReceive_DataReceived);
}
/// <summary>
/// 更新接受到得數據到UI界面顯示
/// </summary>
/// <param name="bytes"><