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