摘 要: 针对目前快递行业投递环节中存在的一些问题,提出了一种基于S3C6410的智能快递投递箱系统。投递箱终端以S3C6410嵌入式处理器为核心,通过UART和USB总线驱动条码扫描模块、寄存柜模块和视频采集模块,实现自助投件和取件功能。PC系统服务器采用线程池设计,以实现高并发通信,满足大容量的数据交互要求。最后,经过测试,该系统在实际环境中运行稳定,可满足城市小区快递投递的需要。
关键词: 投递箱;视频采集与传输;线程池
0 引言
近年来,电商强有力的发展势头让快递物流飞速发展,然而作为快递服务“最后一公里”的派送环节,常常在快递业务旺季期间存在配送脱节、货件积压等问题[1-2],因此,快递投递箱就被引用进来。目前国内市场上的智能快递投递箱尚处于发展阶段,投递快件时需手动输入快递信息以发送短信,存件效率不高,且容易导致信息误填,增加包裹丢失的风险。对此,本文提出了一种基于S3C6410的智能快递投递箱系统,该系统主要由投递箱终端和系统服务器两大部分构成,可实现对快件单号的扫描录入、短信自动发送、取件密码验证和对取件过程的视频记录。
1 总体设计方案
本文设计了一个可适用于城市小区的智能快递投递箱系统。如图1所示,该系统中以一台PC机作为该小区中投递箱终端的系统服务器,PC服务器可通过Internet网络从快递公司云端服务器下载和保存该小区的所有快递包裹数据,采用以太网与投递箱终端通信,处理来自终端的功能请求,并通过UART串口方式驱动GSM模块发送中文短信,实现包裹的自取通知功能。
投递箱终端采用S3C6410嵌入式系统,运行Linux操作系统,使用Qt4编程,并提供UI交互界面。在快递员投递快件过程中,首先通过条码扫描器录入快递单号并将快件存放在指定编号寄存柜中,之后通过以太网将快递信息上传服务器以进行GSM短信通知和数据同步;在客户取件过程中,通过终端输入设备对取件密码进行验证,利用USB摄像头对取件过程进行视频采集编码,并上传服务器存储。
2 投递箱终端设计
投递箱终端设计框架如图2所示,嵌入式主控制器通过UART串口连接寄存柜模块和快递条码扫描模块,并采用USB总线方式连接视频采集设备。
主控制器以S3C6410嵌入式处理器为核心,结合外部ROM/RAM、网卡控制芯片DM9000、键盘和电阻触摸屏N43LCD等,构成嵌入式Linux操作系统所需要的硬件基础。在嵌入式Linux平台下的主控制器软件设计中,主控制器与寄存柜模块和条码扫描模块的通信主要是通过串口API函数向外围模块发送指令和接收数据,以实现快递单号的条码扫描和指定寄存柜的开关操作等。视频采集的实现主要利用Linux中的V4L2编程架构,视频编码采用H.264编码方案,主要是应用S3C6410内核中的MFC硬件编码器[3]。主控制与服务器的网络通信采用Socket套接字编程。
2.1 寄存柜模块设计
寄存柜模块对外提供UART接口,接收来自终端主控制的命令数据以打开指定编号的单元柜,并对箱体门柜进行开关状态检测。模块设计框架图如图3所示。
箱体控制电路基于STC89C52单片机设计,其中驱动电路由74LS138译码器和三极管反向放大电路构成,能根据单片机I/O口输出电平变化而控制箱体单元柜中电磁锁的开关,检测电路通过对箱体单元柜中的干簧管检测器的输出电平判断出箱体门柜的开关状态,并将检测结果输入单片机I/O口。
2.2 视频采集与实时传输
投递箱终端在用户取件过程中,需要对开箱过程进行视频采集传输,并在服务器上以所取快件的快递单号作为文件名保存视频数据。视频数据采集主要利用V4L2视频捕获编程驱动中的API函数,USB摄像头在主控制器的嵌入式Linux操作系统中映射为一个设备文件,在视频采集过程中,先打开摄像头设备文件并完成设备初始化,之后通过ioctl()函数发送视频采集命令,开始视频帧的采集。在获取视频帧数据之后,采用S3C6410内部的MFC硬件编解码器对其进行H.264编码并传输。编码主要过程由SsbSipH264EncodeExe()函数来执行,对编码后的NAL包采用RTP协议传输。
RTP是一种构建在UDP之上的实时传输协议。向服务器发送RTP视频包时,由于UDP传输是面向无连接的且服务器视频数据的接收方式为一对多接收,所以为了使服务器能对来自不同终端的视频数据进行区分,在软件设计中,终端传输视频数据前先使用TCP可靠连接与服务器约定RTP传输同步信源标识符,并填入每个待发送的RTP包头中,以区别于其他终端的RTP视频包数据。其传输流程图如图4所示。
3 系统服务器软件设计
系统服务器作为一个小区多台投递箱终端的数据处理中心,在同一时刻可与多个终端建立连接并处理来自终端的业务请求,如包裹信息查询、短信发送、视频传输等。其软件设计在Windows平台下进行,数据库采用SQLite3以存放快件信息,可定期通过Internet网络与快递公司云端服务器同步该小区的所有快递数据。
3.1 线程池设计
本设计中服务器软件采用线程池方式设计,如图5所示。服务器中“客户端数据接入/发送线程”是服务器与客户端之间交互数据的主要通道,采用TCP传输协议。“客户端数据接入线程”主要采用select()函数进行设计,实现对多个客户端的连接和数据接入。
“工作线程”为任务处理中心,首先,从“待接收任务队列”中获取任务数据包,通过解析后执行相应的操作,包括数据库的查询和更改、RTP视频传输控制、GSM短信发送控制等。最后,“工作线程”将处理后的数据包写入“待发送任务队列”,以应答客户端的请求。
服务器采用GTM900C作为GSM短信发送模块,在“GSM短信发送线程”的设计中,首先从“待发送队列中”获取待取件的电话号码、寄存柜号、动态密码等信息,以产生相应的PDU码,再通过向GSM模块发送AT指令就可以完成中文短信的发送[4]。
3.2 视频数据接收与存储
当多个投递箱终端同时向服务器发送视频数据时,服务器需要识别来自不同终端的RTP包,并存储在以用户所取快件的快递单号为文件名的FLV格式视频文件中。对RTP包的接收过程如图6所示。
在服务器接收到RTP包后,首先通过解析RTP包中的同步信源标识符可以获取其所对应取件过程的快递单号,之后将RTP解包后所得的NAL包存储在相应的文件中,视频文件采用FLV封装格式。
4 系统测试及结论
本文针对一个小区不同数量投递箱终端连接系统服务器的情况,测试系统的业务处理准确性和视频传输效率。采用了两套智能投递箱实物模拟设备和电脑软件虚拟设备作为一个小区的N个投递箱终端,以两台PC机分别作为该小区的系统服务器和快递公司云端服务器,系统服务器定期向云端服务器下载和更新数据。其测试数据如表1所示。
测试结果表明,在终端数量小于400左右的情况下,采用TCP可靠方式连接的业务处理结果正确无误,服务器视频接收正常,能满足一个城市小区对智能快递投递系统的要求。
参考文献
[1] 倪明,孙潜.快递业运营模式研究[J].北京交通大学学报,2013(1):49-54.
[2] 张庆英,刘燕,王锟.基于快递业务的应急系统研究[J].武汉理工大学学报(交通科学与工程版),2011,35(4):825-828.
[3] 刘阳阳,申铉京,王一棋.基于ARM的智能监控系统的设计与实现[J].吉林大学学报(信息科学版),2011,29(2):158-163.
[4] 孙增雷,黄俊年,孙敏.基于GSM的远程报警系统的研制[J].武汉理工大学学报,2008,30(6):122-124,134.