范林濤
(河北遠東通信系統(tǒng)工程有限公司,河北 石家莊 050200)
基于正則表達式的AT命令協(xié)議棧設(shè)計
范林濤
(河北遠東通信系統(tǒng)工程有限公司,河北石家莊050200)
AT命令廣泛應(yīng)用于各種無線通信移動臺及控制終端,基于其字符串特性及正則表達式處理字符串的優(yōu)異能力,設(shè)計并實現(xiàn)了一款與所在設(shè)備無關(guān)的AT命令協(xié)議棧以及協(xié)議棧的架構(gòu)、AT命令的正則表達式模式字符串和表驅(qū)動AT命令處理機制,介紹了AT命令及正則表達式的基本概念及使用方法,極大地簡化了程序設(shè)計和提高了程序的可維護性,通過實際應(yīng)用證明了AT命令協(xié)議棧的可用性及易用性。
AT命令正則表達式協(xié)議棧表驅(qū)動
AT命令是從終端設(shè)備(Terminal Equipment,TE)向終端適配器(Terminal Adapter,TA)發(fā)送的用于控制移動臺(Mobile Station,MS)與無線通信網(wǎng)絡(luò)基站(Base Station,BS)進行通信的指令[1]。用戶可以通過AT命令控制移動臺進行呼叫、短消息、分組數(shù)據(jù)、傳真等業(yè)務(wù)的操作。在無線通信領(lǐng)域,無論是公網(wǎng)(例如GSM、CDMA)還是專用集群(Tetra、PDT)設(shè)備均支持AT命令,3GPP(3rd Generation Partnership Project)明確的定義了標準的AT命令集。
AT命令以ASCII字符“AT”作為起始,換行字符為結(jié)束的字符串,中間包含著AT命令及其攜帶的控制或響應(yīng)參數(shù)。每條命令執(zhí)行成功與否都有相應(yīng)的返回,例如成功、被較忙、無空口服務(wù)等[2]。
基于AT命令的字符串本源特性,AT命令的解析不可避免的涉及到大量字符串的操作,而AT命令集中包含的大量AT命令可以抽象出一定的格式,或者說模式,而正則表達式則是處理字符串模式的最優(yōu)工具。正則表達式定義了一種“規(guī)則字符串”,它使用字符集與特殊字符組成一種字符串描述的“模式”,用于匹配具有相同“模式”的字符串[2]。
2.1AT命令協(xié)議棧
AT命令傳輸?shù)牧鞒倘鐖D1所示,用戶(人或可執(zhí)行程序)在TE輸入AT命令及其參數(shù),經(jīng)過AT協(xié)議棧編碼為對應(yīng)的AT命令,通過串口到達MS,隨后經(jīng)過AT協(xié)議棧解碼進入MS的主控模塊,主控模塊控制空口協(xié)議棧進行無線數(shù)據(jù)的發(fā)送[3];從空口收到的數(shù)據(jù)將會經(jīng)過一個反向的流程到達TE[4]。當(dāng)然用戶可以直接向MS的串口寫入AT命令。
圖1 AT命令傳輸流程圖
AT命令的格式具有以下基本規(guī)則:①執(zhí)行指令沒有操作符,移動終端執(zhí)行該命令并返回結(jié)果;②設(shè)置指令后緊跟操作符“=”,既可以用于保存設(shè)置參數(shù)給將來使用,也可以用于執(zhí)行一項操作;③測試指令后緊跟操作符“=?”,用于詢問移動終端設(shè)備是否支持該指令,若支持則返回“OK”,若含有參數(shù),則返回該參數(shù)值的范圍;④讀取指令后緊跟操作符“?”,用于要求移動終端返回該命令相關(guān)參數(shù)的存儲值。
AT命令具有以下符號約定:①[…]表示指令所帶參數(shù)是可選的;②<…>尖括號內(nèi)為指令的一句法成分;③
2.2正則表達式介紹
正則表達式由一些普通字符和一些元字符組成。普通字符包括大小寫的字母、數(shù)字及符號,而元字符則具有特殊的含義,表1為常用的正則表達式元字符及其含義[5]。
表1 正則表達式元字符
通過對AT命令集中命令的抽象,總結(jié)出以下5種AT命令的模式,如表2所示。
表2 AT命令模式字符串
分別針對5種模式的AT命令列舉出實例:①MS號碼:AT+CNUM?
在TE和MS上均有可能出現(xiàn)AT命令的解析和編碼,將AT命令處理的模塊設(shè)計為協(xié)議棧的模式供需要的進程調(diào)用。AT協(xié)議棧為應(yīng)用程序提供了一個入口函數(shù)和3個消息類型,分別對應(yīng)3種操作:初始化、編碼及解碼,如圖2所示。
圖2 AT協(xié)議棧入口處理流程圖
3.1初始化
AT協(xié)議棧的初始化主要用來設(shè)置AT命令集的版本及支持的AT命令、協(xié)議棧發(fā)送回調(diào)函數(shù)、協(xié)議棧輸出Trace回調(diào)函數(shù)及Trace等級、定義及編譯正則表達式等初始化操作。
3.2編碼
AT協(xié)議棧的編碼是將AT命令參數(shù)集按照AT命令的規(guī)則變成AT命令字符串,AT命令參數(shù)集包含以下成員變量,如表3所示。
AT命令編碼的過程分為以下4個步驟:①根據(jù)AT命令索引indx編入AT命令名稱;②根據(jù)類型type編入類型關(guān)鍵字,如“=”、“?”等;③根據(jù)參數(shù)個數(shù)quti將quti個node編入AT命令,中間使用“,”分隔,最后一個參數(shù)編碼完成后使用
表3 AT命令參數(shù)集成員表
3.3解碼
AT協(xié)議棧的解碼是將AT命令字符串解析為AT命令參數(shù)集。AT命令解碼模塊主要有以下幾個組成部分,如圖3所示。
圖3 AT命令解碼模塊圖
由于AT命令的輸入并不一定一次輸入完整的AT命令,同時也有可能一次輸入一個以上的AT命令,因此在進入AT命令解碼流程之初,輸入的字符串首先進入一個AT命令循環(huán)隊列,隊列中存儲的是未執(zhí)行的不完全(尚未遇到
從隊列中搜索到的完整的AT命令進入正則表達式匹配模塊,依次針對此AT命令對匹配模式表的5個模式進行匹配,匹配成功后針對此模式對該AT命令進行字符串分割,最終將AT命令字符串分割成為AT命令參數(shù)集,然后進入AT命令處理模塊。AT命令處理模塊采用函數(shù)指針表驅(qū)動原理,將分割后的參數(shù)集index及type作為索引輸入到函數(shù)指針表中,即可直接調(diào)用執(zhí)行函數(shù),這樣的操作不需要針對數(shù)百函數(shù)進行逐個判斷,而且通過指針調(diào)用函數(shù)實時性很高。對于軟件維護來說,添加或刪除一條AT命令,只需要在表中添加刪除對應(yīng)的表元素并添加刪除對應(yīng)的處理函數(shù)即可,而不需要修改程序的主流程和處理邏輯。為保證協(xié)議棧的健壯性[6],協(xié)議棧還需要狀態(tài)機及定時器的操作。
為保證平臺無關(guān)性,軟件在Windows XP、x86 Linux及ARM Linux平臺下,分別使用VC++6.0[7]、gcc及arm-linux-guneabi-gcc編譯通過并正常運行。將AT協(xié)議棧移植到某集群通信移動臺中,使用串口與PC連接,在PC端使用串口助手向移動臺發(fā)送AT命令,并確認移動臺的動作以及其回復(fù)的AT命令是否正確。
4.1功能測試
按照AT命令集手冊逐條執(zhí)行AT命令,確認移動臺能夠做出正確的動作和回應(yīng)。
例如:輸入“AT+CNUM?
4.2性能測試
使用MOXA nPort一網(wǎng)口轉(zhuǎn)16串口服務(wù)器通過串口連接10個移動臺,編寫一個多串口AT命令控制程序,此程序可以在網(wǎng)口端向10個移動臺周期性發(fā)送AT指令,控制移動臺發(fā)送組呼、全雙工個呼、半雙工個呼及文本組短消息,其中2個手臺為主叫,8個為被叫,2個主叫分別附屬在2個組防止呼叫沖突,控制呼叫間隔為30 s,呼叫時長30 s,收到呼叫后可以自動應(yīng)答,同時統(tǒng)計業(yè)務(wù)成功及失敗的次數(shù)。經(jīng)過約12 h的測試,測試結(jié)果如表4所示。
表4 壓力測試結(jié)果表
從結(jié)果可見,壓力測試中發(fā)生了呼叫建立失敗的情況,通過基站的運行記錄分析,與呼叫的建立無關(guān),即與AT命令無關(guān),因此AT命令在12 h的連續(xù)工作中,沒有出現(xiàn)異常,實現(xiàn)了設(shè)計功能,滿足了設(shè)計需求。
通過對AT協(xié)議棧的測試,證實了AT協(xié)議棧設(shè)計的可行性和易用性,不只可以通過人工方式控制移動臺,而且可以使用程序全天候無人值守的監(jiān)控移動臺狀況,控制移動臺的工作,可以廣泛的應(yīng)用于各種無線通信移動臺,甚至數(shù)傳臺使用,同時對相關(guān)及相似項目均有較大的借鑒及復(fù)用價值。
[1]藍云燕,羅文龍,李曄,等.一種基于AT命令的移動通信終端軟件結(jié)構(gòu)[J].微計算機應(yīng)用,2007(10):1034-1038.
[2]胥清化.基于正則表達式的高速協(xié)議識別研究與實現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2008:7-10.
[3]張宗軍,劉寧慶,張乃通.數(shù)字集群移動通信系統(tǒng)空中接口協(xié)議的仿真研究[J].無線電工程,2001(9):75-78.
[4]李佳,黃登山,賀偉.一種數(shù)據(jù)卡PC側(cè)收發(fā)AT命令模塊的實現(xiàn)方法[J].計算機測量與控制,2010,18(6):1370-1372.
[5]范慧萍.基于正則表達式的協(xié)議識別研究與實現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2007:32-35.
[6]陳棟毅.基于AT命令機制PC側(cè)軟件與手機交互系統(tǒng)的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2011:22-25.
[7]捷新工作室.Visual C++6.0高級教程[M].北京:清華大學(xué)出版社,1997(6):235-279.
Design on AT Command Protocol Stack Based on Regular Expression
FAN Lin-tao
(Hebei Far-east Communication System Engineering Co,Ltd.,Shijiazhuang Hebei 050200,China)
The AT command is widely used in all kinds of wireless communication mobile station and control terminal.Based on its character string features and the excellent string processing capability of regular expression,this paper designs and implements an AT command protocol stack independent of device,and introduces the protocol stack architecture,AT command string expression pattern and table-driven AT command handling mechanism.The basic concept and application method of AT command regular expression are described.The proposed AT command protocol stack simplifies the procedure design and improves the program maintainability.The practical application proves the availability and usability of this protocol stack.
AT command;regular expression;protocol stack;table-driven
TP393
A
1008-1739(2015)15-44-4
定稿日期:2015-07-12
2010年度電子信息產(chǎn)業(yè)發(fā)展基金第一批項目(工信部財[2010]301號)城市軌道交通專業(yè)通信和指揮調(diào)度系統(tǒng)應(yīng)用示范