基于AT91RM9200短消息監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件的設(shè)計(jì)主要是基于Linux下C的編程,無線監(jiān)控程序是依照短消息收發(fā)的原理來對(duì)于GSM模塊的控制。
3.1 短消息收發(fā)的原理
短消息內(nèi)容的最大長(zhǎng)度為140 Byte。它的編碼主要有7位編碼,8位編碼,UC2編碼3種編碼方式。7位編碼是每Byte只使用低7位,每8 By te為一組,去掉最高位,重新編碼為7 Byte,因此,7位編碼實(shí)際可以表示到160 Byte。但7位編碼只能發(fā)送0x00~0x7F范圍內(nèi)的字符,一般在發(fā)送英文短信時(shí)使用。編碼原理是:每8 Byte為一組,分別用A,B,C,D,E,F(xiàn),G代表8 Byte,An代表每個(gè)Byte的位,則8 Byte重新編碼成如表1所示的7 Byte。本文引用地址:http://www.ex-cimer.com/article/148048.htm
8位編碼是所見即所得的編碼方式,即無需編碼,只要將二進(jìn)制串直接發(fā)送即可。8位編碼方式適用于制定各種基于短消息的通訊協(xié)議。U C2編碼常用于中文或中英文混合內(nèi)容發(fā)送,只能發(fā)送70個(gè)字符(1個(gè)UC2占2 Byte)。由于國(guó)內(nèi)一般的編輯器多以GB編碼,因此,若要發(fā)送中文,需先將中文轉(zhuǎn)換為UC2編碼再發(fā)送。在手機(jī)上,通常的做法是如果全部為英文及半角字符,則以7位編碼發(fā)送,如果含有中文,則全部編碼為UC2發(fā)送。
短消息發(fā)送方式主要分為文本模式和PDU模式。文本模式其實(shí)是針對(duì)7位編碼做的一個(gè)封裝,它只能用于發(fā)送ANSI范圍的字符,發(fā)送方式較簡(jiǎn)單。而PDU模式中所有短消息數(shù)據(jù)發(fā)送前都必須組織成PDU的格式,在PDU模式下發(fā)送短信比較復(fù)雜,需要自行組織PDU內(nèi)容,但發(fā)送方式靈活,可以發(fā)送各種數(shù)據(jù),也可以自行設(shè)定各PDU字段的內(nèi)容。
3.2 常用的短消息AT指令
GSM無線模塊采用標(biāo)準(zhǔn)AT指令集通信,AT命令是用于控制TE(Terminal Equipment)(如PC等用戶終端)和MT(Mobile Terminal)(如移動(dòng)臺(tái)等移動(dòng)終端)之間的相互規(guī)則。AT命令類型主要分為基本命令、S寄存器命令、擴(kuò)展以及廠商定義命令3類。
3.3 GSM程序的實(shí)現(xiàn)
ARM與GSM通信以ttyS1對(duì)應(yīng)的串口為橋梁,與MG323提供的1個(gè)UART接口連接,支持短消息、電話本管理、數(shù)據(jù)業(yè)務(wù)、嵌入式TCP/UDP等功能。使用ARM發(fā)出AT指令集對(duì)GSM模塊進(jìn)行相應(yīng)的操作,能夠完成發(fā)短消息的功能。具體軟件流程如圖3所示。
對(duì)串口初始化的工作主要是波特率、校驗(yàn)位和停止位設(shè)置。配置完串口的相關(guān)屬性,就可以對(duì)串口進(jìn)行打井、讀寫操作了。在Linux系統(tǒng)中,所有的設(shè)備文件都位于“/dev”下,其中串口2對(duì)應(yīng)的設(shè)備名為“/dev/ttyS1”,在Linux下對(duì)設(shè)備和對(duì)文件的操作方法是一樣的,因此對(duì)串口讀寫可以使用簡(jiǎn)單的“read”,“‘write”函數(shù)完成。
對(duì)GSM模塊進(jìn)行初始化工作主要是發(fā)送“AT”給MT(Mobil Terminal)看起是否有回復(fù)以確定ARM與GSM的串口工作正常。在確認(rèn)串口正常工作后,發(fā)送“ATE0”命令關(guān)閉MT的回顯。
設(shè)置短信的通知方式、短信的格式(PDU)以及短信的編碼(USC2)。如果每個(gè)功能的設(shè)定都正常,最后按照PDV格式向指定用戶發(fā)送“GSM模塊初始化成功”的短信。
解析數(shù)據(jù)并發(fā)送短信主要是首先按PDU格式填充發(fā)送個(gè)MT的緩沖區(qū)的前46 Byte。然后打開數(shù)據(jù)存儲(chǔ)文件,用lseek函數(shù)將文件光標(biāo)由文件結(jié)尾向前移動(dòng)17 Byte。因?yàn)閿?shù)據(jù)幀中的數(shù)據(jù)是以2 Byte的16進(jìn)制來表示,所以首先將其合并成一個(gè)16位的短整型,然后將合并的數(shù)據(jù)與檢驗(yàn)位相加。將數(shù)據(jù)處理后,最后發(fā)送短信并檢查MT回復(fù)中是否有+CMGS的指令,若有則代表短信發(fā)送成功。
4 結(jié)束語
以AT91RM9200處理器搭建嵌入式Linux系統(tǒng),利用GSM/GPRS無線通信模塊實(shí)現(xiàn)短消息的發(fā)送。同時(shí)嵌入式系統(tǒng)加GSM模塊的系統(tǒng)組成體積小巧,工作穩(wěn)定,適合偏遠(yuǎn)地區(qū)或移動(dòng)數(shù)據(jù)采集系統(tǒng),提供了數(shù)據(jù)采集監(jiān)控的新手段。隨著無線通信系統(tǒng)的不斷發(fā)展和成熟,它必將深入到生活的各個(gè)方面。
評(píng)論