陳濤,彭長超,劉文軍,陳晨
(1.蘇州工業(yè)職業(yè)技術(shù)學(xué)院軟件與服務(wù)外包學(xué)院,江蘇蘇州 215104;2.蘇州礪行信息科技有限公司,江蘇蘇州 215151)
實現(xiàn)工業(yè)生產(chǎn)要素的互聯(lián)、互通是工業(yè)智能化改造和數(shù)字化轉(zhuǎn)型的基礎(chǔ)[1]。構(gòu)建一個通用的工業(yè)物聯(lián)使能平臺,實現(xiàn)多樣化工業(yè)設(shè)備數(shù)據(jù)采集、接入管理、規(guī)則引擎等問題成為關(guān)注的焦點[2]。工業(yè)物聯(lián)使能平臺是工業(yè)互聯(lián)網(wǎng)平臺的重要構(gòu)成,基于該平臺可以快速構(gòu)建設(shè)備預(yù)測性運維、生產(chǎn)協(xié)同管理、質(zhì)量追溯等上層創(chuàng)新應(yīng)用[3-5]。
本文提出了一種針對工業(yè)場景下通用的設(shè)備使能平臺,主要聚焦工業(yè)要素的接入,包括海量設(shè)備的快速接入、設(shè)備生命周期管理、平臺數(shù)據(jù)流轉(zhuǎn),并為上層應(yīng)用提供支撐。要求平臺具有良好的通用性和擴展性。初步實踐表明平臺為構(gòu)建復(fù)雜的工業(yè)應(yīng)用提供良好的支撐能力。
平臺基于B/S架構(gòu)實現(xiàn),技術(shù)架構(gòu)如圖1所示。前端采用Vue技術(shù)棧,使用Element ui組件庫快速搭建前端頁面,同時使用Nginx作為反向代理服務(wù)器,增強系統(tǒng)安全性與可伸縮性。后端業(yè)務(wù)使用SpringBoot和JPA的技術(shù)棧。SpringBoot對比Spring精簡了配置的同時整合了其龐大的生態(tài)圈與工具鏈,JPA作為全自動的ORM框架對比半自動的MyBatis減少了SQL的編寫,二者結(jié)合極大地提升了開發(fā)效率。平臺的用戶訪問認證和授權(quán)使用SpringSecurity和JWT框架實現(xiàn),Swagger用于自動生成接口文檔。出于穩(wěn)定性與安全性考慮,引入了Prometheus和Grafana等中間件,組成了平臺的監(jiān)控系統(tǒng),實現(xiàn)了對平臺運行的可視化智能監(jiān)控。同時,平臺接入了第三方的短信服務(wù),用于短信登錄與短信告警,加強了用戶安全與及時告警能力。數(shù)據(jù)存儲采用了MySQL與MongoDB的組合,不同的存儲方式可有效提高查詢效率,提升系統(tǒng)性能。內(nèi)存數(shù)據(jù)庫Redis用于緩存用戶登錄態(tài)與熱點信息。
圖1 物聯(lián)網(wǎng)使能平臺技術(shù)架構(gòu)圖
平臺的核心能力是提供海量設(shè)備接入與靈活的數(shù)據(jù)流轉(zhuǎn),并為上層應(yīng)用提供快速開發(fā)能力。平臺功能架構(gòu)如圖2所示,從左至右分別為設(shè)備側(cè)、平臺側(cè)與數(shù)據(jù)流轉(zhuǎn)側(cè),上方為上層應(yīng)用。平臺分為設(shè)備接入、設(shè)備生命周期管理、規(guī)則引擎與運營監(jiān)控四個功能模塊。
圖2 平臺功能架構(gòu)圖
設(shè)備接入模塊中,平臺為直連設(shè)備、網(wǎng)關(guān)設(shè)備、物聯(lián)網(wǎng)邊緣設(shè)備等不同類型設(shè)備提供接入能力,同時支持主流Modbus、OPC-UA等工業(yè)協(xié)議,以及MQTT、HTTP、CoAP等IoT協(xié)議。安全上,平臺還具備KPI證書頒發(fā)能力,通過設(shè)備注冊在線簽發(fā)設(shè)備證書,實現(xiàn)設(shè)備的安全認證。
設(shè)備生命周期管理模塊提供了對設(shè)備的全生命周期管理,包括設(shè)備基本信息管理、物模型管理與主題管理。此外,平臺提供設(shè)備模擬器模擬真實設(shè)備與物聯(lián)網(wǎng)平臺建立連接。通過設(shè)備模擬器,測試物聯(lián)網(wǎng)平臺與設(shè)備端之間的通信功能。
規(guī)則引擎模塊提供了場景聯(lián)動、數(shù)據(jù)流轉(zhuǎn)與告警提示功能。當(dāng)數(shù)據(jù)接入平臺后,用戶可依據(jù)設(shè)備數(shù)據(jù)手動配置規(guī)則用以觸發(fā)一系列動作,包括設(shè)備反向控制、數(shù)據(jù)流轉(zhuǎn)以及設(shè)備告警。運營監(jiān)控模塊提供了可視化大屏用以展示平臺接入設(shè)備情況,日志服務(wù)記錄了設(shè)備上報數(shù)據(jù)的日志,同時也提供SDK與API供接入平臺用戶與上層應(yīng)用調(diào)用。
3.2.1 設(shè)備管理
設(shè)備管理是設(shè)備生命周期管理模塊的核心。設(shè)備包含三個要素,分別為設(shè)備基礎(chǔ)信息、物模型與Topic(主題)?;A(chǔ)信息為設(shè)備編號,設(shè)備類型等信息。物模型是為設(shè)備定義的數(shù)據(jù)模型,用于描述設(shè)備的功能,從屬性、命令和事件三個維度完成對設(shè)備的建模。Topic主要用于設(shè)備通信。
平臺將設(shè)備集合抽象為產(chǎn)品,產(chǎn)品通常是一組具有相同功能定義的設(shè)備集合。例如,對同一型號的產(chǎn)品,設(shè)備就是該型號下的某個設(shè)備。產(chǎn)品也可定義物模型與Topic,設(shè)備與產(chǎn)品綁定后即可繼承產(chǎn)品的物模型與Topic,同時設(shè)備的信息修改不影響產(chǎn)品。修改產(chǎn)品信息即可同時修改一組設(shè)備,當(dāng)接入大量設(shè)備時顯著方便了設(shè)備的管理。
添加設(shè)備時序圖如圖3所示。在已定義了產(chǎn)品的前提下,添加設(shè)備時首先綁定產(chǎn)品,自動繼承產(chǎn)品的物模型與Topic,再填寫基礎(chǔ)信息,同時獲取設(shè)備的日志列表,若為網(wǎng)關(guān)設(shè)備則顯示子設(shè)備列表。設(shè)備添加完成后即可通過設(shè)備模擬器調(diào)試,接入平臺。
圖3 設(shè)備添加時序圖
圖3 網(wǎng)格模型圖
3.2.2 規(guī)則引擎
規(guī)則引擎是一種開發(fā)自動化業(yè)務(wù)邏輯的可視化編程方式,可以通過可視化的方式定義設(shè)備之間聯(lián)動規(guī)則或數(shù)據(jù)的流轉(zhuǎn)方式與方向。平臺在接入設(shè)備的基礎(chǔ)上,通過流入的設(shè)備數(shù)據(jù)與規(guī)則引擎來執(zhí)行一系列動作。規(guī)則引擎分為場景聯(lián)動和數(shù)據(jù)流轉(zhuǎn),二者都由層層遞進的觸發(fā)器、執(zhí)行條件、執(zhí)行動作三個部分組成,達成前者的條件才可進入后者的判斷。觸發(fā)器需指定一個設(shè)備及其屬性以及觸發(fā)條件,屬性可以為一或多個,并可自定義屬性邏輯關(guān)系。執(zhí)行條件為時間范圍,可為一個規(guī)則創(chuàng)建多個時間范圍。場景聯(lián)動的執(zhí)行動作分為設(shè)備輸出、告警輸出、規(guī)則輸出。設(shè)備輸出即對設(shè)備的反向控制,通過設(shè)備定義的Topic與輸入的指令來操控設(shè)備執(zhí)行動作。告警輸出是設(shè)備數(shù)據(jù)達到條件時發(fā)出告警,分為瀏覽器與發(fā)送短信兩種告警方式。規(guī)則輸出是聯(lián)動其他的規(guī)則引擎,觸發(fā)規(guī)則輸出后可讓另一個場景聯(lián)動規(guī)則跳過觸發(fā)器與執(zhí)行條件,直接觸發(fā)執(zhí)行動作,提高了規(guī)則設(shè)置的靈活性。數(shù)據(jù)流轉(zhuǎn)的執(zhí)行動作是用不同方式將設(shè)備數(shù)據(jù)流轉(zhuǎn)到指定目的地,如數(shù)據(jù)庫、API以及消息隊列等,進一步構(gòu)建相關(guān)應(yīng)用。
規(guī)則引擎執(zhí)行過程如圖4所示。首先為設(shè)備上報數(shù)據(jù)至平臺,平臺收到數(shù)據(jù)后判定是否為設(shè)備配置了場景聯(lián)動或數(shù)據(jù)流轉(zhuǎn)規(guī)則,若無則跳過數(shù)據(jù),若有則進入觸發(fā)器判斷,達成觸發(fā)條件則進入執(zhí)行條件判斷,通過后觸發(fā)用戶定義的動作。
圖4 規(guī)則引擎執(zhí)行時序圖
圖4 測井曲線三維展示
3.2.3 告警管理
規(guī)則引擎中觸發(fā)的告警在告警管理中配置,告警分為平臺告警與短信告警,用戶需制定告警規(guī)則,包括告警方式與告警觸發(fā)的間隔。告警依靠WebSocket協(xié)議來實現(xiàn)即時通訊,用戶無須刷新瀏覽器就可實時收到服務(wù)端發(fā)來的告警信息,保證了告警的實時性。
具體的告警流程如圖5所示。首先數(shù)據(jù)上報后由場景聯(lián)動規(guī)則來判定是否觸發(fā)告警,若達成觸發(fā)條件則會查詢上次告警時間并與當(dāng)前時間求差值同時與告警間隔做對比來確定是否需要告警,如需告警則發(fā)出告警同時更新上次告警時間為當(dāng)前時間,告警的次數(shù)與信息將會被記錄用作數(shù)據(jù)可視化展示與分析。
圖5 告警流程時序圖
圖6為設(shè)備管理頁面,物模型數(shù)據(jù)標簽頁展示了設(shè)備的數(shù)據(jù)模型,功能類型包括屬性、命令和事件,從三個維度完成對設(shè)備數(shù)據(jù)建模。日志服務(wù)標簽頁展示了設(shè)備上報數(shù)據(jù)的日志,Topic列表標簽頁展示了用戶自定義Topic供設(shè)備訂閱,設(shè)備綁定產(chǎn)品后可繼承產(chǎn)品的物模型和Topic列表,若設(shè)備類型為網(wǎng)關(guān)設(shè)備,則展示其子設(shè)備列表。
圖6 設(shè)備管理頁面
圖7為規(guī)則引擎管理頁面,以場景聯(lián)動規(guī)則為例。選擇一個產(chǎn)品下的一個設(shè)備作為觸發(fā)設(shè)備,同時為此設(shè)備的一個或多個屬性添加閾值,選擇判定規(guī)則為“或”或者“且”即完成觸發(fā)器的設(shè)定,選擇一個或多個時間范圍完成對執(zhí)行條件的設(shè)定,執(zhí)行動作中選擇設(shè)備輸出,告警輸出或規(guī)則輸出。設(shè)備輸出中選擇設(shè)備下的屬性或命令后填寫屬性值,或命令字符串,平臺會將設(shè)備屬性設(shè)為填寫值,或控制設(shè)備執(zhí)行命令字符串對應(yīng)動作。數(shù)據(jù)流轉(zhuǎn)規(guī)則參照場景聯(lián)動。
圖7 規(guī)則引擎管理頁面
圖8告警管理頁面用于管理告警規(guī)則,告警規(guī)則包含告警名稱、告警等級、告警方式、聯(lián)系人和相同告警間隔。填寫完后點擊啟動即可在規(guī)則引擎中綁定告警規(guī)則,觸發(fā)后在平臺上或短信發(fā)出告警。
圖8 告警管理頁面
工業(yè)物聯(lián)使能平臺的建設(shè)能夠有效推動制造業(yè)數(shù)字化轉(zhuǎn)型,實現(xiàn)經(jīng)濟高質(zhì)量發(fā)展。針對工業(yè)生產(chǎn)要素的平臺化接入管理以及高效利用,給出了一種工業(yè)物聯(lián)使能云平臺的設(shè)計和實現(xiàn),平臺支持主流工業(yè)協(xié)議,實現(xiàn)設(shè)備接入管理、生命周期管理、規(guī)則引擎與預(yù)警,以及運營監(jiān)控等功能。平臺具有良好的擴展性和可靠性,有效支撐智能工廠上層創(chuàng)新應(yīng)用。