《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > .NET中SerialPort類在短信收發(fā)軟件中的應(yīng)用
.NET中SerialPort類在短信收發(fā)軟件中的應(yīng)用
來源:微型機(jī)與應(yīng)用2012年第21期
李麗萍,,魏權(quán)利
(青島科技大學(xué) 信息學(xué)院,,山東 青島 266061)
摘要: 介紹了SerialPort類常用的屬性和方法,對(duì)操作無線通信模塊M1206的主要AT命令格式及功能進(jìn)行了描述,針對(duì)短信傳輸采用的PDU數(shù)據(jù)格式單元及編碼方式進(jìn)行了闡述,,重點(diǎn)論述了在C#語言中,使用SerialPort類發(fā)送短信的程序設(shè)計(jì)思想和實(shí)現(xiàn)方法。在網(wǎng)絡(luò)應(yīng)用程序開發(fā)中,使用短信收發(fā)功能完成信息發(fā)布,,具有極高的應(yīng)用價(jià)值,。
Abstract:
Key words :

摘  要: 介紹了SerialPort類常用的屬性和方法,對(duì)操作無線通信模塊M1206的主要AT命令格式及功能進(jìn)行了描述,,針對(duì)短信傳輸采用的PDU數(shù)據(jù)格式單元及編碼方式進(jìn)行了闡述,,重點(diǎn)論述了在C#語言中,使用SerialPort類發(fā)送短信的程序設(shè)計(jì)思想和實(shí)現(xiàn)方法,。在網(wǎng)絡(luò)應(yīng)用程序開發(fā)中,,使用短信收發(fā)功能完成信息發(fā)布,具有極高的應(yīng)用價(jià)值,。
關(guān)鍵詞:SerialPort類,;串口通信;無線通信模塊,;短信

 基于GSM短信業(yè)務(wù)已經(jīng)滲透于生活的各個(gè)領(lǐng)域,,為每個(gè)人所熟知和使用。本文介紹了使用.NET中提供的SerialPort類的屬性和方法驅(qū)動(dòng)無線通信模塊,,使用AT命令實(shí)現(xiàn)短信收發(fā)。在學(xué)生學(xué)分預(yù)警網(wǎng)絡(luò)軟件開發(fā)中,,設(shè)計(jì)學(xué)分預(yù)警短信發(fā)送功能,,當(dāng)學(xué)生每學(xué)期的學(xué)分集低于教學(xué)計(jì)劃規(guī)定學(xué)分時(shí),程序立即啟動(dòng)短信發(fā)送功能,,提醒學(xué)生注意修訂后續(xù)的學(xué)習(xí)計(jì)劃,,避免影響學(xué)生如期畢業(yè),達(dá)到了預(yù)期的目的,。
1 SerialPort類介紹
 基于無線通信模塊的短信收發(fā)的核心技術(shù)是實(shí)現(xiàn)串口通信,。.NET Framework4.0類庫中System.IO.Ports命名空間,包含了控制串口通信的SerialPort類,,該類提供了同步I/O和事件驅(qū)動(dòng)I/O,、對(duì)中斷狀態(tài)的訪問以及對(duì)串口驅(qū)動(dòng)程序?qū)傩缘脑L問,使用該類可方便地實(shí)現(xiàn)所需要串口通信的多種功能[1],。
1.1 SerialPort類常用的屬性
 SerialPort類提供串行通信端口號(hào),,波特率、數(shù)據(jù)位,、停止位,、校驗(yàn)位等屬性的設(shè)置,其中:
PortName:設(shè)置通信端口,,如COM1,、COM2等。
 BaudRate:設(shè)置通信格式中的波特率(即串口通信的速率),,因進(jìn)行串口通信的雙方其波特率需要相同,。如果用PC機(jī)連接其他非PC系統(tǒng),,波特率則決定于非PC系統(tǒng)。本軟件使用無線通信模塊的波特率是2 400 b/s,。
 Parity:設(shè)置奇偶校驗(yàn)位,,其數(shù)據(jù)結(jié)構(gòu)為枚舉類型。枚舉元素為:Odd,、Even,、Mark、None,、Space,。
 DataBits:數(shù)據(jù)位長度,取值為5,、7,、8。
 StopBits:停止位,,其數(shù)據(jù)結(jié)構(gòu)為枚舉類型,。枚舉元素為:None、One,、OnePointFive,、Two。
