本文通過介紹西門子公司TC35i GSM 的PC機短信息收發模塊,詳細闡述TC35i和PC之間的硬件連接及部分接口電路原理,PC通過軟件編程利用AT指令控制模塊工作,實現短信息的收發功能。該模塊可應用于多個領域的遠程信息傳輸系統,特別適用于需頻繁傳送小數據量的遠程信息傳輸系統,如鐵路遠程信息傳輸、電力遠程抄表和水利遠程監控等領域。
硬件設計
針對TC35i模塊與PC連接的電源接口、通信接口和控制接口等接口存在的一些問題,采取有效的方法實現兩者硬件電路的連接,TC35i模塊安裝在PC內部,由PC電源供電,同時通過PC串行口實現數據交換,再經軟件編程實現模塊啟動、關閉的收發功能。
TC35i模塊TC35i模塊是西門子公司推出的一種無線通信模塊,它是集射頻電路、基帶于一體,向用戶提供標準的AT命令接口,為數據、語音、短信息和傳真提供快速、可靠、安全的傳輸,方便用戶的開發設計及應用。
TC35i模塊應用接口采用40腳的Zip插座,包含的引腳功能有:3.3~5.5V、峰值為2A的直流電源接口,模擬音頻輸入、輸出接口,8個引腳的標準RS232信號接口,6個引腳符合GSM11.11標準的SIM 卡連接、控制接口。本文應用4個接口,電源接口、控制接口、串行通信接口及SIM卡連接接口。
系統結構
系統結構圖如圖1所示,為增強系統的靈活性,TC35i模塊直接由PC內部5V電源供電,PC與TC35i模塊通過串行通訊的RxD、TxD和地線三線制完成通訊,串行通訊的DTR和RTS接口與TC35i模塊的控制接口連接,實現PC通過軟件對短信息收發模塊的控制和數據交換。

電源接口電路
電源接口電路如圖2所示,除提供整個模塊的5V工作電壓外,主要的是為TC35i模塊提供工作電壓。

TC35i模塊工作電壓為3.3~5 V,穩定工作電壓4.4V左右,在啟動連接登陸網絡的傳輸過程中要求電源能提供2 A的峰值電流、不大于400 mV的壓降,因為在數據傳輸過程中當電壓的波動大于400 mV時,TC35i模塊認為工作電壓過低而自動關閉TC35i模塊,因此在設計TC35i模塊的電源時必須考慮電壓下降的可能性,保證小電壓高于4V。PC直流輸出電壓通過比較電路與基準電壓進行比較,誤差電壓由通/斷時間比例控制電路調整直流輸出電壓,線路濾波器防止交流信號噪聲輸入,抑制電源內部產生的反饋噪聲。控制接口電路
控制接口電路的目的是利用PC串行通訊的DTR和RTS信號線分別控制TC35i模塊IGT點火線和EMERG0FF強制關閉線,實現PC對TC35i模塊的啟動和關閉控制。啟動TC35i模塊時,為使TC35i模塊上電10ms后(供電電壓必須大于4V)正常工作,須在IGT引腳加時長至少為100ms的低電平信號,該信號下降沿時間小于1ms,啟動后IGT引腳的信號保持高電平;關閉TC35i模塊時,須在EMERG0FF引腳加一個時長至少為3.2s的低電平信號。
一般設計中,上述延時直接通過PC機軟件編程即可實現整個模塊的啟動和關閉控制,但在實際設計過程中發現,PC啟動過程中DTR引腳和RTS引腳存在一個約4s左右的波動,波形圖如圖3所示,如果該波動不濾除,將會引起TC35i模塊的非正常啟動,本接口電路采用RC延時電路和施密特觸發器濾除該波動信號,部分控制接口電路如圖4所示。


數據通信接口電路
數據通信接口電路完成短信息收發及與PC通信等功能,TC35i模塊與PC串行口使用簡單的三線制進行數據交換。因PC的RS232接口和TC35i模塊串行接口的電平規范不同,本文使用簡單的施密特觸發器、穩壓管和電阻實現RxD和TxD電平轉換,電路如圖5所示。

