基于SIM800C的GPRS數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)*
2.1 模塊AT命令
本文引用地址:http://m.butianyuan.cn/article/201610/311927.htmSIM800系列通訊模塊的主要AT指令同SIMCom公司其他型號(hào)的物聯(lián)網(wǎng)通訊模塊的指令大部分相同,可用以兼容各個(gè)不同的硬件版本,用來建立TCP連接的相關(guān)命令及其作用如表1。
利用STM32的標(biāo)準(zhǔn)庫函數(shù)可以快速對(duì)芯片的USART進(jìn)行初始化,在STM32的main函數(shù)中,上電后主要完成相應(yīng)的時(shí)鐘以及GPIO,使能芯片的USART接口、初始化波特率等。并配置中斷向量,編寫相關(guān)的串口中斷處理程序,作為返回值接收處理函數(shù)的基礎(chǔ)。為測(cè)試系統(tǒng)傳輸數(shù)據(jù)的準(zhǔn)確性,通過STM32的485接口,應(yīng)用Modbus協(xié)議每隔1秒采集一款485型溫濕度傳感器及其他傳感器的數(shù)據(jù)進(jìn)行傳輸,每隔30秒進(jìn)行一次GPRS傳輸,并將數(shù)據(jù)保存在DeviceRunStatus_Struct結(jié)構(gòu)體中。
針對(duì)SIM800C操作需要初始化STM32的串口,配置SIM800C運(yùn)行模式,其中,網(wǎng)絡(luò)域名的參數(shù)保存在DNSPara_Struct結(jié)構(gòu)體中,例如,域名地址、DNS服務(wù)器地址1和DNS服務(wù)器地址2。ProtocolPara_Struct結(jié)構(gòu)體中主要存放與IP相關(guān)的參數(shù),例如本地TCP端口m_LocalTcpPort、服務(wù)器Tcp地址m_ServerTcpPort和服務(wù)器地址m_ServerIPAddr。在利用SIM800C進(jìn)行TCP連接的AT命令時(shí),直接調(diào)用這兩個(gè)結(jié)構(gòu)體內(nèi)的參數(shù)進(jìn)行連接即可。根據(jù)AT命令執(zhí)行后的返回值判斷連接是否成功,此時(shí)令m_RunPara.m_DeviceRunStatus.m_nGprs = 1,置位連接狀態(tài)標(biāo)志。
2.2 異常處理
在日常測(cè)試中發(fā)現(xiàn),可能會(huì)由于信號(hào)或環(huán)境的影響導(dǎo)致SIM800C模塊出現(xiàn)異常,模塊串口報(bào)錯(cuò)TCP CLOSED導(dǎo)致連接中斷。軟件設(shè)計(jì)中,在處理此類型問題時(shí),利用GPRS_Check_Periodic_Handle()函數(shù)每隔30秒檢查一次連接狀態(tài),若內(nèi)存中的變量m_RunPara.m_DeviceRunStatus.m_nGprs值為0,即連接失敗時(shí),對(duì)SIM800C模塊進(jìn)行重新上電操作,將模塊遠(yuǎn)程自動(dòng)重啟,重新執(zhí)行開機(jī)、配置、連接TCP等一系列動(dòng)作以恢復(fù)模塊的正常運(yùn)行。并在程序中設(shè)定域名最大連接次數(shù)為3次,即在3次域名連接仍未成功則使用IP地址方式進(jìn)行連接,保證域名及IP連接均可正常使用。
2.2 心跳包機(jī)制
在模塊與服務(wù)器建立TCP連接后,由于GPRS網(wǎng)絡(luò)運(yùn)營(yíng)商的設(shè)置,若在某一時(shí)間段內(nèi)客戶端與服務(wù)端沒有任何數(shù)據(jù)交換,會(huì)將網(wǎng)絡(luò)斷開,導(dǎo)致連接中斷,數(shù)據(jù)無法正常傳輸,為解決這一問題,在TCP通訊協(xié)議內(nèi)加入心跳包機(jī)制,用于長(zhǎng)連接的保持和斷線處理。CMD_HeartTime命令號(hào),在第一次建立連接后,客戶端發(fā)送當(dāng)前設(shè)備時(shí)鐘,服務(wù)端開啟Timer定時(shí)器每隔30秒鐘根據(jù)命令號(hào)進(jìn)入心跳包處理的case語句中執(zhí)行,進(jìn)行雙向?qū)r(shí)操作,這樣既可以保持雙向穩(wěn)定連接,又可以對(duì)物聯(lián)網(wǎng)設(shè)備進(jìn)行RTC更新時(shí)間操作,保證了設(shè)備運(yùn)行的穩(wěn)定性。下位機(jī)軟件代碼如下:
case CMD_HeartTime:
if(pNetComm->m_Header.m_nOperation == 0)
{
UpdateTimer(pNetComm->unoin.m_TimerPara.m_TimestampL);
pNetComm->m_Header.m_nOperation = 1;
chRet = 1;
}
break;
在下位機(jī)收到CMD_HeartTime命令號(hào)時(shí),進(jìn)入該case語句內(nèi),UpdateTimer函數(shù)用于更新設(shè)備的RTC時(shí)鐘,并置TCP數(shù)據(jù)包的頭部m_Header中的.m_nOperation為1,在最后打包結(jié)構(gòu)體數(shù)據(jù)通過TCP協(xié)議發(fā)送給服務(wù)器端。
將未加入異常處理與心跳包機(jī)制的1號(hào)設(shè)備與經(jīng)過優(yōu)化的2號(hào)設(shè)備運(yùn)行一上午的時(shí)間進(jìn)行對(duì)比,具體連接情況對(duì)比如表2與表3所示。
測(cè)試發(fā)現(xiàn),1號(hào)設(shè)備會(huì)因網(wǎng)絡(luò)問題超時(shí)而斷開連接,只能靠人工手動(dòng)進(jìn)行復(fù)位重連;2號(hào)設(shè)備在上線后僅因服務(wù)器原因斷開連接,隨后便立即自動(dòng)重連并保持連接至測(cè)試結(jié)束。說明異常處理、心跳包機(jī)制與斷線重連起到了提高設(shè)備傳輸穩(wěn)定性的作用。將2號(hào)設(shè)備接入獨(dú)立IP的云服務(wù)器,通過網(wǎng)頁查看觀測(cè)24小時(shí),發(fā)現(xiàn)無異常掉線問題,數(shù)據(jù)正確穩(wěn)定傳輸。服務(wù)器端部分接收情況如圖6所示。
3 結(jié)論
論文以STM32F207VCT6為主控芯片,以最新的GPRS模塊SIM800C為物聯(lián)網(wǎng)通訊模塊進(jìn)行無線數(shù)據(jù)傳輸,長(zhǎng)時(shí)間設(shè)備運(yùn)行測(cè)試未發(fā)現(xiàn)掉線及傳輸錯(cuò)誤情況,傳輸情況穩(wěn)定,基于C語言編寫的嵌入式程序代碼可方便地移植到其他類型的單片機(jī)中,方便進(jìn)行二次開發(fā),為物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)的傳輸提供了一種新的穩(wěn)定的解決方案。
參考文獻(xiàn):
[1]劉火良.STM32庫開發(fā)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,2013.
[2]李濤,馬殷元,楊東. 基于STM32的GPRS遠(yuǎn)程檢測(cè)終端設(shè)計(jì)[J]. 電子世界,2012.
[3]張逢雪,王香婷,王通生. 基于STM32單片機(jī)的無線智能家居控制系統(tǒng)[J]. 自動(dòng)化技術(shù)與應(yīng)用,2011.
[4]Simcom. SIMCOM800C硬件設(shè)計(jì)手冊(cè).pdf[EB/OL]. http://simcomm2m.com/UploadFile/TechnicalFile/SIM800C_硬件設(shè)計(jì)手冊(cè)_V1.01.pdf.
[5]Simcom. SIM800Series AT Command ManualV1.09.pdf[EB/OL].
http://simcomm2m.com/UploadFile/TechnicalFile/SIM800Series_ATCommandManual_V1.09.pdf.
[6]Simcom. SIM80系列TCPIP應(yīng)用文檔V1.01.pdf[EB/OL].http://simcomm2m.com/UploadFile/TechnicalFile/SIM800系列_TCPIP_應(yīng)用文檔_V1.01.pdf.
本文來源于中國(guó)科技期刊《電子產(chǎn)品世界》2016年第10期第39頁,歡迎您寫論文時(shí)引用,并注明出處。
評(píng)論