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