串列埠通訊應用程式的解決方案 (轉)
中常用串列埠簡介:
mmm:的東西,是VB中帶的一個控制元件,使用簡單,一般,由於是ActivX控制元件,打包時需要註冊好多資訊,在Delphi中使用,建議使用VCL控制元件,編譯時直接編入程式中,再不需任何其它處理。
spcomm:比較好的vcl控制元件,算是比較專業的,解剖了一下,功能比較完善。
TurboPower:公認的專業通訊vcl控制元件。可以到其站點,開放原始碼了。
我在製作串列埠通訊時三種都用過,最終全部使用TurboPower!所以也推薦大家使用它。
寫了個例子,基本的串列埠通訊都可以實現,可提供參考:
下載基地-》名稱:串列埠通訊控制器
版權宣告:以下本文只允許在本站觀看,不得以任何方式進行傳播。
發表意見請到留言版。
TurboPower串列埠通訊實際應用:
在串列埠通訊時有字元和十六進位制兩種資料傳輸方式,不論使用哪種方式,只要能正確收到資料就是目的,至於收到資料後如何處理,就要根據具體的情況來定了。
1.接收資料的方法:
輪詢和中斷(利用訊息激發事件)。
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.以上確保正確,則使用“串列埠通訊控制器”,按協議輸入資料進行收發控制了。
注意:有的儀器需要進行初始化,即先發一段啟用指令,然後才能進入工作狀態,這種設定主要是為了實現利用硬體為軟體,即類似加密狗,需要有啟用方法才行,不過該類方法使用較少。
原創作者:JPYC,望業界專家多多指正!
本文主要控制元件/例程下載可以到作者主頁免費下載:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-959461/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 串列埠通訊 (轉)串列埠
- 用VB除錯串列埠通訊 (轉)除錯串列埠
- VC++ 的串列埠通訊 (轉)C++串列埠
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠通訊串列埠
- VC++串列埠通訊程式設計詳解C++串列埠程式設計
- 序列通訊的基本原理及用MFC實現串列埠通訊程式設計 (轉)串列埠程式設計
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- VC++串列埠程式設計之簡訊應用開發(轉)C++串列埠程式設計
- C#串列埠通訊程式SerialPort類C#串列埠
- linux 串列埠通訊Linux串列埠
- 串列埠通訊協議串列埠協議
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- 4g路由器解決方案無線CPE串列埠轉WiFi模組的功能與應用路由器串列埠WiFi
- 通過串列埠進行通訊 :串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 詳解linux下的串列埠通訊開發Linux串列埠
- Qt編寫串列埠通訊程式全程圖文講解(一)QT串列埠
- Qt編寫串列埠通訊程式全程圖文講解(二)QT串列埠
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- 串列埠無法正常通訊串列埠
- C#串列埠通訊遇到的坑C#串列埠
- 美麗新農村:基於PLC和串列埠通訊的農村汙水物聯網解決方案串列埠
- Android USB 轉串列埠通訊開發基本流程Android串列埠
- 多卡聚合路由裝置海上通訊應用解決方案路由
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- ROS環境下串列埠通訊ROS串列埠
- Android藍芽串列埠通訊Android藍芽串列埠
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- 乾元通多卡聚合路由裝置海上通訊應用解決方案路由
- .NET Compact Framework下的串列埠通訊Framework串列埠
- Rational的Linux應用程式開發解決方案(轉)Linux
- Vue 元件通訊的解決方案Vue元件