歡迎您光臨本站 登入註冊首頁

基於TC35i 的PC機簡訊息收發模塊

admin @ 2014-03-26 , reply:0

概述

   簡訊息服務作為GSM系統為用戶提供的一種基本數字業務,已經得到越來越多的系統運營商和系統開發商的重視,成為諸多領域遠程監控的一種通信手段,很多應用場合需要通過PC直……

    簡訊息服務作為GSM 系統為用戶提供的一種基本數字業務,已經得到越來越多的系統運營商和系統開發商的重視,成為諸多領域遠程監控的一種通信手段,很多應用場合需要通過PC直接控制簡訊息收發功能,完成系統的數據採集或遠程信息傳輸,在一些偏遠架設通信線路比較困難的地區,尤其需要用戶直接通過PC控制簡訊息的遠程傳輸。
    本文通過介紹西門子公司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模塊的系統設計結構簡單,使用方便。


[admin via 研發互助社區 ] 基於TC35i 的PC機簡訊息收發模塊已經有3266次圍觀

http://cocdig.com/docs/show-post-44718.html