《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 解決方案 > 如何以O(shè)penAT3.12為平臺將通信報(bào)文封裝進(jìn)GSM Modem

如何以O(shè)penAT3.12為平臺將通信報(bào)文封裝進(jìn)GSM Modem

2010-12-12
來源:中電網(wǎng)

引  言
隨著經(jīng)濟(jì)的發(fā)展以及國內(nèi)工農(nóng)業(yè)領(lǐng)域的自動化程度的提高,,越來越多的場合需要遠(yuǎn)程監(jiān)控和操作的設(shè)備,。基于GSM網(wǎng)絡(luò)短信息設(shè)備的領(lǐng)域,,GSM Modem是必不可少的設(shè)備,本文討論目前應(yīng)用廣泛的基于Wavecom公司Q24PL001模塊的GSM Modem嵌入式程序設(shè)計(jì),,以實(shí)現(xiàn)將短信數(shù)據(jù)通信報(bào)文封裝進(jìn)GSM Modem,,從而簡化上位機(jī)軟件的工作量。
本文以O(shè)penAT3.12嵌入式開發(fā)平臺為例,,討論如何將遠(yuǎn)程控制和數(shù)據(jù)采集通信報(bào)文封裝進(jìn)以Q24PL001模塊為主的GSM Modem,。
1  OpenAT操作系統(tǒng)介紹
OpenAT是Wavecom公司為GPRS/GSM無線CPU開發(fā)的一款實(shí)時(shí)操作系統(tǒng),集成了內(nèi)存分配,、Flash管理,、數(shù)據(jù)流管理、GPIO管理,、總線管理,、定時(shí)器管理等多種功能。底層為嵌入式API應(yīng)用層,,它包括程序初始化API,、AT指令A(yù)PI、操作系統(tǒng)API,、標(biāo)準(zhǔn)API,、流控API、總線API等,,包含了建立在OpenAT基礎(chǔ)之上的應(yīng)用開發(fā)層函數(shù)庫,。應(yīng)用開發(fā)層(簡稱ADL)函數(shù)庫為開發(fā)人員提供了上層應(yīng)用接口,簡化了嵌入式應(yīng)用的開發(fā),;同時(shí)還提供了嵌入式應(yīng)用程序框架,,包括消息解析器和服務(wù)聲明機(jī)制?;谝陨显?,OpenAT應(yīng)用程序開發(fā)人員在開發(fā)應(yīng)用程序時(shí),更多的時(shí)間用于調(diào)用服務(wù)處理函數(shù),,使系統(tǒng)更專注于程序本身的優(yōu)化,。
2  GSM Modom的硬件結(jié)構(gòu)和應(yīng)用程序
GSM模塊在工業(yè)領(lǐng)域中比較重要的一個(gè)應(yīng)用就是用來做GSM Modem,這也是GSM模塊一個(gè)最簡單的應(yīng)用,。如圖1所示,,一個(gè)常規(guī)通用GSM Modem的系統(tǒng)結(jié)構(gòu)包括電源、RS232接口,、GSM模塊,、LED指示燈、SIM卡和天線等部分,。

