姚文欽,茍 剛,母洪鋮
(貴州大學 計算機科學與技術學院,貴陽 550025)
隨著互聯(lián)網(wǎng)技術日新月異的發(fā)展,我國當前的道路貨物運輸企業(yè)呈現(xiàn)“多、小、散”的特點[1],并且對于傳統(tǒng)的貨運企業(yè)而言,其在運作模式上已經(jīng)形成了一整套運營體系,理念模式也較為陳舊.其根本原因在于該行業(yè)的特殊性,運輸過程缺乏規(guī)范化的監(jiān)控和管理.如今,互聯(lián)網(wǎng)與各行各業(yè)的結合是必不可少的趨勢,早期車輛管理系統(tǒng)主要是以美國的GPS 定位技術為依托.但出于安全情況的考慮下,由我國自主研發(fā)的北斗衛(wèi)星導航系統(tǒng)[2,3]更適合于我國軟件的發(fā)展趨勢.同時,對于車輛管理系統(tǒng)而言,國內(nèi)外研究各有特色.如:龔德平[4]以某物流公司為背景,使用Java EE 技術,設計了車輛管理系統(tǒng),有效地解決了傳統(tǒng)模式下車輛申請和車輛使用的弊端.卓浩[5]以某行政部門公務用車為背景,使用NET 平臺進行集成開發(fā),設計了更為實用的車輛管理系統(tǒng).Erkut 等人[6]以車輛運輸路線為特點,設定社會風險,路線長度等為參數(shù),通過評價危險品在運輸過程中的線路的風險,來為危險品車輛路徑優(yōu)化提供破解的方案.
本文所述系統(tǒng)主要由PHP 語言的ThinkPHP 框架,MySQL 數(shù)據(jù)庫,以及由渣土協(xié)會提供的車輛數(shù)據(jù)與北斗定位數(shù)據(jù)等為基礎,來開發(fā)實現(xiàn)相應功能.系統(tǒng)界面簡明,操作方便,在“互聯(lián)網(wǎng)+”的背景下,充分利用在線平臺來實現(xiàn)車源和貨源信息的有效聚集,降低車輛的空車率,規(guī)范渣土車輛運營,以及為實現(xiàn)源頭追溯與全流程透明化管理提供統(tǒng)一的服務[7].
本系統(tǒng)采用了層次化的設計架構,其總體架構主要分為3 部分,分別為:數(shù)據(jù)層,業(yè)務邏輯層,應用層.數(shù)據(jù)層主要是對數(shù)據(jù)庫進行訪問,以此來獲取車輛的定位數(shù)據(jù),車輛數(shù)據(jù)以及CAN 總線數(shù)據(jù);業(yè)務邏輯層主要是對數(shù)據(jù)進行相應的邏輯處理,如:車輛運輸管理、司機管理、接口管理、TCO 管理等操作;應用層主要用于在用戶操作時對相應數(shù)據(jù)的一個展現(xiàn),其主要包含:網(wǎng)站首頁、日常管理、車輛管理、用戶管理、等頁面的展現(xiàn).系統(tǒng)的總體架構如圖1所示.
圖1 系統(tǒng)總體架構圖
基于北斗的城市垃圾清運系統(tǒng)采用B/S (Browser/Server)架構設計模式,以及基于PHP的ThinkPHP 框架來進行開發(fā)[8,9],且使用了Apache 服務器.系統(tǒng)的前端主要基于HTHL 規(guī)范,其前后臺之間的數(shù)據(jù)通過Ajax的方式來進行異步請求獲取,所有接口數(shù)據(jù)均通過JSON 格式來進行交互[10,11].系統(tǒng)的后端應用程序采用了MVC (Model-View-Controller)的設計模式,更易于將系統(tǒng)的輸入輸出和邏輯處理進行分離,使軟件架構更加合理,更易于維護.此外,系統(tǒng)的數(shù)據(jù)庫采用了編碼為utf-8的關系型數(shù)據(jù)庫MySQL.
城市垃圾清運系統(tǒng)按功能劃分為網(wǎng)站首頁、車輛管理、日常管理、統(tǒng)計分析、用戶管理五大模塊,針對這五大模塊,系統(tǒng)中又設計了與其功能模塊相對應的子模塊.用戶可以通過瀏覽器訪問客戶端來使用系統(tǒng)功能,系統(tǒng)的功能模塊如圖2所示:
圖2中網(wǎng)站首頁是用戶在進入系統(tǒng)后默認展示的界面,主要用于為用戶提供基本的信息展示,如車輛總數(shù)、派出車輛占比、車輛分布數(shù)據(jù)等,用戶可通過登錄進入管理系統(tǒng).
圖2 系統(tǒng)功能模塊圖
車輛管理主要是對車輛的運輸及其軌跡進行管理,主要包括的子模塊有車輛實時位置管理,車輛運輸管理,車輛歷史軌跡管理[12,13].系統(tǒng)還可以針對固定車輛進行車輛軌跡浮現(xiàn),即查看當天車輛運輸貨物的軌跡,該數(shù)據(jù)還可多方面利用.系統(tǒng)內(nèi)車輛的運輸路線是由高德地圖來對其進行展現(xiàn),地圖模塊的定位數(shù)據(jù)來自于運輸車輛自帶的北斗定位模塊,并且在展現(xiàn)前系統(tǒng)內(nèi)部將會對車輛定位模塊發(fā)送的定位數(shù)據(jù)進行獲取,分析與處理.
日常管理包括項眾多,其中涵蓋了工地注冊(垃圾清運車起始站點)、服務點注冊、車輛注冊、車輛維修管理、車輛保險管理、保養(yǎng)管理等.日常管理的主要作用是保證系統(tǒng)服務的正常運行,該模塊在功能區(qū)中的展現(xiàn)方式主要以表格的方式來顯示.
統(tǒng)計分析是數(shù)據(jù)的綜合部分,統(tǒng)計分析模塊主要涵蓋了工地收入管理,TCO 統(tǒng)計,車輛進出統(tǒng)計,這一功能可以清晰明了的展現(xiàn)承運人的總收入,車輛運輸總趟數(shù)等綜合性數(shù)據(jù).
用戶管理主要管理在平臺上注冊的用戶信息,其中主要信息包括:賬號,姓名,電話,角色以及操作權限等.同時,可通過管理員權限來增加用戶以及分配相應用戶權限.
對于北斗衛(wèi)星定位技術而言[14],它是我國科學家根據(jù)社會經(jīng)濟發(fā)展的需要和基于國家國防安全角度的考慮開發(fā)出來的空間定位技術.此外,北斗衛(wèi)星導航系統(tǒng)可提供雙向高精度授時和短報文通信服務,其位置精度為平面5,高程10 m,測速精度0.2 m/s,授時精度為單向50 ns[15].同時,出于隱私和安全考慮,系統(tǒng)的北斗定位數(shù)據(jù)均采用數(shù)據(jù)包的形式發(fā)送,司機,車輛等信息由貴陽市渣土協(xié)會提供,并在使用時通過接口的調(diào)用來返回相應數(shù)據(jù).
當上級平臺與車輛間主從通信鏈路中斷時,需在雙方主從鏈路通信恢復后補發(fā)中斷期間的車輛定位信息,若車輛需發(fā)送的數(shù)據(jù)包大于5 條時則以每包5 條的方式進行補發(fā).同時,車輛將會通過推送數(shù)據(jù)包的方式,將數(shù)據(jù)推送到socket 服務來建立連接,以此讓客戶端獲取到車輛北斗定位模塊所提供的數(shù)據(jù)包.當長時間未收到推送數(shù)據(jù)包時,系統(tǒng)會將服務進行重啟,并由最后一個數(shù)據(jù)包的時間戳,來對未收到的數(shù)據(jù)包進行重新請求.正常獲取到的數(shù)據(jù)包如圖3所示.
圖3 車輛定位數(shù)據(jù)包
然后系統(tǒng)會在本地對數(shù)據(jù)包進行解析,進而獲取到車輛的明確定位數(shù)據(jù).由于系統(tǒng)內(nèi)使用的北斗短報文通信屬于北斗系統(tǒng)提供的民用短報文通信.在獲取相應信息時會使用字符串截取函數(shù)來對報文進行截取,并將其從16 進制轉為10 進制,并寫入數(shù)據(jù)庫,其數(shù)據(jù)包文件解碼的關鍵代碼如下:
public static function log($data){
$log_file=__DIR__.' cp_master_log'.date("Y-md").'.txt';
if(($log=fopen ($log_file,"a+"))===FALSE){
echo("創(chuàng)建可寫文件:".$log_file."失敗");
return;
}
fwrite($log,date("Y-m-d H:i:s").":".$data." ");
fclose($log);
}
// 收到數(shù)據(jù)包后自動進行解碼
public static function decode($recv_buffer){
$recv_buffer=str_replace(pack("H*","5a01"),pack("H*","5b"),$recv_buffer);
$recv_buffer=str_replace(pack("H*","5a02"),pack("H*","5a"),$recv_buffer);
……
}
系統(tǒng)的地圖服務是基于高德地圖的API[16]來開發(fā)的,該服務是車輛實時定位功能與軌跡查詢功能的基礎.在使用高德地圖的API 時,需要在高德開放平臺上的應用管理頁面創(chuàng)建一個新應用,并在該應用內(nèi)新添加一個key,然后就可以在前端頁面內(nèi)通過sctipt 標簽引入高德地圖的API來進行項目的開發(fā),引用代碼如下:
接著就可以通過高德地圖API 所提供的類以及方法來對地圖組件來進行相應的操作.通常使用Amap.Map(" ")方法來創(chuàng)建一個地圖實例對象,再通過該對象來調(diào)用高德地圖API的類和方法來實現(xiàn)具體功能.
function init(){
var map;
// 創(chuàng)建地圖實例
map=new AMap.Map("container");
var lnglats=get_lnglats();
}
對于數(shù)據(jù)層而言,ThinkPHP中內(nèi)置了抽象數(shù)據(jù)庫訪問層,可以把不同數(shù)據(jù)庫操作封裝起來,并使用公共的Db 類來進行操作,Db 類會自動調(diào)用相應的數(shù)據(jù)庫適配器來處理.系統(tǒng)主要采用在ThinkPHP中加入MySQL 數(shù)據(jù)庫驅動來建立MySQL 數(shù)據(jù)庫連接,再通過對象關系映射來定義模型類與數(shù)據(jù)庫表的映射,然后在Controller中通過對模型類的引用來操作數(shù)據(jù)庫,以此更加方便地對數(shù)據(jù)庫進行操作,并從數(shù)據(jù)庫中獲取車輛的定位數(shù)據(jù),車輛數(shù)據(jù)以及CAN 總線數(shù)據(jù).
業(yè)務邏輯層主要是由控制器去執(zhí)行相應命令,如車輛運輸管理,司機管理,接口管理等操作.前臺的業(yè)務通過接口的形式訪問到該頁面對應的控制器,然后再由控制器來操縱相應的模型去處理具體的業(yè)務邏輯.在ThinkPHP內(nèi),自定義的控制器通常要繼承系統(tǒng)的Controller 類,以此使用系統(tǒng)的內(nèi)置方法.如自定義的控制器LoginController 用于控制用戶登錄,首先控制器會通過會在視圖層輸出login.html 頁面,再該界面內(nèi),用戶在輸入用戶名和密碼后會通過Ajax 請求的方式訪問LoginController的login()方法,方法會先使用D(“User”)來實例化User 模型,并通過對象關系映射的方式來進行數(shù)據(jù)庫查詢,比對所查內(nèi)容與輸入的數(shù)據(jù)是否一致,以此來判斷用戶可否成功登錄,比對之后系統(tǒng)將通過JSON 向前端返回相應信息.
LoginController的login ()方法主要如下:
public function login (){
$user=D("User");
$result=$user->create(I(""),2);
if(!$result){
json_return(0,"登錄失敗",null,$user->get
Error());
return;
}
$result=$user->login();
if(is_array($result)){
echo json_encode($result);
}
else{
json_return(0,$result);
}
}
業(yè)務邏輯系統(tǒng)采用Bootstrap 與jQuery來設計相應應用層的樣式以及開發(fā)的效率,再結合HTML、CSS和JavaScript來實現(xiàn)網(wǎng)站首頁,車輛管理,日常管理,統(tǒng)計分析,用戶管理五大模塊的前端視圖.為了便于用戶管理,所有視圖層的文件都將存放于Home/View中,并由ThinkPHP 控制器中的渲染函數(shù)display()來進行渲染輸出.
例如,登錄后的初始界面為車輛管理模塊的車輛實時定位管理,如圖4所示,界面的左側為菜單欄,右側為功能區(qū),其中菜單欄可以根據(jù)登錄的用戶所具有的相應權限來進行相應的渲染.并且,車輛實時定位管理功能的地圖是基于調(diào)用高德地圖API[17]來實現(xiàn)的,該功能可以通過選定車輛的車牌號和行駛時間來對車輛的運行軌跡進行查詢,從而快速定位到車輛位置,并實時監(jiān)控其運輸狀態(tài).與此同時還可以根據(jù)需求來對工廠,消納場點等位置是否顯示做出操作.
圖4 車輛實時位置管理
系統(tǒng)使用PHPStorm 軟件與基于PHP的ThinkPHP框架完成開發(fā),并已部署至實際的企業(yè)環(huán)境中運行,目前經(jīng)用戶反饋運行效果良好.平臺使用阿里云服務器提供云服務,使用Windows 系統(tǒng)部署開發(fā)環(huán)境.用戶在系統(tǒng)中可通過相應的界面操作,可方便地使用各項功能,清晰的掌握車輛的實時位置,以及查看當前工地的詳細收益情況.截至2020年12月7 日,系統(tǒng)共有111 輛渣土運輸車接入系統(tǒng),注冊司機超210 人次,系統(tǒng)內(nèi)啟用的工地共42個,其部分車輛運行情況如圖5所示,內(nèi)含車輛當前運行的位置、速度、駕駛人、聯(lián)系電話和時間等信息.
圖5 車輛運行情況
基于北斗的城市垃圾清運系統(tǒng)實現(xiàn)了對垃圾清運車的有效管理,其在技術上,相對于傳統(tǒng)城市垃圾回收運輸而言,它可以實現(xiàn)源頭追溯,且具有更便捷的可視化界面;實現(xiàn)全流程透明化管理,并且實時關注每個環(huán)節(jié)的進展情況,以便更好地為企業(yè)降本增效;與此同時系統(tǒng)均采用了北斗系列來進行數(shù)據(jù)采集,更有效的維護了信息和技術的安全.但系統(tǒng)由于定位數(shù)據(jù)量過于龐大,查詢車輛的歷史軌跡的時候,需要通過查詢車輛的歷史定位數(shù)據(jù)來實現(xiàn),此時后臺數(shù)據(jù)加載時間會較長,也有可能會導致數(shù)據(jù)加載失敗的問題.在后續(xù)的開發(fā)過程中還將會進一步地對問題進行改善,并且還可在后續(xù)的開發(fā)過程中結合機器學習來對司機的駕駛行為與車輛的健康狀況進行相應的分析.