基于STM32和組態(tài)王的停車場短信預(yù)約系統(tǒng)的設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引 言
近年來,隨著城市的快速發(fā)展,中心城區(qū)的停車難問題日益凸顯,停車資源沒有得到有效利用是造成停車難的原因之一,而預(yù)約系統(tǒng)可以讓用戶與資源提供者進(jìn)行遠(yuǎn)程交流,從而緩解這種供求矛盾。隨著移動通信技術(shù)的快速發(fā)展,手機(jī)已經(jīng)成為人們必備的通訊工具。將手機(jī)短信服務(wù)應(yīng)用于預(yù)約系統(tǒng),可以使服務(wù)更加人性化,更便于人們使用?;?STM32 和組態(tài)王的停車場短信預(yù)約系統(tǒng),讓停車場真正實(shí)現(xiàn)智能化、人性化,使中心城區(qū)停車資源得到有效利用,對改善城區(qū)交通具有一定的積極作用。
1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)與功能
本系統(tǒng)采用了ARMCor-tex-M4內(nèi)核的STM32F407ZGT6作 為 主 控 芯 片 ,STM32F407ZGT6 是 意 法 半 導(dǎo) 體(STMicroelectronics)基于ARMCor-tex-M4內(nèi)核推出的專門用于高性能、低成本、低功耗嵌入式領(lǐng)域的 32 位微處理器 [1]。采用SIMCOM公司的 SIM900A作為通信芯片,通過通信(GSM)模塊與 STM32實(shí)現(xiàn)短信的發(fā)送和接受?;贔reeModbus協(xié)議的RTU模式的通信方式,通過RS232接口實(shí)現(xiàn)STM32單片機(jī)與組態(tài)王之間的通信,將短信內(nèi)容和用戶手機(jī)號碼傳給上位機(jī)組態(tài)王,并通過組態(tài)王對停車場進(jìn)行監(jiān)控,從而實(shí)現(xiàn)短信自動預(yù)約停車位的功能。該系統(tǒng)整體硬件結(jié)構(gòu)設(shè)計(jì)如圖 1所示。
該停車場短信預(yù)約系統(tǒng)的工作過程如下:當(dāng)系統(tǒng)正常運(yùn)行時(shí),若客戶需要提前預(yù)約停車位,可通過手機(jī)發(fā)送短信至系統(tǒng)設(shè)定的主機(jī)號碼,通過GSM 網(wǎng)絡(luò)和 SIM900A 短信收發(fā)模塊接收預(yù)約短信,并通過 RS 232 接口與STM32 主機(jī)進(jìn)行通信。該請求被 STM32 檢測并產(chǎn)生一個(gè)中斷,讀取信息及用戶號碼, 并存儲在寄存器中,通過FreeModbus 協(xié)議和 RS 232 接口將短信內(nèi)容和用戶號碼傳給組態(tài)王,組態(tài)王讀取并記錄用戶號碼。組態(tài)王軟件通過查詢停車位數(shù)據(jù)庫,監(jiān)測停車場車位數(shù), 若有空余車位,則STM32 指令自動發(fā)送“預(yù)約成功”短信到客戶手機(jī)上 ;若無空余車位,則發(fā)送“車位已滿”短信。
停車場短信預(yù)約系統(tǒng)主要由四個(gè)功能模塊構(gòu)成,即主控模塊、通信(GSM)模塊、電源模塊、數(shù)據(jù)傳輸模塊 [2]。主控模塊采用STM32 作為主控芯片,來控制短信的收發(fā)與數(shù)據(jù)的傳輸 ;GSM 模塊采用SIM900A 進(jìn)行無線通信 ;電源模塊采用12 V 獨(dú)立電源和USB 接口(COM1)相結(jié)合的供電方式; 數(shù)據(jù)傳輸模塊由兩部分組成,STM32 與GSM 模塊之間通過RS232 接口(COM3)實(shí)現(xiàn)通信,與 PC 機(jī)之間通過USB 轉(zhuǎn)RS232 接口(COM2)實(shí)現(xiàn)通信。遠(yuǎn)程終端是手機(jī)和裝有組態(tài)王的上位機(jī)(PC),將用戶發(fā)送的信息和手機(jī)號碼經(jīng)過處理之后,儲存下來,方便信息的查詢。
2 軟件設(shè)計(jì)
該系統(tǒng)以 MDK5 軟件為開發(fā)平臺,通過調(diào)用庫函數(shù)的方法,進(jìn)行程序設(shè)計(jì),應(yīng)用串口助手和 ModbusPoll 實(shí)現(xiàn)程序的設(shè)計(jì)和調(diào)試。
2.1 短信收發(fā)子系統(tǒng)的設(shè)計(jì)
為了實(shí)現(xiàn)STM32 與SIM900A 模塊之間的數(shù)據(jù)傳輸,實(shí)現(xiàn)短信收發(fā),首先要對 STM32 進(jìn)行初始化,然后配置系統(tǒng)時(shí)鐘、中斷控制器、輸入輸出的GPIO 以及相應(yīng)的串口。STM32 初始化流程圖如圖 2 所示。參數(shù)配置時(shí),需要對照原理圖進(jìn)行編寫,查看芯片端口的使用情況及其作用,然后對該子系統(tǒng)進(jìn)行配置,以保證模塊能夠正常運(yùn)行。
短信功能的實(shí)現(xiàn)主要涉及到兩個(gè)關(guān)鍵部分,一個(gè)是 AT 命令,另一個(gè)是串口的讀寫。AT 命令是主控芯片STM32和SIM900A之間的通信協(xié)議, 以此完成對 SIM900A的控制。短信的收發(fā)主要有兩種模式,一種是文本模式,該模式只支持英文內(nèi)容,另一種是PDU 模式[3]。本系統(tǒng)選擇 PDU模式進(jìn)行短信的收發(fā)。
SIM900A的短信功能主要分為兩個(gè)部分,分別為讀取短信和發(fā)送短信。接收短信的設(shè)置命令為AT+CMGR,我們將接收到的短信內(nèi)容放在一個(gè)長度為 30的BUF中,再將BUF 寫入到串口 3中,然后再讀取串口 3中的內(nèi)容,這樣,短信的編號就獲取完畢。獲取了短信的編號之后,就能去獲取短信的具體內(nèi)容,而短信的內(nèi)容則存放在ALPHA中,它處于響應(yīng)的第三個(gè)位置,通過 SIM_AT_RESPONSE(1)函數(shù),檢查GSM 模塊發(fā)送過來的數(shù)據(jù),及時(shí)上傳給電腦,就獲取了短信的內(nèi)容。發(fā)送短信的設(shè)置命令為 :AT+CIPSEND,首先將發(fā)送短信的電話號碼存入到一個(gè)BUF中,將這個(gè)BUF 寫入到串口3中,以此獲取手機(jī)號碼。最后將固定的短信內(nèi)容寫到串口3, 通過 SIM900A發(fā)送給手機(jī)用戶,具體短信發(fā)送接收流程圖如圖 3所示[4]。
該系統(tǒng)若要實(shí)現(xiàn)自動預(yù)約的功能,則在實(shí)現(xiàn)短信收發(fā)功能的基礎(chǔ)上,通過Modbus 協(xié)議使STM32 與上位機(jī)組態(tài)王進(jìn)行通信,從而實(shí)現(xiàn)短信的自動讀取和發(fā)送。短信內(nèi)容是根據(jù)組態(tài)王軟件對停車場車位使用情況的監(jiān)控而選擇發(fā)送寫好的固定信息,若監(jiān)控顯示有空余車位,則發(fā)送“預(yù)約成功,歡迎您的 光臨”,若監(jiān)控顯示無空余車位,則發(fā)送“對不起,車位已滿”。 該子系統(tǒng)主程序流程圖如圖 4 所示。
2.2 STM32與組態(tài)王通信子系統(tǒng)的設(shè)計(jì)
FreeModbus 是一個(gè)針對嵌入式應(yīng)用的免費(fèi)(自由)的通 用 Modbus 協(xié)議 的 移 植。 目前,Modbus 協(xié)議 的 異 步串行傳輸通信方式, 對應(yīng)的通信模式是 ModbusRTU 和ModbusASCII[5]。組態(tài)王內(nèi)置的單片機(jī)通信協(xié)議都有這兩種模式,ASCII 碼協(xié)議內(nèi)容較為簡單,但其傳輸數(shù)據(jù)類型的局限性大,可用于傳輸數(shù)據(jù)的寄存器少,而本系統(tǒng)要求進(jìn)行字符的發(fā)送和接收,傳輸?shù)臄?shù)據(jù)量較大,因此我們選擇了ModbusRTU 模式對控制器 STM32 進(jìn)行配置。
為了實(shí)現(xiàn)組態(tài)王和 STM32 單片機(jī)之間的通信,在設(shè)計(jì)中, 選擇移植 FreeModbus 協(xié)議,通過程序設(shè)計(jì)將STM32 配置為FreeModbus 從機(jī),可以通過組態(tài)王進(jìn)行數(shù)據(jù)的讀寫。
STM32 和組態(tài)王的通信子系統(tǒng)可分為 :初始化模塊、數(shù)據(jù)接收模塊和數(shù)據(jù)處理及發(fā)送模塊 [6]。初始化模塊主要完成波特率設(shè)置、串口中斷和定時(shí)器設(shè)置。其中,ModbusRTU 是基于串口的數(shù)據(jù)傳輸模式,為了實(shí)現(xiàn)組態(tài)王和STM32 單片機(jī)之間的通信,必須設(shè)置相同的傳輸模式和串口參數(shù)。數(shù)據(jù)接收模塊主要完成串口接收中斷和信息幀接收超時(shí)的定時(shí)器中斷處理。數(shù)據(jù)處理及發(fā)送主要根據(jù)信息幀完成相關(guān)的工作及給主機(jī)回復(fù)的相關(guān)信息。其配置程序流程圖如圖 5 所示。
2.3 STM32與組態(tài)王通信子系統(tǒng)的調(diào)試
采用 ModbusPoll 作為 RTU 主站軟件,用戶可以通過該 人機(jī)界面選擇從站地址來查看下位機(jī)的操作(讀寄存器操作和 寫寄存器操作)。ModbusRTU 的測試目標(biāo)是 RTU 主站能否對 RTU 從站發(fā)出請求幀完成相應(yīng)功能,從站能否解析請求幀及 時(shí)響應(yīng)主站請求,發(fā)出應(yīng)答幀。與 PC 機(jī)相連之后,分別對兩 種功能服務(wù)進(jìn)行若干測試,并根據(jù) ModbusRTU 協(xié)議的內(nèi)容 驗(yàn)證所得到的結(jié)果是否正確。主站PC 機(jī)通信測試如圖6所示。
3 組態(tài)監(jiān)控界面的設(shè)計(jì)
進(jìn)入組態(tài)王運(yùn)行系統(tǒng),顯示出組態(tài)王運(yùn)行系統(tǒng)畫面,如 圖 7 所示,即可看到預(yù)約指示燈按照預(yù)約狀態(tài)動態(tài)變化和實(shí) 時(shí)的車位數(shù)量信息,達(dá)到了實(shí)時(shí)監(jiān)控的預(yù)期目標(biāo),保證系統(tǒng) 正常運(yùn)行。通過組態(tài)監(jiān)控畫面實(shí)時(shí)反映預(yù)約系統(tǒng)的運(yùn)行狀態(tài), 當(dāng)有預(yù)約信息到來時(shí),“請求預(yù)約”指示燈 1 閃爍,“客戶信息”處顯示當(dāng)前預(yù)約手機(jī)號,沒預(yù)約時(shí)指示燈亮綠燈。發(fā)送“預(yù)約 已成功”信息時(shí),“預(yù)約已成功”指示燈 2 閃爍,發(fā)送成功亮 綠燈,發(fā)送失敗亮紅燈;發(fā)送“車位已滿”信息時(shí),“車位已滿” 指示燈 3 閃爍,發(fā)送成功亮綠燈,發(fā)送失敗亮紅燈。
4 結(jié) 語
組態(tài)王和 STM32 單片機(jī)以及 GSM 模塊可以組合成一套 經(jīng)濟(jì)可靠的數(shù)據(jù)采集、信息傳輸系統(tǒng),應(yīng)用于停車場,管理 人員在監(jiān)控室就可以了解整個(gè)停車場的使用情況,對停車位 進(jìn)行遠(yuǎn)程監(jiān)測、調(diào)度,降低了勞動成本、提高工作效率,同 時(shí)使停車資源得到有效利用,對改善城區(qū)交通具有一定的積極 作用。該系統(tǒng)還可以推廣應(yīng)用到其他需要短信預(yù)約系統(tǒng)的場所, 這種系統(tǒng)不但可靠、實(shí)用、經(jīng)濟(jì),而且設(shè)計(jì)簡單,易于擴(kuò)充, 具有較高的推廣價(jià)值。