對(duì)于兩個(gè)進(jìn)行串行通信的端口,,這些參數(shù)必須匹配,。
1.2 SerialPort類的常用方法
1.2.1 串口的打開和關(guān)閉

 SerialPort類提供Open()和Close()方法來實(shí)現(xiàn)串口的打開或關(guān)閉。
1.2.2 數(shù)據(jù)的發(fā)送和接收
 SerialPort類提供Write()和WriteLine()方法發(fā)送數(shù)據(jù),,其中:Write()方法用于發(fā)送字節(jié)數(shù)組,、字符數(shù)據(jù)或字符。WriteLine()方法可發(fā)送字符串,,當(dāng)發(fā)送完數(shù)據(jù)后,,會(huì)將換行符作為數(shù)據(jù)也發(fā)送給對(duì)方。
SerialPort類提供Read()和ReadLine()方法接收數(shù)據(jù),,其中:Read()方法接收數(shù)據(jù)時(shí),,需要定義一個(gè)字節(jié)或數(shù)組變量來保存讀取的數(shù)據(jù),結(jié)果返回實(shí)際讀取的字節(jié)或字符數(shù),。ReadLine()方法接收數(shù)據(jù)時(shí),,讀取數(shù)據(jù)直至遇到一個(gè)換行符,然后返回一個(gè)字符串代表一行信息接收完成,。
2 SerialPort類的應(yīng)用
2.1無線通信模塊

 WaveCom公司推出的GSM/GPRS的無線通信模塊M1206,,它支持GSM07.05短信協(xié)議和GSM07.07接口協(xié)議標(biāo)準(zhǔn),支持移動(dòng),、聯(lián)通以及小靈通用戶收發(fā)短信,,適用于各行各業(yè)各個(gè)領(lǐng)域作為無線數(shù)據(jù)通信,、短信息通告和短信查詢等應(yīng)用。
2.1.1 操作無線通信模塊M1206的主要AT命令集及功能描述
 無線通信模塊與計(jì)算機(jī)之間的通信協(xié)議是一些AT指令集,,每個(gè)指令以AT+開頭,,以回車結(jié)尾。每個(gè)命令執(zhí)行成功與否都有相應(yīng)的返回[2],。在短信收發(fā)軟件中常用的AT指令如下:
 ATE0:檢測無線通信模塊M1206,,關(guān)閉命令回顯。返回OK,,說明GSM工作正常,。
 AT+CMGF=0:設(shè)置發(fā)送和接收短消息方式命令。當(dāng)值為“0”時(shí)為PDU模式,,短信息正文經(jīng)過USC2編碼轉(zhuǎn)換為16 bit的Unicode碼后被傳送,,最多70個(gè)字符;當(dāng)值為“1”時(shí)為TEXT模式,,此時(shí)只可傳送140個(gè)字符,,由于短信息的內(nèi)容均為8 bit表示的ASCII碼,實(shí)現(xiàn)方法比PDU方式簡單,。
 AT+CMGS=<PDU的十進(jìn)制長度>:發(fā)送短消息命令,,模塊M1206收到此命令后,若響應(yīng)正常,,則返回“>”提示符,這時(shí)便可發(fā)送數(shù)據(jù)信息,,并以Ctrl/Z(ASCII=0x1A)結(jié)束,。
 AT+CSMP=<fo>,<vp>,,<pid>,,<dcs>:用于設(shè)置文本模式參數(shù),其中:<fo>設(shè)置使用短信提交,,<vp>設(shè)置短信息的有效周期,,<pid>為協(xié)議標(biāo)識(shí)符,<dcs>設(shè)置短信息的編碼方案,。
AT+CNMI=1,,1,0,,0,,1:設(shè)置新消息指示方式命令。此命令使M1206收到短信時(shí)返回的命令為"+CMTI:   "SM",,短信息索引號(hào)",。
 AT+CMGR=<index>:接收短消息命令,,index為最新收到的短信息索引號(hào)。
發(fā)送短信息時(shí)使用的控制符:結(jié)束符(<CR>)十六進(jìn)制的0x0D,;發(fā)送符(<Ctrl/Z>)十六進(jìn)制的0x1A,。
2.1.2 無線通信模塊的硬件連接
 PC機(jī)通過RS232串口與無線通信模塊M1206連接,將SIM卡插入無線通信模塊的插卡槽,,最后接通無線通信模塊外接電源,。觀察指示燈,若指示燈開始閃爍,,證明無線通信模塊連接正確,,可以使用;若指示燈不亮,,則需要檢查無線通信模塊的連接是否正確,,或者無線通信模塊是否完好。