GSM Modem核心模塊采用Wavecom公司的無線CPU模塊Q24PL001,。在Q24PL001模塊中,,OpenAT與應(yīng)用程序的結(jié)構(gòu)關(guān)系如圖2所示。Q24PL001集成了ARM7內(nèi)核的32位CPU,,內(nèi)嵌OpenAT操作系統(tǒng)內(nèi)核,,支持OpenAT嵌入式應(yīng)用程序設(shè)計(jì)。
3  基于短信遠(yuǎn)程控制系統(tǒng)的結(jié)構(gòu)
如圖3所示,,基于GSM網(wǎng)絡(luò)的短信遠(yuǎn)程控制系統(tǒng)通常包括以下幾個(gè)部分:GSM Modem,、上位機(jī)監(jiān)控終端、移動運(yùn)營商的GSM網(wǎng)絡(luò)和GSM終端等,。
在一般產(chǎn)品設(shè)計(jì)中,,GSM Modem作為發(fā)送GSM短信息的工具使用。PC機(jī)通過RS232串口與GSM
Modem相連,,根據(jù)通信協(xié)議處理短信數(shù)據(jù)將處理好的短信數(shù)據(jù)包打包,,通過RS232串口發(fā)送一系列標(biāo)準(zhǔn)Ar指令控制GSM Modem,由其將短信數(shù)據(jù)包發(fā)送至終端系統(tǒng),。本文重點(diǎn)研究簡化上位機(jī)軟件,,將數(shù)據(jù)處理過程交給GSM Modem嵌入式系統(tǒng)軟件處理的方法。
4  GSM短信遠(yuǎn)程控制系統(tǒng)的通信報(bào)文設(shè)計(jì)
對于GSM遠(yuǎn)程通信系統(tǒng),,數(shù)據(jù)通信報(bào)文并無統(tǒng)一標(biāo)準(zhǔn),,設(shè)計(jì)者可以根據(jù)具體情況自由設(shè)計(jì)不同通信終端之間的數(shù)據(jù)通信報(bào)文。由于GSM網(wǎng)絡(luò)的短信數(shù)據(jù)通信接收端可以通過普通手機(jī)實(shí)現(xiàn)短信接收,,所以必須在短信數(shù)據(jù)通信報(bào)文設(shè)計(jì)中進(jìn)行數(shù)據(jù)加密設(shè)計(jì),,以防止非法用戶對GSM短信數(shù)據(jù)通信報(bào)文的破解和濫用,保證整個(gè)SMS短信控制系統(tǒng)的穩(wěn)定性,。為了便于介紹,,在此以非加密的GSM短信數(shù)據(jù)通信報(bào)文為例,介紹GSM短信通信報(bào)文的設(shè)計(jì),。
一個(gè)常用GSM短信數(shù)據(jù)通信報(bào)文設(shè)計(jì)格式如下:
其中,,以$S作為短信數(shù)據(jù)通信報(bào)文的幀頭字節(jié);6個(gè)字符作為接收端的認(rèn)證密碼,;S/T代表本報(bào)文的發(fā)送方為GSMModem(S)或短信終端(T),;報(bào)文內(nèi)容受短信數(shù)據(jù)長度的限制,一般在100字節(jié)以下,;以#作為報(bào)文的結(jié)束符,。
基于如上報(bào)文定義,一條上位機(jī)發(fā)出的SMS報(bào)文示例如下:
$S000000S0000AA100RlY2W3R4Y5G6Y7W5B#
其中,,$S為數(shù)據(jù)幀頭,;000000為SMS終端默認(rèn)的認(rèn)證密碼;S表明本數(shù)據(jù)來自GSM
Modem;0000為服務(wù)器設(shè)備ID編號,;AA表示當(dāng)前數(shù)據(jù)命令,;10為十六進(jìn)制數(shù)據(jù)0x10,表示當(dāng)前數(shù)據(jù)內(nèi)容長度字節(jié),;0R1G2W3R4G5G6Y7W為報(bào)文內(nèi)容,;5B為校驗(yàn)碼;#為結(jié)束符,。
同理,短信終端返回至GSM Modem的SMS報(bào)文示例為:
$S888888T0055CC1930RX1YX2YX3YX4YX5Y6Y7YXEF#
其中,,$S為數(shù)據(jù)幀頭,;888888為SMS上位機(jī)服務(wù)器端默認(rèn)的認(rèn)證密碼;T表明數(shù)據(jù)來自短信終端,;0055為終端設(shè)備ID編號,;CC表示當(dāng)前返回?cái)?shù)據(jù)命令;19為十六進(jìn)制數(shù)據(jù)0x19,,表明當(dāng)前返回?cái)?shù)據(jù)內(nèi)容長度字節(jié),;30RX1YX2YX3YX4YX5Y6Y7YX為返回?cái)?shù)據(jù)內(nèi)容;EF為校驗(yàn)碼,;#為結(jié)束符,。
5 GSM Modem短信數(shù)據(jù)通信報(bào)文處理流程
采用常規(guī)的上位機(jī)軟件來進(jìn)行設(shè)計(jì),將數(shù)據(jù)通信報(bào)文整理好后再根據(jù)一系列的AT命令組合發(fā)送至GSM
Modem,,同時(shí)還需要解析來自若干個(gè)SMS終端的數(shù)據(jù)通信報(bào)文,。常規(guī)上位機(jī)服務(wù)器端軟件處理短信數(shù)據(jù)的流程如圖4所示。
上位機(jī)軟件數(shù)據(jù)處理過程中,,需要不停地對GSMModem進(jìn)行操作,,響應(yīng)GSM Modem接收到的數(shù)據(jù),處理發(fā)送數(shù)據(jù)包,。在整個(gè)過程中,,GSM Modem只作為數(shù)據(jù)傳輸工具,不參與任何的數(shù)據(jù)處理,;而一般的SMS遠(yuǎn)程監(jiān)控通信系統(tǒng)的通信報(bào)文多達(dá)幾十乃至上百條,,會導(dǎo)致上位機(jī)軟件工作量非常大。為了便于上位機(jī)程序簡化開發(fā),,結(jié)合Q24PL001模塊自身支持OpenAT嵌入式軟件的特點(diǎn),,將短信數(shù)據(jù)通信報(bào)文的發(fā)送處理和接收解析流程嵌入GSMModem內(nèi),只保留一些簡單的AT命令接口給上位機(jī)軟件控制,,大大減小了上位機(jī)軟件的工作量,。
6  基于OpenAT的通信協(xié)議報(bào)文封裝
OpenAT嵌入式操作系統(tǒng)是為廣泛的基于GSM/GPRS的模塊系統(tǒng)應(yīng)用而設(shè)計(jì)的,用于實(shí)現(xiàn)嵌入式的短信數(shù)據(jù)通信協(xié)議報(bào)文封裝,可以大大提高GSM Modem硬件系統(tǒng)的資源利用率,?;贠penAT的程序設(shè)計(jì)流程分為SIM卡服務(wù)聲明、短信服務(wù)聲明,、發(fā)送數(shù)據(jù)包處理和接收數(shù)據(jù)包數(shù)據(jù)解析等部分,。
6.1  SlM卡初始化程序
在OpenAT嵌入式程序中,啟動SIM卡初始化的聲明函數(shù)為adl_simSubscribe(bpt_SimInitHandler,,"
"),。其中,bpt_SimInitHandler為SIM卡
聲明返回函數(shù):
其中,,事件ADL_SIM_EVENT_FULL_INIT表明SIM的初始化完成,。
6.2  短信服務(wù)初始化程序
在OpenAT嵌入式程序設(shè)計(jì)中,當(dāng)返回函數(shù)返回狀態(tài)為ADL_SIM_EVENT_FULL_INIT時(shí),,表明系統(tǒng)SIM卡初始化過程成功完成,,系統(tǒng)可以進(jìn)入短信聲明流程。短信功能聲明函數(shù)為:
ptk_SmsHandler=adl_smsSubscribe((adl_smsHdlr_f)bpt_SmsDataHandler,,\(adl_smsCtrlHdlr_f)bpt_SmsCtrlHandler,,ADL_SMS_MODE_TEXT);
其中,,ptk_SmsHandler為短信聲明函數(shù)返回句柄,;bpt_SmsDataHandler為短信數(shù)據(jù)處理返回函數(shù);bpt_SmsCtrlHandler為短信發(fā)送狀態(tài)事件返回函數(shù),;ADL_SMS_MODE_TEXT參數(shù)表示采用TEXT模式進(jìn)行短信數(shù)據(jù)傳輸,。bpt_SmsDataHandler短信數(shù)據(jù)返回函數(shù)定義如下:
在該函數(shù)中,smsTel為接收到的短信電話號碼,,smsTimeLength為TEXT模式下的短信時(shí)間戳,,smsText為接收到的短信數(shù)據(jù)內(nèi)容。
SmsCtrlHandler短信發(fā)送事件返回狀態(tài)定義如下:
其中,,ADL_SMS_EVENT_SENDING_OK事件表明短信發(fā)送成功,。
6.3  SMS通信協(xié)議發(fā)送實(shí)現(xiàn)
對示例通信報(bào)文$S000000S0000AA100R1Y2W3R4Y5G6Y7W5B#來說,報(bào)文的頭和尾以及S服務(wù)器標(biāo)志為固定字節(jié),;000000為終端訪問密碼,,從Q24PL001模塊內(nèi)部Flash中調(diào)用;服務(wù)器ID碼0000及終端SIM卡號碼,,同樣從內(nèi)部Flash中通過OpenAT嵌入式API函數(shù)adl_flhRead函數(shù)調(diào)用,;命令字AA為固定命令字節(jié);報(bào)文內(nèi)容通過AT命令接收自上位機(jī)軟件,。
該數(shù)據(jù)通信協(xié)議發(fā)送時(shí)通過OpenAT嵌入式API函數(shù)adl_smsSend()函數(shù)發(fā)送,。adl_smsSend函數(shù)定義如下:
adl smsSend(ptk SmsHandler,Telephone,Message,,ADL_SMS_MODE_TEXT)
其中,,ptk_SmsHandler為6.2節(jié)中短信聲明返回句柄;Telephone參數(shù)為目標(biāo)的SIM卡號碼,;Message為封裝好的SMS短信數(shù)據(jù)通信報(bào)文,;ADL_SMS_MODE_TEXT表明采用TEXT格式的短信傳輸。
6.4  數(shù)據(jù)通信協(xié)議的接收處理
對于GSM Modem接收到的短信數(shù)據(jù)報(bào)文的處理,,相當(dāng)于發(fā)送短信數(shù)據(jù)報(bào)文的解包過程,,主要過程在GetSmsDataPackage()函數(shù)中實(shí)現(xiàn)。處理后數(shù)據(jù)發(fā)送至上位機(jī)軟件格式為:
RES:0001,,8,,30RX1YX2YX3YX4YX5Y6Y7Y
返回?cái)?shù)據(jù)通過串口發(fā)送至上位機(jī),上位機(jī)軟件直接接收該字符串,,即完成短信數(shù)據(jù)的接收過程。
7  GSM Modem AT命令設(shè)計(jì)
利用OpenAT操作系統(tǒng)自定義AT命令設(shè)計(jì)接口,,定義GSM Modem對上位機(jī)的數(shù)據(jù)通信接口,。AT命令聲明函數(shù)如下:
adl_atCmdSubscribe("AT+SETDIS",(adl_atCmdHandler_t)SetMode,,ADL_CMD_TYPE_PARA∣ADL_CMD_TYPE_READ∣0x0041),;
其中,參數(shù)"AT+SETDIS"為自定義的AT命令接口,;SetMode為該AT命令的返回函數(shù),;第3個(gè)參數(shù)為當(dāng)前AT命令的類型,ADL_CMD_TYPE_PARA為鍵入?yún)?shù)型,,ADL—CMD—TYPE—READ為讀參數(shù)型,,0x0041為AT命令類型值,根據(jù)函數(shù)規(guī)定設(shè)置,。
在SETDIS命令中,,以“AT+SEDDIS=X,Y”類型為自定義命令的訪問接口,。在返回函數(shù)中,,第1個(gè)參數(shù)X作為SMS通信協(xié)議的命令字參數(shù),第2個(gè)參數(shù)Y作為SMS通信協(xié)議的數(shù)據(jù)報(bào)文內(nèi)容參數(shù),。SMS數(shù)據(jù)報(bào)文目標(biāo)接收終端SIM卡號碼由“AT+SETTEL”命令預(yù)設(shè),,該命令定義如下:
adl_atCmdSubscribe("AT+SETTEL",(adl_atCmdHandler_t)SetTel,,ADL_CMD_TYPE_PARA∣ADL_CMD_TYPE_READ∣0x0041)}
該命令用于首次設(shè)置GSM Modem,,將所有接收終端SIM卡號存入Q24PL001內(nèi)部Flash內(nèi),以ID號標(biāo)識。
上位機(jī)通過串口鍵人“AT+SETDlS=0,,"0R1Y2W3R4 Y5G6Y7W"”,,則GSM
Modem立即向相應(yīng)ID為0的終端發(fā)出數(shù)據(jù)包為$S000000S0000AA100R1Y2W3R4Y5G6Y7W5B#完整數(shù)據(jù)。
8  上位機(jī)軟件的操作實(shí)現(xiàn)
相對于復(fù)雜的數(shù)據(jù)報(bào)文運(yùn)算,,以及復(fù)雜的AT命令發(fā)送GSM短信數(shù)據(jù)包的上位機(jī)軟件系統(tǒng)來說,,將短信數(shù)據(jù)報(bào)文封裝進(jìn)GSM Modem后,對GSM Modem的控制操作變得簡單,,只需要一條簡單的AT命令,,即可實(shí)現(xiàn)非常復(fù)雜的短信數(shù)據(jù)包的傳輸。同樣對于接收到的數(shù)據(jù),,GSMModem完成數(shù)據(jù)包解包后,,立即通過RS232串口輸出簡潔的響應(yīng)字符串,大大簡化了上位機(jī)軟件的處理,。經(jīng)過對GSM Modem進(jìn)行短信協(xié)議報(bào)文封裝后的上位機(jī)軟件處理流程如圖5所示,。
結(jié)  語
在系統(tǒng)穩(wěn)定性和實(shí)時(shí)性要求較高的通信領(lǐng)域中,相比在上位機(jī)軟件中進(jìn)行協(xié)議處理,,將GSM Modem進(jìn)行嵌入式報(bào)文封裝處理簡單而又高效,。另外,在很多無人值守的服務(wù)端平臺,,只要保持GSM Modem開機(jī),,數(shù)據(jù)包數(shù)據(jù)處理即可以直接由GSM Modem完成,而無需上位機(jī)電腦開機(jī),,既方便了用戶操作,,又保證了SMS通信系統(tǒng)的穩(wěn)定性。該設(shè)計(jì)已經(jīng)應(yīng)用于南寧及深圳市智能交通誘導(dǎo)系統(tǒng)中,,均取得較好的效果,。
 
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]