Serial Port通訊檢測

最近在MSDN論壇上有幾位網友問到關於Serial Port通訊的問題,以前我也相同的困擾,當程式發送了一個命令給設備後,倒底是設備根本沒有回應?還是回應時間太慢?還是程式命令沒送出去?還是設備根本就有問題?過去常為了這個問題常常修改程式搞了半天,總是花了一堆時間還一頭霧水。

        最近在MSDN論壇上有幾位網友問到關於Serial Port通訊的問題,以前我也有相同的困擾,當程式發送了一個命令給設備後,倒底是設備根本沒有回應?還是回應時間太慢?還是程式命令沒送出去?還是設備根本就有問題?過去常為了這個問題常常修改程式搞了半天,總是花了一堆時間還一頭霧水。後來我就寫了一個這樣的程式,使用另一部電腦﹝或是另一個Serial Port﹞來接收所有的傳送資料,藉以分析資料傳遞過程的問題。

        右方的圖是一個簡單的接線示意圖,因為我接觸的多半是RS485的設備,所以圖也是主要介紹RS485的接法。當然,各位網友也可只用一部電腦執行,只要接到不同的Serial Port就可以了。

       PC#1代表著網友自己撰寫的程式所使用的電腦,PC#2代表著使用通訊檢測程式的電腦;如此一來,當我們從PC#1發訊息給設備,或是設備回應訊息給電腦之時都可以在PC#2的檢測程式畫面上觀察到相關的資料。

 

 

 

 

 

 

       左邊的圖是程式的初始畫面,先將Serial Port的相關資訊先設定完成,按下「開始監聽」Button,程式就會開始接收所收到的資料,並顯示於表單左方的DataGridView中。若要停止監聽,就按下「停止監聽」Button。

 

 

 

 

        DataGridView1主要顯示三個欄位,第一個欄位是代表接收順序的序號;第二個欄位代表的是接收到資料的時間;第三個欄位代表所接收到資料的長度。

      當選擇了DataGridView的某一個資料列後,表單右上方的TextBox會顯示出此筆資料的ASCII字元﹝因為測試接收的都是Byte資料,所以這個示範畫面有怪字﹞;而表單右下方的TextBox會顯示出出此筆資料的個別字元的Byte值。

        所以可以藉由這個程式判斷出整段資料是否完整傳回,整個的回傳過程大約要花費多少時間來做為程式修改上的參考。

        這個程式主要是應用.NET Framework中的SerialPort類別,並使用SerialPort.DataReceived 事件自動處理資料接收的過程。DataGridView部份則搭配了BindingSource類別的應用,並且利用Control.Invoke方法來處理跨執行緒委派。

       這一篇的小程式可以在下方的連結下載,有興趣的同好們可以下載來試試或修改,這個程式或有不周全之處,還望各位同好可予以小弟指教,讓這個程式能夠更完善一些。SerialMonitor2.rar

《2009/04/30註記》原有程式有個地方下錯參數[strByteString &= Microsoft.VisualBasic.Strings.Right(("00" & CStr(myByte)), 3) & " "] 粗體字部份,原程式誤寫為2。今日重新上傳新修改的程式,並增加Byte讀取。