郝琛,張睿智,張星,姚美菱
(石家莊郵電職業(yè)技術(shù)學院 智能工程系,河北石家莊,050021)
近年來,中國快遞業(yè)發(fā)展迅速,快遞物流企業(yè)增加,業(yè)務規(guī)模擴大,在國民經(jīng)濟中發(fā)揮了積極作用,國家郵政局每年都會對包括郵政EMS、順豐速運、中通快遞等快遞企業(yè)的快遞業(yè)務,進行服務滿意度調(diào)查和時限準時率測試,暴力分揀、延誤、虛假簽收等問題成為用戶投訴的主要問題。傳統(tǒng)快遞服務測評方法實時性客觀性較差,本文利用5G 通信技術(shù)設計快遞服務測評裝置,能夠為快遞服務測評提供準確客觀地實時測試數(shù)據(jù)及科學有效的評價方法。
如圖1 所示,基于5G 的快遞服務測評裝置放置于快遞包裹中,隨快遞包裹一同運輸,全過程跟蹤記錄震動(加速度)、位置(經(jīng)緯度)、時間、溫濕度等關(guān)鍵數(shù)據(jù),利用5G網(wǎng)絡實時上傳快遞收寄、運輸、投遞各環(huán)節(jié)的傳感器數(shù)據(jù),后臺服務器程序接收、存儲、處理快遞包裹跟蹤數(shù)據(jù)??爝f服務測評后臺模塊包括數(shù)據(jù)庫及數(shù)據(jù)接收處理程序,通過對多個快遞企業(yè)的快遞業(yè)務測試,對快遞企業(yè)的快遞服務質(zhì)量進行評價對比。也可用于快遞企業(yè)內(nèi)部快遞業(yè)務測試,查找快遞運輸過程中的薄弱環(huán)節(jié),進而優(yōu)化流程,提升服務質(zhì)量。
圖1 基于5G 的快遞服務測評系統(tǒng)圖
如圖2 所示,本系統(tǒng)硬件組成主要包括:微控制器、多軸加速度傳感器、陀螺儀、溫濕度傳感器、氣壓傳感器、FLASH 存儲芯片、TF 卡讀寫存儲模塊、高精度時鐘、北斗GPS 雙模定位模塊、5G 通信模塊、電源模塊。
圖2 基于5G 的快遞服務測評裝置組成圖
微控制器采用STM32 系列單片機。電源模塊包括電池及供電控制電路,為單片機提供5V 供電,電池容量2000mAh,保證系統(tǒng)正常持續(xù)工作300 小時以上。
如圖3 所示,加速度及多軸重力加速度傳感器采用MPU-6050 模塊,該芯片整合了3 軸陀螺儀、3 軸加速器,微處理器通過IIC 接口接收加速度傳感器數(shù)據(jù)并結(jié)合位置、時鐘信息對快遞包裹所處的運輸狀態(tài)做出判斷。
圖3 陀螺儀加速度傳感器MPU-6050 電路原理圖
TF 卡讀寫存儲模塊與微控制器間使用SPI 接口通信,微控制器將各傳感器采集的原始數(shù)據(jù)存儲到TF 卡中。采用高精度晶體時鐘定時,利用衛(wèi)星授時信息校準,確保系統(tǒng)能夠長時間維持穩(wěn)定運行,時鐘與微控制器間使用IIC接口通信。
如圖4 所示,移遠通信的BC20 模塊是5G 標準NBIOT全網(wǎng)通模塊,支持中國三大運營商所有NB 網(wǎng)絡頻段,具備GPS、北斗、GHSS 多模定位功能,與微控制器間使用串口通信,定時向服務器上傳數(shù)據(jù)信息幀。 定位信息主要依靠北斗GPS 雙模定位,在室內(nèi)無衛(wèi)星信號時,利用通信網(wǎng)絡無線信號及加速度,陀螺儀信號估算位置信息。
圖4 通信模塊BC20 原理及實物圖
系統(tǒng)軟件包括單片機控制程序和快遞服務測評后臺處理程序。
使用C 語言開發(fā),流程如圖5 所示,單片機系統(tǒng)上電后,對時鐘、加速度、溫濕度、氣壓傳感器進行初始化配置。對5G 模塊進行速率、注冊入網(wǎng)、服務器接口信息配置。初始化北斗GPS 雙模定位模塊,檢測衛(wèi)星信號是否正常,解析定位信號信息。
圖5 基于5G 的快遞服務測評裝置單片機程序流程圖
系統(tǒng)外設均正常初始化后,單片機配置為低功耗模式并監(jiān)聽內(nèi)外部中斷,當檢測到中斷產(chǎn)生時,采集傳感器數(shù)據(jù)及定位信息并將原始數(shù)據(jù)儲存至TF 卡。根據(jù)協(xié)商格式合成數(shù)據(jù)幀,暫存在FLASH 芯片指定存儲地址上,通過5G 網(wǎng)絡定時發(fā)送至服務器。各項任務完成后單片機進入休眠模式以節(jié)約功耗。
①陀螺儀加速度傳感器初始化
void I2C_MPU6050_Init(void){I2C_GPIO_Config();I2C_Mode_Config();}
先對STM32 單片機IIC 接口初始化設置,通過IIC 接口對MPU6050 進行設置。
void InitMPU6050(void){I2C_ByteWrite(PWR_MGMT_1,0x00);//解除休眠狀態(tài)
I2C_ByteWrite(SMPLRT_DIV,0x07);
I2C_ByteWrite(CONFIG,0x06);
I2C_ByteWrite(GYRO_CONFIG,0x18);
I2C_ByteWrite(ACCEL_CONFIG,0x01);}
MPU6050 配置完成后,定時向單片機發(fā)送3 個軸方向上電重力加速度、方位角數(shù)據(jù),根據(jù)該數(shù)據(jù)估算綜合加速度、速度及運動方向。
②BC20 通信定位模塊初始化及數(shù)據(jù)上傳
BC20 通信定位模塊占用單片機串口2,在程序中配置STM32 單片機串口2 外設時鐘,設置通信速率,通過串口2 對BC20 模塊配置入網(wǎng)參數(shù)及服務器地址。通過POST 協(xié)議將采集的傳感器數(shù)據(jù)上傳到服務器中。BC20 模塊設置為透傳模式,發(fā)送數(shù)據(jù)通過BC20_http_post()函數(shù)實現(xiàn)。
char RES_BUF[5000]; 接收數(shù)據(jù)緩存
char HTTP_RES_BUF[5000];發(fā)送數(shù)據(jù)緩存
char * BC20_http_post(char * strUrl,char * strData){int count,maxLoop;char Command[200];count=0;
while(BC20_send_cmd(strUrl,"OK",2000)==0) {printf("HTTP URL ERROR ");delay_ms(1000);if(count++>5)return NULL; }
sprintf(Command,"AT+QHTTPPOST=%d,50,10 ",strlen(strData)-2);count=0;
while(BC20_send_cmd(Command, "CONNECT",2000)==0) {printf("HTTP POST ERROR ");delay_ms(1000);if(count++>5)return NULL; }
maxLoop=0;
while(BC20_send_cmd(strData,"OK",65000)==0) {printf("POST DATA ERROR ");delay_ms(1000);if(maxLoop++>5) return NULL; }
BC20_send_cmd("AT+QHTTPREAD=30 ","OK",2000);
printf("HTTP RESPONSE:%s ",BC20_http_response());
return BC20_http_response();}
回傳數(shù)據(jù)通過BC20_http_response()函數(shù)實現(xiàn)。將接收數(shù)據(jù)存儲在HTTP_RES_BUF 數(shù)組中,通過strstr 找到關(guān)鍵字"QHTTPREAD",結(jié)束數(shù)據(jù)接收程序。
char * BC20_http_response(void){
int i;RES_BUF[0]=0;
if(strstr((const char*)HTTP_RES_BUF, "QHTTPREAD")!=0) {for(i=0; i<5000; i++) {if(HTTP_RES_BUF[i+28]==13) break;RES_BUF[i]=HTTP_RES_BUF[i+28]; }RES_BUF[i+1]=0;return RES_BUF; }return NULL;}
③原始數(shù)據(jù)存儲程序
由于采集的原始數(shù)量較大,不能全部通過網(wǎng)絡上傳的服務器中,以CSV 格式存儲在tf 卡中,文件以純文本形式存儲數(shù)據(jù),字段間采用“,”作為分隔符,通過putString2Csv 函數(shù)實現(xiàn)。
int32 putString2Csv(char str[], char filename[], int mode){f_open(&fil,filename,FA_OPEN_ALWAYS|FA_WRITE );_mode = mode;switch (_mode){case ECWM_ONELINE:{f_lseek(&fil,fil.fsize);f_puts(str, &fil); // str 是采集的數(shù)據(jù)f_puts(“,”, &fil); // ,是單元格的分格符號}break;
使用PHP 構(gòu)建Web 服務器,監(jiān)聽8080 服務端口的HTTP 請求,接收數(shù)據(jù)并存儲到MySQL 數(shù)據(jù)庫中。使用Python 可視化工具庫對數(shù)據(jù)進行進一步分析處理。
①數(shù)據(jù)導入程序
程序需要用到Python 的folium、pandas、matplotlib等數(shù)據(jù)處理及可視化庫,通過read 函數(shù)導入數(shù)據(jù)文件。
import folium
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('record_20221025.csv')
如圖6 所示,每0.5 秒采集存儲1 次數(shù)據(jù),從快遞收寄到簽收的46 小時中,共采集存儲33 萬條數(shù)據(jù)。
圖6 快遞運輸過程中采集的數(shù)據(jù)
②數(shù)據(jù)可視化處理程序
根據(jù)數(shù)據(jù)中經(jīng)緯度信息,計算地圖中心坐標,并生成高德地圖背景。
location_center = [df[‘位置 緯度 : '].mean(),df['位置 經(jīng)度 : '].mean()]
tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7'
m_1 = folium.Map(location=location_center,
tiles=tiles ,
attr='高德-常規(guī)圖',
zoom_start=10,
control_scale=True,
width='70%' )如圖7 所示,根據(jù)加速度、定位信息、經(jīng)緯度變化等數(shù)據(jù),推算出快遞包裹在運輸過程中的關(guān)鍵事件??爝f包裹在金屬密閉車廂中運輸時,定位模塊因無法獲得足夠強度、數(shù)量的衛(wèi)星導航信息而無法解析出經(jīng)緯度數(shù)據(jù),需要根據(jù)通信網(wǎng)絡、加速度、運動方向結(jié)合地圖估算快遞包裹軌跡。
圖7 關(guān)鍵事件點坐標
def Wgs84ToGcj02(lon, lat) :
dLat = transformLat(lon - 105.0, lat - 35.0);
dLon = transformLon(lon - 105.0, lat - 35.0);
radLat = lat / 180.0 * M_PI;
magic = math.sin(radLat);
magic = 1 - magic * magic * EE;
sqrtMagic = math.sqrt(magic);
dLat = (dLat*180.0)/((EARTH_RADIUS * 1000 * (1-EE))/(magic*sqrtMagic)*M_PI);
dLon = (dLon*180.0) / (EARTH_RADIUS* 1000/ sqrt Magic*math.cos(radLat)*M_PI);
Gcj02Lat = lat + dLat;
Gcj02Lon = lon + dLon;
return Gcj02Lat,Gcj02Lon
裝置采集的wgs84 格式的原始經(jīng)緯度信息需要轉(zhuǎn)換成Gcj02 格式,才能在地圖上正常顯示,坐標轉(zhuǎn)換功能由Wgs8ToGcj02(lon,lat)實現(xiàn)。如圖8 所示,將關(guān)鍵事件如暴力分揀、正常分揀、運輸途中等坐標標記在高德地圖中。
圖8 快遞服務測評后臺程序運行效果圖
本文針對傳統(tǒng)快遞服務測評方法實時性差的問題,利用5G 低延時特性實現(xiàn)快遞服務測評數(shù)據(jù)的實時傳輸處理,為快遞服務測評提供準確客觀、科學有效的評價方法,通過對快遞包裹收寄、運輸、分揀、派送等環(huán)節(jié)傳感數(shù)據(jù)采集分析,對快遞服務質(zhì)量評估對比,查找快遞企業(yè)運輸過程中的薄弱環(huán)節(jié),優(yōu)化業(yè)務流程,提升服務質(zhì)量。