基于北斗的城市垃圾清运系统①
2021-08-02姚文钦母洪铖
姚文钦,苟 刚,母洪铖
(贵州大学 计算机科学与技术学院,贵阳 550025)
随着互联网技术日新月异的发展,我国当前的道路货物运输企业呈现“多、小、散”的特点[1],并且对于传统的货运企业而言,其在运作模式上已经形成了一整套运营体系,理念模式也较为陈旧.其根本原因在于该行业的特殊性,运输过程缺乏规范化的监控和管理.如今,互联网与各行各业的结合是必不可少的趋势,早期车辆管理系统主要是以美国的GPS 定位技术为依托.但出于安全情况的考虑下,由我国自主研发的北斗卫星导航系统[2,3]更适合于我国软件的发展趋势.同时,对于车辆管理系统而言,国内外研究各有特色.如:龚德平[4]以某物流公司为背景,使用Java EE 技术,设计了车辆管理系统,有效地解决了传统模式下车辆申请和车辆使用的弊端.卓浩[5]以某行政部门公务用车为背景,使用NET 平台进行集成开发,设计了更为实用的车辆管理系统.Erkut 等人[6]以车辆运输路线为特点,设定社会风险,路线长度等为参数,通过评价危险品在运输过程中的线路的风险,来为危险品车辆路径优化提供破解的方案.
本文所述系统主要由PHP 语言的ThinkPHP 框架,MySQL 数据库,以及由渣土协会提供的车辆数据与北斗定位数据等为基础,来开发实现相应功能.系统界面简明,操作方便,在“互联网+”的背景下,充分利用在线平台来实现车源和货源信息的有效聚集,降低车辆的空车率,规范渣土车辆运营,以及为实现源头追溯与全流程透明化管理提供统一的服务[7].
1 系统设计
1.1 系统总体架构设计
本系统采用了层次化的设计架构,其总体架构主要分为3 部分,分别为:数据层,业务逻辑层,应用层.数据层主要是对数据库进行访问,以此来获取车辆的定位数据,车辆数据以及CAN 总线数据;业务逻辑层主要是对数据进行相应的逻辑处理,如:车辆运输管理、司机管理、接口管理、TCO 管理等操作;应用层主要用于在用户操作时对相应数据的一个展现,其主要包含:网站首页、日常管理、车辆管理、用户管理、等页面的展现.系统的总体架构如图1所示.
图1 系统总体架构图
1.2 系统开发环境
基于北斗的城市垃圾清运系统采用B/S (Browser/Server)架构设计模式,以及基于PHP的ThinkPHP 框架来进行开发[8,9],且使用了Apache 服务器.系统的前端主要基于HTHL 规范,其前后台之间的数据通过Ajax的方式来进行异步请求获取,所有接口数据均通过JSON 格式来进行交互[10,11].系统的后端应用程序采用了MVC (Model-View-Controller)的设计模式,更易于将系统的输入输出和逻辑处理进行分离,使软件架构更加合理,更易于维护.此外,系统的数据库采用了编码为utf-8的关系型数据库MySQL.
1.3 系统功能模块设计
城市垃圾清运系统按功能划分为网站首页、车辆管理、日常管理、统计分析、用户管理五大模块,针对这五大模块,系统中又设计了与其功能模块相对应的子模块.用户可以通过浏览器访问客户端来使用系统功能,系统的功能模块如图2所示:
图2中网站首页是用户在进入系统后默认展示的界面,主要用于为用户提供基本的信息展示,如车辆总数、派出车辆占比、车辆分布数据等,用户可通过登录进入管理系统.
图2 系统功能模块图
车辆管理主要是对车辆的运输及其轨迹进行管理,主要包括的子模块有车辆实时位置管理,车辆运输管理,车辆历史轨迹管理[12,13].系统还可以针对固定车辆进行车辆轨迹浮现,即查看当天车辆运输货物的轨迹,该数据还可多方面利用.系统内车辆的运输路线是由高德地图来对其进行展现,地图模块的定位数据来自于运输车辆自带的北斗定位模块,并且在展现前系统内部将会对车辆定位模块发送的定位数据进行获取,分析与处理.
日常管理包括项众多,其中涵盖了工地注册(垃圾清运车起始站点)、服务点注册、车辆注册、车辆维修管理、车辆保险管理、保养管理等.日常管理的主要作用是保证系统服务的正常运行,该模块在功能区中的展现方式主要以表格的方式来显示.
统计分析是数据的综合部分,统计分析模块主要涵盖了工地收入管理,TCO 统计,车辆进出统计,这一功能可以清晰明了的展现承运人的总收入,车辆运输总趟数等综合性数据.
用户管理主要管理在平台上注册的用户信息,其中主要信息包括:账号,姓名,电话,角色以及操作权限等.同时,可通过管理员权限来增加用户以及分配相应用户权限.
2 系统实现关键技术
2.1 北斗定位数据处理
对于北斗卫星定位技术而言[14],它是我国科学家根据社会经济发展的需要和基于国家国防安全角度的考虑开发出来的空间定位技术.此外,北斗卫星导航系统可提供双向高精度授时和短报文通信服务,其位置精度为平面5,高程10 m,测速精度0.2 m/s,授时精度为单向50 ns[15].同时,出于隐私和安全考虑,系统的北斗定位数据均采用数据包的形式发送,司机,车辆等信息由贵阳市渣土协会提供,并在使用时通过接口的调用来返回相应数据.
当上级平台与车辆间主从通信链路中断时,需在双方主从链路通信恢复后补发中断期间的车辆定位信息,若车辆需发送的数据包大于5 条时则以每包5 条的方式进行补发.同时,车辆将会通过推送数据包的方式,将数据推送到socket 服务来建立连接,以此让客户端获取到车辆北斗定位模块所提供的数据包.当长时间未收到推送数据包时,系统会将服务进行重启,并由最后一个数据包的时间戳,来对未收到的数据包进行重新请求.正常获取到的数据包如图3所示.
图3 车辆定位数据包
然后系统会在本地对数据包进行解析,进而获取到车辆的明确定位数据.由于系统内使用的北斗短报文通信属于北斗系统提供的民用短报文通信.在获取相应信息时会使用字符串截取函数来对报文进行截取,并将其从16 进制转为10 进制,并写入数据库,其数据包文件解码的关键代码如下:
public static function log($data){
$log_file=__DIR__.' cp_master_log'.date("Y-md").'.txt';
if(($log=fopen ($log_file,"a+"))===FALSE){
echo("创建可写文件:".$log_file."失败");
return;
}
fwrite($log,date("Y-m-d H:i:s").":".$data." ");
fclose($log);
}
// 收到数据包后自动进行解码
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);
……
}
2.2 使用地图服务
系统的地图服务是基于高德地图的API[16]来开发的,该服务是车辆实时定位功能与轨迹查询功能的基础.在使用高德地图的API 时,需要在高德开放平台上的应用管理页面创建一个新应用,并在该应用内新添加一个key,然后就可以在前端页面内通过sctipt 标签引入高德地图的API来进行项目的开发,引用代码如下:
接着就可以通过高德地图API 所提供的类以及方法来对地图组件来进行相应的操作.通常使用Amap.Map(" ")方法来创建一个地图实例对象,再通过该对象来调用高德地图API的类和方法来实现具体功能.
function init(){
var map;
// 创建地图实例
map=new AMap.Map("container");
var lnglats=get_lnglats();
}
3 系统实现
3.1 数据层实现
对于数据层而言,ThinkPHP中内置了抽象数据库访问层,可以把不同数据库操作封装起来,并使用公共的Db 类来进行操作,Db 类会自动调用相应的数据库适配器来处理.系统主要采用在ThinkPHP中加入MySQL 数据库驱动来建立MySQL 数据库连接,再通过对象关系映射来定义模型类与数据库表的映射,然后在Controller中通过对模型类的引用来操作数据库,以此更加方便地对数据库进行操作,并从数据库中获取车辆的定位数据,车辆数据以及CAN 总线数据.
3.2 业务逻辑层实现
业务逻辑层主要是由控制器去执行相应命令,如车辆运输管理,司机管理,接口管理等操作.前台的业务通过接口的形式访问到该页面对应的控制器,然后再由控制器来操纵相应的模型去处理具体的业务逻辑.在ThinkPHP内,自定义的控制器通常要继承系统的Controller 类,以此使用系统的内置方法.如自定义的控制器LoginController 用于控制用户登录,首先控制器会通过会在视图层输出login.html 页面,再该界面内,用户在输入用户名和密码后会通过Ajax 请求的方式访问LoginController的login()方法,方法会先使用D(“User”)来实例化User 模型,并通过对象关系映射的方式来进行数据库查询,比对所查内容与输入的数据是否一致,以此来判断用户可否成功登录,比对之后系统将通过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);
}
}
3.3 应用层实现
业务逻辑系统采用Bootstrap 与jQuery来设计相应应用层的样式以及开发的效率,再结合HTML、CSS和JavaScript来实现网站首页,车辆管理,日常管理,统计分析,用户管理五大模块的前端视图.为了便于用户管理,所有视图层的文件都将存放于Home/View中,并由ThinkPHP 控制器中的渲染函数display()来进行渲染输出.
例如,登录后的初始界面为车辆管理模块的车辆实时定位管理,如图4所示,界面的左侧为菜单栏,右侧为功能区,其中菜单栏可以根据登录的用户所具有的相应权限来进行相应的渲染.并且,车辆实时定位管理功能的地图是基于调用高德地图API[17]来实现的,该功能可以通过选定车辆的车牌号和行驶时间来对车辆的运行轨迹进行查询,从而快速定位到车辆位置,并实时监控其运输状态.与此同时还可以根据需求来对工厂,消纳场点等位置是否显示做出操作.
图4 车辆实时位置管理
3.4 系统应用情况
系统使用PHPStorm 软件与基于PHP的ThinkPHP框架完成开发,并已部署至实际的企业环境中运行,目前经用户反馈运行效果良好.平台使用阿里云服务器提供云服务,使用Windows 系统部署开发环境.用户在系统中可通过相应的界面操作,可方便地使用各项功能,清晰的掌握车辆的实时位置,以及查看当前工地的详细收益情况.截至2020年12月7 日,系统共有111 辆渣土运输车接入系统,注册司机超210 人次,系统内启用的工地共42个,其部分车辆运行情况如图5所示,内含车辆当前运行的位置、速度、驾驶人、联系电话和时间等信息.
图5 车辆运行情况
4 结语
基于北斗的城市垃圾清运系统实现了对垃圾清运车的有效管理,其在技术上,相对于传统城市垃圾回收运输而言,它可以实现源头追溯,且具有更便捷的可视化界面;实现全流程透明化管理,并且实时关注每个环节的进展情况,以便更好地为企业降本增效;与此同时系统均采用了北斗系列来进行数据采集,更有效的维护了信息和技术的安全.但系统由于定位数据量过于庞大,查询车辆的历史轨迹的时候,需要通过查询车辆的历史定位数据来实现,此时后台数据加载时间会较长,也有可能会导致数据加载失败的问题.在后续的开发过程中还将会进一步地对问题进行改善,并且还可在后续的开发过程中结合机器学习来对司机的驾驶行为与车辆的健康状况进行相应的分析.