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