串列埠通訊應用程式的解決方案 (轉)
中常用串列埠簡介:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 串列埠通訊串列埠
- Android 串列埠通訊Android串列埠
- linux 串列埠通訊Linux串列埠
- 4g路由器解決方案無線CPE串列埠轉WiFi模組的功能與應用路由器串列埠WiFi
- 11. 串列埠通訊串列埠
- (10)uart串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- 串列埠通訊協議串列埠協議
- 通過串列埠進行通訊 :串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 如何使用Java串列埠進行資料通訊及應用案例Java串列埠
- 串列埠無法正常通訊串列埠
- C# SerialPort 串列埠通訊C#串列埠
- 美麗新農村:基於PLC和串列埠通訊的農村汙水物聯網解決方案串列埠
- 多卡聚合路由裝置海上通訊應用解決方案路由
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 安卓串列埠通訊疑問安卓串列埠
- ROS環境下串列埠通訊ROS串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- 小型plc串列埠通訊簡介串列埠
- 乾元通多卡聚合路由裝置海上通訊應用解決方案路由
- Arduino下的STM32的串列埠通訊UI串列埠
- C# 串列埠通訊利器 SerialPortStream庫C#串列埠
- STM32串列埠通訊串列埠
- 工業4G插卡無線路由器解決方案串列埠轉網口通訊TCP/IP協議與UDP協議的區別路由器串列埠TCP協議UDP
- STMF4串列埠通訊使用串列埠
- 乾元通應急救援無線通訊組網解決方案
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠
- 視訊轉碼解決方案
- nodejs埠被佔用原因及解決方案NodeJS
- iOS應用程式瘦身的靜態庫解決方案iOS
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- Lora通訊解決方案對比
- 玩轉dnmp之埠對映問題解決方案
- ros中使用serial包實現串列埠通訊ROS串列埠
- 打工筆記--------------------------c#實現串列埠通訊筆記C#串列埠
- C#實現掃碼槍串列埠通訊C#串列埠
- 有沒有大佬玩過串列埠通訊啊?串列埠