Delphi中常用串口控件簡介:
mscomm:微軟的東西,是VB中帶的一個ActiveX控件,使用簡單,性能一般,由於是ActivX控件,打包時需要注冊好多信息,在Delphi中使用,建議使用VCL控件,編譯程序時直接編入程序中,再不需任何其它處理。
spcomm:比較好的vcl控件,算是比較專業的,解剖了一下,功能比較完善。
TurboPower:公認的專業通訊vcl控件。可以到其站點下載,開放源碼了。
我在制作串口通訊軟件時三種都用過,最終全部使用TurboPower!所以也推薦大家使用它。
寫了個例子,基本的串口通訊都可以實現,可提供參考:
下載基地-》文件名稱:串口通訊控制器
版權聲明:以下本文只允許在本站觀看,不得以任何媒體方式進行傳播。
發表意見請到留言版。
TurboPower串口通訊實際應用:
在串口通訊時有字符和十六進制兩種數據傳輸方式,不論使用哪種方式,只要能正確收到數據就是目的,至於收到數據後如何處理,就要根據具體的情況來定了。
1.接收數據的方法:
輪詢和中斷(利用Windows消息激發事件)。
1)輪詢:每間隔一定的時間查詢一下串口接收緩存中有無數據,有就讀出來。這種方法是很毫資源的,即沒事找事。
2)中斷:在控件中有OnTrigger事件,當串口收到數據後,即觸發此事件,無數據時什麼都不做,在這個事件中接收數據就比較科學了。
所以,提倡使用控件中的OnTrigger事件接收數據。
2.通訊協議的制定:
接收數據的一般處理方法,最基本的思路就是通過協議進行分析,所以協議的制定是至關重要的:
1)首先要確定指令的起始點,從大量的數據流中將指令分離出來,沒有起始標志的話,結果就可想而知了,一串無效的費數據!
2)然後就是指令結束識別點,可以利用指令的長度(如果長度一定或有表示長度的數據)或結束標志來確定,當然還可以利用下一條指令的指令頭。
3)既然頭尾都明確了,指令的截取想來不是什麼問題了吧!但還有一種情況就是數據錯誤是的容錯,如何容錯呢,最簡單的辦法:發現不符合格式的指令,就將其拋掉或特殊處理(如要求重發)一下!
4)有效數據中如果增加一些校驗,通訊將會更加可靠!
例:#(指令頭)**(指令功能)0123456789(有效數據)**(有效數據校驗和)%(指令尾)
注:**代表變動值。
3.接收數據的分析技巧:
通訊協議制定好後,一切將以通訊協議為中心。一套協議中的所有指令可能長度都是統一的,也有可能是長短不同的,並且在OnTrigger事件中實際反應速度及快,可能一條指令數據還沒有完全收齊就已經觸發了此事件,即收到了半截指令,並且有可能繼續收取的數據中除了下半截指令外,還有下一條指令的前半截,如何處理?
我在做這種處理時是利用全局變量,將串口收到的所有數據都收到該串中,然後按指令格式進行截取,發現不合法指令做一下特殊處理(如要求重發)或拋棄。
如收到的數據串為:
#**0000012000**%#**0000000343#**000000540560**%#**0002200000**%
分段截為:
#**0000012000**%
#**0000000343
#**000000540560**%
#**0002200000**%
四條指令,其中:#**0000000343不完整,檢測到後進行拋棄處理。
調試技巧篇:
對於已了解協議的支持串口產品,要想進行編程控制,可以使用“串口通訊控制器”進行調試,以摸清具體實現數據,可按如下步驟進行:
1.確定硬件連接無誤,這是首要條件,如果錯誤將沒有成功的可能;
連線必須正確,必要時可以使用計算機自帶的多個端口相互進行測試,已保證硬件的連接無誤。串口通訊線有9針和25針,多用9針,其中最重要的是2(RXD)、3(TXD)、5(GND)線,對應關系如下:
9針 25針
2 -- 3
3 -- 2
5 -- 7
2.確定通訊參數正確,如:波特率、奇偶校驗位、數據位、停止位等,以及收發的是十六進制還是字符串:
3.以上確保正確,則使用“串口通訊控制器”,按協議輸入數據進行收發控制了。
注意:有的儀器需要進行初始化,即先發一段激活指令,然後才能進入工作狀態,這種設置主要是為了實現利用硬件為軟件加密,即類似加密狗,需要有激活方法才行,不過該類方法使用較少。