錢 楓, 劉夢杰, 王明達(dá), 王 潔, 楊 棟, 胡 蝶, 夏 俊, 程書瑾
1(武漢科技大學(xué), 武漢 430081)
2(中國環(huán)境科學(xué)研究院, 北京 100012)
《中國移動源環(huán)境管理年報(2020)》顯示2019年全國機動車保有量達(dá)到3.48 億輛, 重型車尾氣污染物中氮氧化物、顆粒物排放占比明顯高于其他車型.國家生態(tài)環(huán)境部《重型柴油車污染物排放限值及測量方法(中國第六階段)》對重型車氮氧化物、顆粒物排放標(biāo)準(zhǔn)要求進(jìn)一步提高, 同時明確規(guī)定國六車型必須加裝遠(yuǎn)程監(jiān)控車載終端[1].
遠(yuǎn)程監(jiān)控車載終端主要功能是采集車輛CAN 總線信息, 并將信息上傳至大數(shù)據(jù)平臺[2]. 通過對十余個地市環(huán)保局重型車遠(yuǎn)程監(jiān)控平臺對比分析發(fā)現(xiàn), 大部分平臺只對排放數(shù)據(jù)進(jìn)行簡單的處理, 然后對單臺車污染物排放超標(biāo)進(jìn)行判斷, 缺乏對指定區(qū)域內(nèi)污染物排放總量進(jìn)行統(tǒng)計和分析[3].
針對當(dāng)前重型車遠(yuǎn)程監(jiān)控平臺對各子區(qū)域內(nèi)污染物排放總量統(tǒng)計的不足, 本文基于分布式微服務(wù)架構(gòu)設(shè)計了具備污染物分區(qū)統(tǒng)計功能的監(jiān)管平臺, 并進(jìn)行了實地部署驗證.
本平臺基礎(chǔ)功能包括對車輛信息、用戶信息、排放狀況進(jìn)行管理并且輸出報表, 進(jìn)行大屏展示, 具體技術(shù)方案如表1.
表1 平臺基礎(chǔ)功能
為實現(xiàn)定量分析, 需將車載終端上傳的氮氧化物、顆粒物排放數(shù)據(jù)轉(zhuǎn)化為質(zhì)量濃度. 表2 為部分車載CAN 網(wǎng)絡(luò)報文信息, 平臺通過發(fā)動機進(jìn)氣量Qin(單位: k g/h) 和燃油流量Qfuel(單位: k g/h)可近似計算出發(fā)動機排氣流量(單位: k g/h). 然后根據(jù)報文上報時間間隔t(單位: s ) 、氮氧化物排放濃度Cnox(單位: p pm)或顆粒物光吸收系數(shù)K(單位: m-1)計算出氮氧化物排放總量Mnox[4]或顆粒物排放量Mpm[5]. 相關(guān)計算公式如式(1)-式(5).
表2 車載CAN 報文
為直觀的展示各監(jiān)管行政區(qū)內(nèi)氮氧化物、顆粒物排放情況, 通過車輛實時坐標(biāo)對污染物排放所屬行政區(qū)進(jìn)行判斷, 并將排放量累加至所屬行政區(qū)污染物排放總量中.
將車輛坐標(biāo)點作為點Q, 行政區(qū)作為多邊形S, 判斷車輛坐標(biāo)點是否在行政區(qū)內(nèi)可轉(zhuǎn)換為求解點Q是否在不規(guī)則多邊形S內(nèi). 該問題常用 “射線法”求解, 即以點Q作為起點向多邊形S內(nèi)某一點B做射線QB, 當(dāng)射線QB與多邊形S的交點個數(shù)為奇數(shù)時, 點Q在多邊形S內(nèi)[6]. “射線法”存在以下幾種特殊情況需進(jìn)行提前判斷: 點Q與點B重合、點Q位與多邊形S的某一頂點重合、射線QB經(jīng)過多邊形S的頂點.
由于行政區(qū)邊界復(fù)雜, 在采用“射線法”求解時特殊情況和多邊形S邊的個數(shù)多, 使得計算量龐大, 不利于平臺對數(shù)據(jù)進(jìn)行實時處理. 為控制服務(wù)器硬件成本、提高平臺性能, 本文提出如下方法對 “射線法”進(jìn)行了優(yōu)化, 降低其計算量.
在多邊形S中取一點O作為原點, 向水平方向做射線OX. 以射線OX為起點, 按固定角度α 轉(zhuǎn)動做射線, 當(dāng)α足夠小時, 可將相鄰射線與多邊形S所構(gòu)成的圖像近似看作扇形. 若扇形中心線與多邊形S的交點為點B, 則扇形半徑取點O和點B之間的距離lOB. 當(dāng)車輛坐標(biāo)點Q位于某一扇形內(nèi), 則認(rèn)為Q在多邊形S內(nèi), 否則認(rèn)為點Q在多邊形S外, 其原理如圖1、圖2 所示.
圖1 “射線法”優(yōu)化原理圖
圖2 “射線法”優(yōu)化原理圖局部放大圖
采用優(yōu)化的“射線法”求解時, 首先將多邊形S以 α為圓心角分割為多個扇形區(qū)域, 以各扇形中心線與邊界線交點的極坐標(biāo)(ln, αn)(n∈(0, 1,…, (2 π/α-1))構(gòu)建參照表. 若點Q極坐標(biāo)為(lOQ, β), 當(dāng)參照表中某一極坐標(biāo)(l′, α′)滿足(α′-α/2)≤β <(α′+α/2)時, 則此坐標(biāo)為點Q在參照表中的對應(yīng)坐標(biāo). 當(dāng)lOQ小于或等于l′時 , 點Q在多邊形S內(nèi), 反之在多邊形外.
當(dāng)多邊形S出現(xiàn)如圖3 所示的情況時, 即扇形內(nèi)部存在部分區(qū)域不在多邊形S內(nèi)的情況時. 滿足lOQ≤lOA、lOB≤lOQ且lOQ≤lOC兩條件之一則認(rèn)為點Q在多邊形S中.
圖3 多交點原理圖
對傳統(tǒng)的“射線法”進(jìn)行優(yōu)化后, 減少了大量特殊情況和邊界交點的計算, 算法的空間、時間復(fù)雜度上均具有明顯優(yōu)勢. 以淄博市臨淄區(qū)為例, 其行政區(qū)邊界由775 個坐標(biāo)點構(gòu)成, 傳統(tǒng)“射線法”在極端情況下, 需進(jìn)行775 次比較點與頂點重合判斷、775 次射線過頂點判斷、775 次射線與邊界線交點個數(shù)判斷, 共2 325次計算. 而優(yōu)化“射線法”計算待比較點坐標(biāo)后, 只需一次查表和一次比較即可完成. 優(yōu)化“射線法”較傳統(tǒng)“射線法”計算量大大減小. 優(yōu)化“射線法”在劃分扇形區(qū)域時, 其邊界部位會產(chǎn)生一定的誤差, 但誤差區(qū)域在整個行政區(qū)中占比不高, 且車輛流動性強, 故在誤差區(qū)域的排放量可忽略不計.
車輛坐標(biāo)所屬行政區(qū)判斷中, 通過遍歷所有行政區(qū)邊界進(jìn)行逐個排除, 直至獲得最終結(jié)果. 由于行政區(qū)分布和車輛行駛軌跡變化均存在空間連貫性, 故可對行政區(qū)遍歷順序按空間連貫性進(jìn)行動態(tài)調(diào)整. 車輛相鄰兩個時間點上報坐標(biāo)所屬行政區(qū)大概率為同一或相鄰行政區(qū), 據(jù)此在行政區(qū)遍歷順序上, 可根據(jù)行政區(qū)相鄰關(guān)系進(jìn)行分級排列, 以減少計算量, 提高數(shù)據(jù)處理效率.
以山東省淄博市為例, 該市共包含淄川區(qū)、張店區(qū)、博山區(qū)、臨淄區(qū)、周村區(qū)、桓臺縣、高青縣、沂源縣8 個行政區(qū). 表3 為淄博市各行政區(qū)空間關(guān)系.
表3 淄博市行政區(qū)空間關(guān)系表
當(dāng)車輛上報位置信息化, 平臺按任意順序遍歷各行政區(qū), 進(jìn)行所屬行政區(qū)判斷, 并記錄所屬行政區(qū)作為下次上報的第1 優(yōu)先級行政區(qū), 優(yōu)先進(jìn)行判斷, 其余行政區(qū)按表2 對應(yīng)優(yōu)先級由高到底進(jìn)行遍歷. 例如當(dāng)前所屬行政區(qū)為淄川區(qū), 則下一次判斷時第1 優(yōu)先級為淄川區(qū), 根據(jù)表2 可知第2 優(yōu)先級為張店區(qū)、博山區(qū)、臨淄區(qū)、周村區(qū), 第3 優(yōu)先級為桓臺縣、高青縣、沂源縣. 按照第1 優(yōu)先級、第2 優(yōu)先級、第3 優(yōu)先級順序進(jìn)行遍歷, 同優(yōu)先級內(nèi)可按任意順序遍歷, 快速鎖定車輛所屬行政區(qū).
監(jiān)管平臺與車載終端以TCP/IP 網(wǎng)路控制協(xié)議作為底層通訊協(xié)議. 參考《GB17691-2018 重型柴油車污染物排放限值及測量方法(中國第六階段)》中附錄Q 規(guī)定的有關(guān)“遠(yuǎn)程排放管理車載終端的技術(shù)要求及通信數(shù)據(jù)格式”進(jìn)行應(yīng)用層協(xié)議設(shè)計. 通訊協(xié)議數(shù)據(jù)包結(jié)構(gòu)和定義如表4 所示.
表4 數(shù)據(jù)包結(jié)構(gòu)和定義
上電后由車載終端主動向平臺發(fā)起TCP 連接, 連接成功后終端和平臺遵循圖4 通訊流程圖進(jìn)行通訊.首先, 終端通過備案請求(命令單元編碼: 0x07)上傳終端密鑰、終端信息和車輛基礎(chǔ)信息至平臺. 平臺對上傳信息進(jìn)行校驗后核查終端信息和車輛基礎(chǔ)信息是否已在平臺提前錄入. 處理結(jié)果通過備案應(yīng)答(命令單元編碼: 0x08)返回終端.
圖4 通訊流程圖
終端對備案響應(yīng)狀態(tài)進(jìn)行判斷, 若響應(yīng)狀態(tài)為“正確”(備案正常), 終端繼續(xù)進(jìn)行登入操作. 若備案響應(yīng)狀態(tài)為“錯誤”(備案異常)則查驗、修改相關(guān)信息后重新發(fā)起備案請求. 備案流程只需在終端首次上電時進(jìn)行, 非首次上電跳過備案流程, 直接進(jìn)入登入流程即可.
終端完成備案后再發(fā)出登入請求(命令單元編碼:0x81). 平臺核查登入信息, 若設(shè)備已完成備案流程, 則分配密鑰對, 公鑰通過登入應(yīng)答(命令單元編碼: 0x80)返回終端, 私鑰存儲至數(shù)據(jù)庫. 平臺核查登入信息有誤則發(fā)出“錯誤”應(yīng)答. 終端接收登入響應(yīng)應(yīng)答為“正確”(登入正常)后進(jìn)入實時信息上報流程, 反之終端重新發(fā)起登入請求.
實時信息上報流程中, 終端首先對車輛信息進(jìn)行組包、加密(采用登入流程中平臺回復(fù)公鑰進(jìn)行加密)、生成校驗碼后再上傳平臺(命令單元編碼: 0x01).平臺對上傳信息進(jìn)行解密、解析, 對數(shù)據(jù)正常報文做出“正確”應(yīng)答(命令單元編碼: 0xF0).
終端根據(jù)平臺響應(yīng)狀態(tài)判斷是否進(jìn)行補發(fā), 響應(yīng)結(jié)果為“正確”即可結(jié)束本次上報流程, 其他狀態(tài)(響應(yīng)失敗、無響應(yīng)等)則需進(jìn)行信息補發(fā)(命令單元編碼:0x03).
當(dāng)車輛停止運行時終端上報登出指令(命令單元編碼: 0x04), 平臺對設(shè)備做離線處理.
平臺并發(fā)量高, 采用分布式微服務(wù)[7,8]及前后端分離技術(shù)進(jìn)行架構(gòu)設(shè)計, 可有效提高平臺魯棒性、擴展性. 平臺共分為1 個前端服務(wù)模塊和5 個后端微服務(wù)模塊, 如表5 所示. 前端主要實現(xiàn)人機交互、數(shù)據(jù)展示,后端主要完成平臺通訊、數(shù)據(jù)處理.
表5 平臺服務(wù)構(gòu)成表
圖5 為平臺架構(gòu)圖, 終端通過主服務(wù)器IP 及開放端口號連接平臺“platform”模塊. “platform”將終端上報原始報文推送至“dataParser”進(jìn)行報文解析. “dataParser”對原始報文進(jìn)行解析后, 生成平臺響應(yīng)報文, 并將終端上報實時信息寫入數(shù)據(jù)庫. “area”模塊將實時數(shù)據(jù)中的位置信息與數(shù)據(jù)庫中預(yù)存的行政區(qū)信息進(jìn)行比較, 判斷所屬行政區(qū). “schedule” 模塊進(jìn)行污染物統(tǒng)計分析,生成相關(guān)統(tǒng)計信息.
圖5 平臺架構(gòu)圖
后端基于SpringCloud 框架[9]進(jìn)行搭建. SpringCloud是一系列框架、組件的有序集合, 擁有功能完善的、輕量級的微服務(wù)實現(xiàn)組件, 其豐富的外部開發(fā)資源使其具備極高的開發(fā)效率. 平臺采用Docker 作為應(yīng)用容器, Docker 是一個跨平臺、可移植且易用的容器解決方案[10,11], 性能開銷低, 可實現(xiàn)平臺的快速部署. 后端不同服務(wù)之間數(shù)據(jù)傳輸通過Kafka (一種分布式發(fā)布訂閱消息系統(tǒng))實現(xiàn), 將每個服務(wù)作為一個消費節(jié)點, 從而完成平臺內(nèi)部數(shù)據(jù)的快速交互. 基于Netty 實現(xiàn)多線程、高并發(fā)的平臺外部通訊服務(wù)[12].
數(shù)據(jù)存儲采用MySQL 和ElasticSearch 的雙數(shù)據(jù)庫組合方案. ElasticSearch 數(shù)據(jù)庫主要具有如下特點:分布式, 處理方式靈活, 實現(xiàn)了實時檢索, 對百億級的數(shù)據(jù)查詢做到秒級響應(yīng), 可以線性擴展集群并且支持插件機制[13,14]. ElasticSearch 數(shù)據(jù)庫比其他主流數(shù)據(jù)庫(MySQL、Oracle、MongoDB 等)更適合海量車輛歷史數(shù)據(jù)存儲、查詢. MySQL 數(shù)據(jù)庫則用于平臺少量的基礎(chǔ)信息存儲.
前端網(wǎng)頁基于VUE 框架搭建, 采用螞蟻金服推出的Ant Design 和Echart 前端組件庫進(jìn)行開發(fā). 實時監(jiān)控、電子圍欄及可視化大屏地圖展示采用高德地圖開發(fā)者平臺提供的Web 端接口實現(xiàn). 圖6-圖9 為部分前端網(wǎng)頁效果圖.
圖6 實時監(jiān)測界面
圖7 車輛列表界面
圖9 報表界面
圖8 禁行區(qū)界面
平臺部署于山東省淄博市. 圖10、圖11 為24 h內(nèi)各行政區(qū)每小時累計氮氧化物、顆粒物的排放量.可看出兩種污染物在當(dāng)日上午8 點至當(dāng)日下午7 點排放量明顯高于前一日晚上9 點至當(dāng)日早上8 點, 桓臺縣、臨淄區(qū)排放量明顯高于其他區(qū)縣.
圖10 淄博各區(qū)氮氧化物排放量對比
圖11 淄博各區(qū)顆粒物排放量對比
平臺還可查看行政區(qū)歷史排放量變化, 圖12、圖13為一個月內(nèi)臨淄區(qū)氮氧化物、顆粒物每日的排放總量.此外平臺還支持污染物超標(biāo)車輛統(tǒng)計、單車超標(biāo)次數(shù)、選定區(qū)域超標(biāo)次數(shù)、單車排放總量統(tǒng)計. 通過污染物排放情況統(tǒng)計, 環(huán)保部門可充分了解各行政區(qū)域內(nèi)重型車氮氧化物、顆粒物排放情況, 對嚴(yán)重超標(biāo)車輛進(jìn)行精準(zhǔn)治理.
圖12 臨淄區(qū)氮氧化物排放總量統(tǒng)計
圖13 臨淄區(qū)顆粒物排放總量統(tǒng)計
本文設(shè)計的重型車污染物排放監(jiān)管平臺對重型車主要污染物氮氧化物和顆粒物進(jìn)行定量分析, 并按行政區(qū)域?qū)ξ廴疚锏呐欧趴偭窟M(jìn)行統(tǒng)計和展示. 為快速判斷車輛所屬行政區(qū), 本文對“射線法”進(jìn)行了優(yōu)化, 對行政區(qū)遍歷順序按空間關(guān)系進(jìn)行升級, 大大降低了平臺計算量, 提高了平臺的運行效率.
通過對淄博市氮氧化物、顆粒物排放情況分區(qū)統(tǒng)計發(fā)現(xiàn): 全天不同時段排放量差異較大; 在所有行政區(qū)中桓臺縣、臨淄區(qū)排放量明顯高出其他區(qū)縣. 據(jù)此, 監(jiān)管部門可針對排放污染嚴(yán)重區(qū)域及高排放時間段進(jìn)行治理, 有效提高監(jiān)管精準(zhǔn)性.