本站小編為你精心準備了GPRS模塊的應用技巧參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
《電氣時代》2014年第五期
一、應用技術和特點
目前,微控制器與gprs模塊之間的互動操作大部分采用通用異步串行數據接口實現,微控制器通過串口發出AT指令,接收GPRS模塊的指令應答和數據,實現對模塊的控制和數據傳輸。與早期GSM模塊不同,目前的GPRS模塊在實現語音和短信通信的基礎上,大部分都內嵌TCP/IP協議棧,可以直接實現與后臺服務器之間的數據傳輸功能。以數據傳輸為例,說明GPRS模塊以TCP/IP協議進行數據通信時,要經過3個操作過程。1)建立連接。一般來說都是客戶端主動向服務器端的IP和端口發出連接請求,而服務器端偵聽指定的端口,等待客戶端的連接請求并且進行回應建立連接。2)數據收發。利用已經建立的鏈路進行數據收發。可以使用單幀數據包的傳輸,通常一幀可以包含1KB左右。也可以使用“透明傳輸”模式,將串口收到的所有字符和數據原封不動地按照TCP/IP協議打包發送到遠方服務器。3)連接釋放。當所有數據都收發完成,就需要切斷與后臺服務器的連接,釋放通信信令和后臺服務器的資源。但在某些場合,也可一直保持與后臺的連接過程,即“永遠在線”,但在沒有數據傳輸的間隙內,需要通過“心跳”數據包來維持與后臺的連接,否則在一定空閑后通信網絡將自動回收空閑的資源。
二、軟件應用方案
在使用GPRS模塊進行設備開發過程中,逐漸發現以下的幾個特點。1)使用串口與模塊的通信過程中,存在長度不定的通信幀需要區分,如果不能可靠地分斷各幀數據就不可能正常運行。2)由于涉及到外部網絡的通信過程,微控制器與GPRS模塊通信過程中存在應答延遲的情況,而且延遲的時間長短隨機。如果缺乏合理的應對機制,則可能會影響到程序中其他進程的工作。下面就遇到的兩個主要問題進行分析,并提出一種可能的解決方案進行討論。
1.分割數據幀對于來自GPRS模塊的數據幀長度不定的情況,一般有以下兩種方式解決。1)對于串口具備硬件緩存或DMA以及空閑中斷的微控制器,可以使用足夠長度的緩存進行接收,并配合空閑標志進行判斷,該方案可以最大程度地釋放CPU的資源,對于CPU負荷較重的場合比較合適。但該方案對MCU的外設資源有一定的要求,使得該方案受到一定的限制,而且對延時判斷時間的控制也缺乏靈活性。2)在硬件條件不成熟的情況下,借鑒Modbus協議的3.5字符時間作為幀分斷的思路,以一定的延遲時間作為判斷數據幀完成的標志。具體來說,在串口接收到第一個字節后,啟動已經設定的定時器,并且在每次收到新的字節后都清空該定時器。幀數據接收完成后最后一次清除定時器,等待定時器溢出并產生中斷,報告一幀數據接收完成。由于大部分的微控制器都具備串口和定時器等外設,該方案具有更大的普遍意義。另外,在開發調試過程中,同一條AT指令的應答返回數據,可能被分斷為兩個甚至三個段發送回來,中間的間隔可能比MCU串口的硬件產生的空閑中斷判據要大,可能存在接收不完整的情況。由于可以靈活設置定時器的超時范圍,對不同廠家的GPRS模塊具備更好的適應能力。
2.GPRS模塊的操作機制嘗試了2種不同的處理架構,分別是有限狀態機方式和優先級消息方式。兩種方式各有千秋,分別適應與不同的應用模式,同時,作為一種設計思路,還可以應用于更多的場合。(1)有限狀態機方式由于GPRS模塊的操作是由一系列的請求和應答指令配合完成,部分操作流程中“指令-應答”之間的順序存在嚴格要求。但在涉及與外部網絡通信的情況下,應答的延遲情況難以判斷。為了嚴格遵循流程操作,同時為了避免由于不定延遲導致系統過長等待而影響其他進程的執行,在GPRS模塊的操作中引入“有限狀態機”的方式,每一步操作成為一個狀態,包含:當前狀態,當前狀態下收到的各類消息及轉向的下一狀態,和當前狀態需要執行的動作。若干個操作形成的序列就轉換為一系列順序流轉的狀態,所有的狀態集合成為“狀態矩陣”,如下圖1所示。程序進入狀態機,如果收到新的消息,則與已經發出的指令的規定應答相比較,判斷相同則可以按照“狀態矩陣”規定的路線轉移。直至正確收到本序列最后一條指令的應答,結束本流程操作返回空閑狀態。以圖2為例進行說明。對于比較簡單的數據傳輸任務,本方案可以較好實現,尤其對于后續應答或操作不明確的場合比較適合。例如,在人機交互過程中,由于操作人員可能隨意操作按鍵,對鍵盤的響應過程可能出現大量不可預計的操作,利用狀態矩陣就可為每一個狀態下每一個按鍵消息進行約束,可以從容地應對各種可能出現的情況。對GPRS模塊的操作由于涉及到外部網絡的互動過程,有時候也會存在一些“意料之外”的情況,采用該方案能較好地控制異常的流程。但對于需要雙向數據通信的需求來說,存在一定的風險,即“流程交叉”的情況。舉例來說,如果當前正在執行一次數據發送流程,其中進行到第2步,此時如果收到一條短信數據,則可能驅動狀態機轉入短信接收流程。如果之后收到數據發送流程第2步的應答,則狀態機可能陷入混亂。雖然發生這種極端情況的概率非常小,但系統中始終暗藏這種的風險。如果要避免發生這樣的混亂,就必須再進一步加入狀態流程的掛起機制,必然會使得整個機制變得更加復雜。(2)優先級消息方式結合“指令-應答”結構體(RA)及表達序列流程的RA數組,數據的組成方式如圖3所示。頂層的“操作流程”由一系列的RA組成,比如一次“透傳流程”就包括:打開鏈接指令及應答,啟動透傳指令及應答,發起傳輸指令及應答,關閉透傳指令及應答,關閉連接指令及應答等5個步驟。且每一個步驟又涉及:發出的指令和各種情況的應答。在程序方面,采用帶有優先級的消息控制的方式,以一種簡潔的方式高效實現四種不同操作:數據收/發與短信收/發。進入GPRS處理流程,首先判斷是否收到新的消息,如果收到消息則按照一定順序判斷收到消息是否為收短信或收數據并按標記掛起,然后判斷當前是否存在正在執行的流程,并將收到的應答與RA中的正確應答進行比較判斷,并按序列推動狀態在RA數組內部流轉。如果沒有收到任何消息,且不存在任何正在執行的流程,則按照:發數據,收短信,收數據和發短信的優先級順序檢查是否存在掛起的事件,并啟動相應的流程。比如,如果存在正在執行的流程而沒有收到應答,則轉入對應的流程超時管理機制,對不同的流程分別進行超時控制,并在超時發生的時候產生標記,然后清空當前正在執行流程的指針,轉入空閑等待狀態。消息處理的過程如圖4所示。
三、結束語
通過采用以上機制,以一種簡潔的方式實現了比較復雜的數據傳輸任務,較好地實現對GPRS模塊控制。在實際測試過程中表現穩定,對網絡和通信環境的適應能力較強。另外,類似的方案,也可以滿足多種應用情況。
作者:陳杭張帆付克勤楊靖單位:重慶市黔江供電有限責任公司重慶市電力公司璧山供電局重慶櫻花電氣開關有限公司