2.2 短信傳輸數(shù)據(jù)單元格式的解析及編碼
 短信發(fā)送的常用編碼格式有兩種:Text模式和PDU(Protocol Description Unit)模式,。Text模式收發(fā)短信代碼簡單,,實(shí)現(xiàn)起來比較容易,但不支持中文短信,;PDU 模式既支持英文,,又支持中文。目前,,PDU模式應(yīng)用最為廣泛,,中國移動(dòng)和中國聯(lián)通都提供支持PDU模式的短消息業(yè)務(wù)。PDU模式收發(fā)短信可以使用3種編碼:7 bit,、8 bit和UCS2編碼,。7 bit編碼用于發(fā)送普通的ASCII字符,8 bit編碼通常用于發(fā)送數(shù)據(jù)消息,,UCS2編碼用于發(fā)送Unicode字符,。本文收發(fā)短信軟件采用PDU模式的UCS2編碼方式。
2.2.1 PDU數(shù)據(jù)單元格式解析
 PDU數(shù)據(jù)單元不僅包含可傳輸?shù)南⒈旧?,還包括其他很多信息,。如:SMS服務(wù)中心號(hào)碼、目標(biāo)號(hào)碼,、回復(fù)號(hào)碼,、編碼方式和服務(wù)時(shí)間等[3]。PDU數(shù)據(jù)包格式有:SCA,、PDU-type,、MR、DA、PID,、DCS,、VP、UDL,、UD,。分別描述如下:
 SCA(Service Center Address)短消息服務(wù)中心地址,包含三個(gè)部分:①Length是服務(wù)中心地址長度,,取值為00時(shí),,表示使用SIM卡上設(shè)置的短信中心號(hào)碼。②Type是短信中心地址的類型,,取值為81時(shí)為國內(nèi)號(hào)碼,;取值為91時(shí)為國際號(hào)碼。③服務(wù)中心地址,。
 PDU-type:設(shè)置PDU類型,。取值為51時(shí),代表有報(bào)頭短信,;取值為11時(shí),,代表普通短信。
MR:是消息參考,。在實(shí)際應(yīng)用時(shí),,用于設(shè)置目的地址號(hào)碼長度。值為0x0D時(shí),,表示目的地址號(hào)碼長度為13,。    DA:目的地址。取值為91時(shí),,表示目標(biāo)號(hào)碼是國際號(hào)碼(帶+號(hào)),;如果為81時(shí),則表示是本地號(hào)碼,。
 PID:協(xié)議標(biāo)識(shí)。值為00時(shí),,表示普通GSM類型,,點(diǎn)到點(diǎn)方式。
 DCS:數(shù)據(jù)編碼方案,。用于設(shè)置短消息內(nèi)容的編碼方式,。取值為08時(shí),是UCS2編碼,,用于漢字,;取值為00時(shí),用于英文字符;取值為04時(shí),,用于圖片等數(shù)據(jù),。
 VP:短信有效期。取值為00時(shí),,表示短信有效期為5 min,。
UDL:用戶數(shù)據(jù)長度。使用UCS2編碼方式時(shí),,則表示后面用戶數(shù)據(jù)段的長度(即UD的字節(jié)數(shù)),。
UD:用戶數(shù)據(jù),即傳輸數(shù)據(jù)內(nèi)容Unicode編碼,。
2.2.2 發(fā)送消息內(nèi)容的編碼方式
 發(fā)送的消息內(nèi)容要進(jìn)行正確的編碼才可以發(fā)送到串口,,否則接收到的將會(huì)是亂碼。其編碼遵循USC2編碼的規(guī)則進(jìn)行編碼,,即將每個(gè)字符(1~2 B)轉(zhuǎn)換為16 bit的Unicode碼,。
信息中心發(fā)送SIM卡號(hào)碼,接收方SIM卡號(hào)碼的編碼方式是:將每兩位數(shù)據(jù)位置互換,,余下最后單個(gè)位的補(bǔ)F,。
 編碼后的消息組成=089168+發(fā)送SIM卡地址編碼+11000D9168+接收手機(jī)號(hào)碼編碼+000800+短信息內(nèi)容編碼后的字節(jié)數(shù)+短信息內(nèi)容編碼+Ctrl/Z。其中,,“+”為字符串連接符,,不發(fā)送。
