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