軟件設計
通過VC++6.0語言實現軟件編程,PC首先通過編程打開與TC35i模塊相連的串行口,然后通過此串行口向模塊發送各種AT指令,實現對TC35i模塊的控制,完成短信息收發功能。
串行口初始化在Windows環境下,常用編程實現串行口操作的方法除利用MSComm控件和某些現成的串行口通信外,還可以直接調用Windows API實現,程序如(程序1):
(程序1)
HANDLE hComm; //串行口設備控制
BOOL OpenComm (const char* pPort,int nBaudRate,int nParity,int nByteSize,int nStopBits)
{
DCB dcb; //串行口控制塊
COMMTIMEOUTS timeouts={//串行口超時控制參數
100,//讀字符間隔超時時間:100 ms
1,//讀操作時每字符的時間:1 ms
500,//基本的(額外的)讀超時時間:500 ms
1,//寫操作時每字符的時間:1 ms
100}; //基本的(額外的)寫超時時間:100 ms
hComm=CreateFile(pPort //串行口名稱或設備路徑
GENERIC_READ | GENERIC_WRITE,//讀寫方式
0, //共享方式:獨占
NULL, //默認的安全描述符
OPEN_EXISTING,//創建方式
0,//不需設置文件屬性
NULL); //不需參照模板文件
if(hComm == INVALID_HANDLE_VALUE) return FALSE;//打開串行口失敗
GetCommState(hComm,&dcb); //取DCB
dcb.BaudRate= nBaudRate;
dcb.ByteSize=nByteSize;
dcb.Parity=nParity;
dcb.StopBits=nStopBits;
SetCommState(hComm,&dcb); //設置DCB
SetuDComm(hComm,4096,1024);//設置輸入輸出緩沖區大小
::SetCommTimeouts(hComm,&timeouts); // 設置超時
return TRUE;
};
TC35i模塊啟動TC35i模塊在系統上電10ms后,IGT引腳加時長至少100ms、下降沿時間小于1ms的低電平信號,完成模塊的正常啟動,模塊啟動時利用軟件控制串行口DTR引腳的電平轉換,DTR引腳的狀態作為串行口的一個屬性與波特率、數據位長度、校驗位、停止位等一樣保存在串行口的狀態結構DCB結構中,設置DTR引腳狀態時,只需保持串行口狀態結構中的其他屬性不變,控制程序如(程序2)
(程序2)
void EnableDTR() //設置DTR有效
{
DCB dcb;
GetCommState(hComm,&dcb); //取DCB
dcb.fDtrControI=DTR_CONTROL_ENABLE;
SetCommState(hComm,&dcb); //設置DCB
}
void DisableDTR()//設置DTR無效
{
DCB dcb;
GetCommState(hComm,&dcb); //取DCB
dcb.fDtrControl=DTR_CONTROL_DISABLE;
SetCommState(hComm,&dcb); //設置DCB
}
在控制接口電路中為濾除DTR引腳的電平波動,利用硬件電路實現DTR引腳由低電平到高電平延時的,軟件控制模塊啟動過程中需跨過相同的延時時間,模塊啟動程序如(程序3):
(程序3)
void SMSStart(void) //模塊啟動
{
DisableRTS();//禁止RTS,將PowerDown設為HiZ高阻態
EnableDTR();
Sleep(11000);//跨過延時時間,此數值根據硬件電路可調
DisableDTR();
}
AT命令
AT命令集是SMS的DTE-DCE接口標準,是用戶控制TC35i模塊工作的媒介,利用TC35i模塊和進行TC35i模塊二次開發都須向模塊發送AT命令完成,TC35i模塊的命令接口完全符合GSM07.05和GSM07.07規范。PC通過串行口向TC35i模塊發送AT命令,同時接收模塊對發送的返回信息通過對串行口的讀、寫操作實現模塊的收發功能。串行口的發送、接收程序如(程序4):
(程序4)
//pData:待寫的數據緩沖區指針
//nLength:待寫的數據長度
void WriteCom(void *pData,int nLength)//發送程序
{
DW0RD dwNumWrite; //串行口發出的數據長度
WriteFile(hComm,pData,(DWORD)nLength,
&dwNumWrite,NULL);
}
//pData:待讀的數據緩沖區指針
//nLength:待讀的數據長度
//返回:實際讀入的數據長度
int ReadCom(void *pData,int nLength) //接收程序
{
DWORD dwNumRead; //串行口收到的數據長度
ReadFile(hComm,pData,(DWORD)nLength,
&dwNumRead,NULL);
return (int)dwNumRead;
}
短信息收、發
目前通過GSM無線模塊收發短信息主要分為Block模式、Text模式和PDU模式三種模式。Block模式已逐漸被PDU模式取代;Text模式收發短信息原理簡單,程序實現比較容易,缺點是只能收發英文信息不能收發中文信息;PDU模式則完全可以解決這個問題,通過PDU編碼的短信息內容既可以是英文信息也可以是中文信息。
TC35i模塊設置為PDU模式,通過向TC35i模塊發送AT命令和PDU串完成短信息的發送,相應的AT命令為: AT+CMGS=<Length><CR>,其中Length為本條短信息發送字符的總長度,<CR>是回車符號即0x0D,向TC35i模塊發送此命令后,等待TC35i模塊返回“>”ASCll字符,同時將已經編碼的PDU串發送至TC35i模塊,并以Ctrl+Z(0x1A)結尾,TC35i模塊接收到PDU串后開始發送短信息,短信息發送成功后TC35i模塊返回<CRLF>OK<CRLF>,<CRLF>是回車換行符號。
接收短信息時,TC35i模塊根據用戶的設置決定是否向用戶發送短信息到達的提示,短信息到達提示的格式為:<CRLF>+CMTI:“SM”,INDEX(信息存儲位置)<CRLF>,用戶收到短信息到達提示后,向TC35i模塊發送:AT+CMGR=INDEX<CRLF>命令,讀取相應短信息的PDU串。若用戶設置TC35i模塊時關閉了短信息到達提示,則用戶可以利用AT+CMGL指令列出所有接收后未閱讀的短信息,模塊將返回所有未閱讀的短信息的PDU串。
TC35i模塊關閉
系統退出時須將TC35i模塊關閉。TC35i模塊提供兩種關閉方式,系統正常退出時,利用AT^SMSO指令關閉TC35i模塊,模塊接收到AT^SMSO指令后,進行關機操作并返回^SMSO: MSOFF<CRLF>OK:當系統出現異常情況軟件關閉失敗時,利用TC35i模塊的強制關閉功能,即TC35i模塊停止響應的時間超過5秒時,在EMERGOFF強制關閉線加一個不小于3.2秒的低電平信號實現強制關機,即對PC機的串行口RTS線進行相應的操作。
結束語
本文實現了PC在TC35i GSM模塊上的短信息收發功能,解決了PC啟動時串行口不規則信號對模塊的影響,軟件實現了PC直接控制模塊啟動、關閉功能。短信息傳輸具有覆蓋面廣、自動傳送、費用低、穩定性好等優點,正成為一種廉價、實用、高效無線數據雙向傳送、無線遠程監測和控制的解決方案,同時結合TC35i GSM模塊的系統設計結構簡單,使用方便。