劉湘煜,唐 倫,羅花芝
(1.湖南汽車工程職業(yè)學(xué)院信息工程學(xué)院,株洲 412001;2.湖南汽車工程職業(yè)學(xué)院車輛工程學(xué)院,株洲 412001)
隨著汽車的進一步普及,停車已經(jīng)變成許多城市的一大難題。立體停車應(yīng)運而生。大型的立體停車庫雖然好用,也可提供很多停車位,但因所需初期投資較多,同時多數(shù)情況下也不需要,因而產(chǎn)生了比較簡單的雙層立體停車庫。張濤等設(shè)計了三層停車庫;王中原等設(shè)計了基于ADAMS 的無避讓側(cè)方位立體停車設(shè)備升降機構(gòu)。這些設(shè)計均已經(jīng)對側(cè)方位立體停車庫的機械設(shè)計進行了分析,本文基于無避讓側(cè)方位智能停車設(shè)備的嵌入式智能控制系統(tǒng)軟件進行分析和設(shè)計。
基于無避讓智能立體停車設(shè)備的智慧停車系統(tǒng)分為三部分,分別是車庫管理云平臺,智慧停車App 以及智能立體停車裝置,作為Iot(internet of things,物聯(lián)網(wǎng))系統(tǒng),其架構(gòu)如圖1所示。
圖1 智慧停車系統(tǒng)架構(gòu)
系統(tǒng)開發(fā)分為前端智慧停車App 以及后臺車庫管理云平臺,同時針對后臺平臺管理的Web頁面。
其中,車庫管理云平臺作為整個停車服務(wù)的中心,承接了App 與立體停車設(shè)備間的通信,停車流程如下:
(1)當(dāng)用戶發(fā)起停車請求時,服務(wù)器生成訂單,記錄起始時間。
(2)服務(wù)器對指定停車設(shè)備下達(dá)指令,同時監(jiān)測停車設(shè)備狀態(tài)。
(3)當(dāng)停車設(shè)備正確打開且車輛停入后,服務(wù)器收到反饋,對數(shù)據(jù)庫中該設(shè)備狀態(tài)進行更新。
(4)當(dāng)用戶停車結(jié)束后,將車輛駛離停車設(shè)備。
(5)服務(wù)器監(jiān)聽到設(shè)備狀態(tài)發(fā)生改變,對該次服務(wù)的訂單進行更新,記錄結(jié)束時間。
(6)服務(wù)器推送賬單信息給用戶。
流程簡圖如圖2所示。
圖2 停車流程簡圖
服務(wù)器后臺采用Spring+SpringMVC+MyBatis的經(jīng)典SSM 框架。由Spring 統(tǒng)一所有實體類的創(chuàng)建與使用,SpringMVC 攔截用戶請求并處理,再通過MyBatis對數(shù)據(jù)庫表進行更新。
考慮到服務(wù)器需要對多個停車設(shè)備硬件下達(dá)指令,并且接收到反饋結(jié)果更新設(shè)備狀態(tài),輪詢對服務(wù)器壓力過大,因此需要建立服務(wù)器與終端間的TCP 長連接,通過心跳檢測來確保連接狀態(tài),同時還需要對不同的設(shè)備指令進行異步處理。
因此在SSM 框架的基礎(chǔ)上,整合了Netty 開源框架,由Netty 專門處理對于長連接的異步通信及狀態(tài)更新。它提供了對TCP、UDP、HTTP(S)等幾乎所有的通用協(xié)議以及文件傳輸?shù)膹姶笾С?。在保證應(yīng)用程序安全性、健壯性的同時又隱藏了其API 的復(fù)雜性,為不同傳輸類型提供了幾乎完全一致的API接口。
停車設(shè)備通信與服務(wù)器流程如圖3 所示。NettySocketListener 對服務(wù)器與停車設(shè)備的TCP連接進行監(jiān)聽,心跳包中包括了當(dāng)前停車設(shè)備的狀態(tài),這些數(shù)據(jù)在專有的通道Channel 中傳輸。如果停車設(shè)備狀態(tài)發(fā)生改變,NettyServer ChannelInitalizer 將 通 知TCPServer Handler 把 這次數(shù)據(jù)更新,并交給Spring 生成相應(yīng)容器,同時在SpringMVC 中進行處理,由Mybatis 更新數(shù)據(jù)庫該設(shè)備狀態(tài)和本次服務(wù)訂單詳情。
圖3 SSM+Netty框架下停車設(shè)備與服務(wù)器通信流程
如果是用戶主動發(fā)起請求,通過Netty Util與服務(wù)器建立連接、發(fā)出請求,請求由SpringMVC 攔截進行處理,通過Spring 生成具體指令,交由TCPServerHandler執(zhí)行。
車庫管理云平臺作為智慧停車App 和智能停車設(shè)備的后臺服務(wù)器,同時對用戶及停車設(shè)備進行管理模塊。
云平臺主要分為3個模塊,分別是用戶管理模塊,訂單管理模塊和停車設(shè)備管理模塊。
(1)用戶管理模塊。用于用戶登錄,包括注冊功能和信息查詢。
(2)訂單管理模塊。訂單中包含停車設(shè)備id,用戶id,起始時間與結(jié)束時間。用戶發(fā)起的初始訂單不包含結(jié)束時間,當(dāng)停車服務(wù)結(jié)束后,訂單更新并推送給用戶。
(3)停車設(shè)備管理模塊。僅對管理員開放,可以查看所有設(shè)備的狀態(tài),添加新設(shè)備與刪除設(shè)備。同時可以對設(shè)備直接下達(dá)指令進行狀態(tài)更改。車庫管理云平臺用例圖如圖4所示。
圖4 車庫管理云平臺例圖
數(shù)據(jù)庫設(shè)計分為停車場信息表(Car_Park),停車設(shè)備信息表(Pillar_info),訂單表(Order),以及用戶表(User)。
其中停車場信息表包含其本身編號C_id,以及所在省市地區(qū)。
停車設(shè)備信息表包含設(shè)備編號P_id 以及所處停車場編號C_id,校驗碼crc,登記時間setup_time,以及status 狀態(tài),其中0 代表關(guān)閉,1代表正在使用,2表示故障其他。
用戶表包含用戶登錄基本信息以及用戶編號,同時需要記錄用戶手機號碼與車牌信息。為方便管理,將管理員也加入到User 表中,用permission 來表示權(quán)限,0 為用戶,1 為管理員。管理員可對后臺的web 端進行操作,而用戶只可使用App前端。
訂單表包含本身訂單編號O_id,發(fā)起的用戶U_id,使用的停車設(shè)備P_id,訂單狀態(tài)status,起始時間startTime,以及結(jié)束時間endTime。
其中O_status 用于表示訂單當(dāng)前狀態(tài),0 為進行中,1為結(jié)束,2為異常申報。
新生成的訂單endTime為空,當(dāng)停車服務(wù)結(jié)束后,對該次訂單結(jié)束時間進行更新,便于計算賬單。
其中,訂單表Order結(jié)構(gòu)見表1。
表1 訂單表(Order)
智慧停車App 功能劃分為三個部分,分別是“我的”,“停車”和“歷史”。
功能結(jié)構(gòu)圖如圖5所示。
圖5 App功能結(jié)構(gòu)圖
(1)“我的”用于用戶登陸后顯示自己信息,可對資料進行完善,也可看到自己當(dāng)前是否在停車狀態(tài)中。
(2)“停車”是主要功能模塊,根據(jù)移動設(shè)備的LBS 定位獲取經(jīng)緯度信息,使用百度定位SDK 獲取具體所在地區(qū),并在數(shù)據(jù)庫中與停車場信息表進行匹配,顯示附近的停車場位置。
到達(dá)停車場后,停車設(shè)備上貼有二維碼,用戶掃碼獲取停車設(shè)備信息,并發(fā)起停車請求,生成訂單。
通過停車結(jié)束功能結(jié)算當(dāng)前訂單,訂單更新結(jié)束時間,用戶需要在五分鐘內(nèi)完全駛離該停車樁。
(3)“歷史”功能可以查詢歷史停車記錄,包括所處停車場,使用的停車設(shè)備信息以及起止時間和支付金額。同時可以對有異議的訂單進行申報。
為了方便用戶使用停車功能,使得用戶不用下車也能便捷停車,采用App 掃描二維碼來發(fā)起訂單請求。二維碼生成基于Zxing 的開源庫。
二維碼包含該停車設(shè)備編號P_id,停車場編號C_id,上次維護時間maintenance_time 以及校驗碼,以Json 數(shù)據(jù)的格式編譯為二維碼張貼在停車設(shè)備上。
當(dāng)用戶掃碼之后獲取Json 數(shù)據(jù),App 使用Google 的開源庫Gson 工具對數(shù)據(jù)進行解析,驗證校驗碼,并確定該設(shè)備在使用年限中。然后獲取停車設(shè)備編號P_id,將自己的編號U_id 加上當(dāng)前時間current_time 打包成新的Json 數(shù)據(jù),并向服務(wù)器發(fā)送訂單請求。
服務(wù)器接到用戶請求,向指定停車設(shè)備下達(dá)指令,并且生成訂單。
流程圖如圖6所示。
圖6 掃碼停車流程圖
本文完成了基于無避讓智能立體停車設(shè)備的智慧停車系統(tǒng),該系統(tǒng)包含一個車庫管理云平臺以及智慧停車App,結(jié)合智能立體停車設(shè)備可以大大提高停車場的空間利用率,使得停車更加規(guī)范化,緩解道路壓力,同時使用戶停車過程更加便捷,具有良好的經(jīng)濟效益和社會效益。