2.3 短信發(fā)送程序的設(shè)計(jì)思想與實(shí)現(xiàn)方法
 在使用SerialPort類進(jìn)行串口通信時(shí),,一般的程序流程是設(shè)置串行通信端口號(hào),、波特率、數(shù)據(jù)位數(shù),、停止位和校驗(yàn)位,,再打開串口連接,發(fā)送數(shù)據(jù),,最后關(guān)閉串口連接,。C#語言中調(diào)用SerialPort類時(shí)首先要添加引用語句:using System.IO.Ports[4],定義SerialPort類實(shí)例,,并直接初始化,,設(shè)置串行通信端口以及波特率(與無線通信模塊波特率一致)等參數(shù)。
 發(fā)送消息內(nèi)容編碼的實(shí)現(xiàn)通過.NET Framework提供的Encoding類實(shí)現(xiàn)Unicode編碼,。在C#中調(diào)用此類需引用名稱空間System.Text,;使用for語句完成發(fā)送和接收SIM卡號(hào)碼的編碼轉(zhuǎn)換。
使用SerialPort類的Write()方法發(fā)送AT指令及PDU數(shù)據(jù)包,,即完成短信的發(fā)送,。
關(guān)鍵程序代碼如下:
/*端口初始化*/
SerialPort my_send=new SerialPort("com1",,2400,Parity.None,, 8,,StopBits.One);
  string Send_No="13800532112",;          
  string RecieveNo=13005321618,;
  string Note="同學(xué)你好!學(xué)分集欠缺,!",;
  string message="089168";    
  /*發(fā)送地址編碼*/
char[]Pdumcenter=(Send_No+"F").ToCharArray(),;
 for (int i=0,;i<Pdumcenter.Length;i+=2)
  {
    message+=Pdumcenter[i+1].ToString(),;
    message+=Pdumcenter[i].ToString(),;
  }
    message+="11000D9168";
  /*接收目的地址編碼*/
char[]PduRecieveNo=(RecieveNo+"F").ToCharArray(),;
  for (int i=0,;i<RecieveNo.Length;i+=2)
      {
  message+=PduRecieveNo[i + 1].ToString(),;
  message+=PduRecieveNo[i].ToString(),;
        }
  message+="000800";
   /*消息內(nèi)容編碼*/
 byte[] Unote=Encoding.Unicode.GetBytes(note),;
  message+=Unote.Length.ToString("X2"),;
  for (int i=0;i<Unote.Length,; i+=2)  
 {
     message+=Unote[i+1].ToString("X2"),;
     message+=Unote[i].ToString("X2");
 }
   int PduLength=(message.Length-18)/2,;
 /*發(fā)送信息*/
  Try
{
my_send.Open(),;
my_send.Write("AT+CMGF=0\r");             
my_send.Write("AT+CSMP=17,,167,,0,240\r"),;   
my_send.Write("AT+CMGS="+PduLength+ "\r"),;
my_send.Write(message),;
my_send.Write(Encoding.ASCII.GetBytes("\x1A"),,0,
Encoding.ASCII.GetBytes("\x1A").Length);
my_send.Close(),;
 }
   catch
   {Response.Write("發(fā)送失?。?quot;),;}

 


 在VS.NET2010平臺(tái)上使用C#語言開發(fā)網(wǎng)絡(luò)應(yīng)用軟件,,引用SerialPort類,實(shí)現(xiàn)與無線通信模塊WaveCom M1206通信,;使用AT命令發(fā)送,、接收短信。在網(wǎng)絡(luò)應(yīng)用程序開發(fā)中,,使用SerialPort類實(shí)現(xiàn)短信收發(fā)功能,,完成信息發(fā)布有極高的應(yīng)用價(jià)值,如在健身房會(huì)員管理軟件中設(shè)計(jì)會(huì)員短信通知功能,,將健身房的優(yōu)惠信息,、會(huì)員卡有效期預(yù)警等信息,通過短信隨時(shí)發(fā)送給各位會(huì)員,,使會(huì)員能夠合理安排健身計(jì)劃,。本文方法在實(shí)際應(yīng)用中取得了很好的效果。
參考文獻(xiàn)
[1] WEIMENG L.C#與VB .NET網(wǎng)絡(luò)通信開發(fā)實(shí)戰(zhàn)[M].田國法,,吳蘭陟,,譯.北京:人民郵電出版社,2008.
[2] GSM 07.07:Digital cellular telecommunications system (Phase 2+),; AT command set for GSM mobile equipment 2004.
[3] 王國軍.GSM長短信PDU編碼分析[J].電腦與信息技術(shù)2011,,19(2):48-50.
[4] 鄒建峰.ASP.NET動(dòng)態(tài)網(wǎng)站設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2011.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。