王西剛, 任 佳
(浙江理工大學 機械與自動控制學院,杭州 310018)
當今時代,互聯網技術發展迅速,作為新時代互聯網技術和傳統制造業相融合的產物,工業互聯網將在新一輪的工業革命中起到關鍵作用. 工業互聯網有著數字化,網絡化,智能化的優點,同時,網絡的開放性和便利性又給工業互聯網的信息安全帶來了更大的挑戰,因此,加強工業互聯網防護建設,保障其數據信息的安全顯得尤為重要.
2018年,工業和信息化部印發了《工業控制系統信息安全行動計劃(2018-2020年)》,為工業互聯網信息安全保障工作提供了系統性指導. 國內外眾多專家和學者在網絡協議[1],可信計算[2],安全分析方法[3],網絡攻擊[4,5],集群證明機制[6]和用戶認證[7]等方面進行了研究,加強了工業互聯網信息安全保障. 但隨著工業控制系統更加復雜化,系統對數據管理的便捷性要求越來越高,各類數據管理軟件也層出不窮,針對工業數據的特點來設計便捷性高,適應性強的數據管理平臺才能提高生產效率,推動工業生產的智能化進程. 首先,機器設備生產的高頻性,工業過程的復雜性使得工業數據具有體量大,種類多的特點,這意味著對數據管理平臺的存儲性能要求較高. 第二,由于工業生產的系統性和過程變量之間的關聯性,工業數據存在完整性要求高,關聯性強的特點,因此要求數據管理平臺能夠進行條理清晰,結構分明的數據管理. 第三,工業數據來源于工業網絡和傳感設備,存在時序性強,處理速度要求高的特點,需要數據管理平臺能夠實現快速數據讀寫和數據傳輸功能. 最后,數據管理平臺一方面需要向管理人員和操作人員提供快捷的交互接口,一方面又要盡量保護數據信息安全,實現兩者平衡的關鍵是建立靈活,精確的權利分配機制,在滿足管理需求的前提下盡量降低數據泄露和破壞的風險,提升數據管理平臺的信息安全保護能力.
針對以上問題,本文以中國移動的物聯網平臺OneNET為基礎,基于Qt開發框架設計了一套用于PC端的工業互聯網數據管理平臺. 該平臺可以及時將云端存儲的數據保存到本地,解決了云平臺不能長期存儲大量數據的問題,為后續工業數據的建模和分析工作提供了便利. 另一方面,本文設計框架和思路可為解決工業互聯網數據管理平臺設計過程中的信息安全問題提供參照.
OneNET是中國移動基于物聯網技術建造的開放平臺,它支持多種協議類型,提供豐富的API和應用模板,可以便捷地進行工業互聯網應用平臺搭建. 其總體架構如圖1所示.
OneNET作為PaaS[8](Platfom-as-a-Service)層,一方面通過多種協議連接設備,另一方面為應用軟件開發提供接口,在工業互聯網中起到了橋梁作用.OneNET采用分布式存儲的結構保障了數據的存儲安全,同時基于消息對象結構,多種數據調用接口來實現數據的高并發讀寫操作,加強了數據信息的安全保障.除此之外,它還提供了私有云功能模塊,特有的私有協議RGMP以及第三方平臺接入的加解密方案,為解決應用平臺開發過程中的安全問題提供了便利. 得益于其較高的安全性和容災性,目前OneNET已經成功應用在了礦業生產遠程監測[9,10],智能設備數據管理[11,12]等工業互聯網領域.

圖1 OneNET平臺架構示意圖
REST(Representational State Transfer,表述性狀態轉移)是一種萬維網軟件架構風格[13],它把所有的數據信息抽象為資源并且對每一個資源使用唯一的資源標識符URL(Universal Resource Locator,統一資源定位符)來標識[14],所有資源及其結構組成了資源模型. 本文使用的資源模型組織架構形式如圖2所示,設備數據以數據流的形式進行存儲,APIKey用于限制設備和產品的訪問權限,觸發器用于滿足觸發條件時發送通知.
用戶在初始使用時需要創建用戶和產品,創建完成后即可通過數據管理平臺調用API方法不斷完善產品的設備信息和數據流等資源. 對于用戶創建的產品,OneNET會自動分配一個產品APIKey,該產品APIKey默認關聯產品下的所有設備,即具有訪問該產品下所有設備信息和設備數據的最高權限. 對于每一個設備,用戶可以自行創建并關聯APIKey,但是其形式只能由OneNET平臺分配而不能自定義,該設備APIKey只具有訪問與其相關聯設備的權限,對于其他設備沒有訪問權限. 這種權限分級的設計可以有效地對設備的數據信息進行分類和分級,為實現設備數據信息的分類保護提供了基礎. 用戶可以使用觸發器實現對數據的監控,在發生某些意外情況時向用戶發送告警通知.OneNET支持手機短信,郵件和URL地址3種通知方式.

圖2 資源模型組織架構形式
RESTful API[15,16]是一種使用HTTP協議并符合REST風格的Web API. 數據管理平臺需要通過RESTful API的方式和OneNET平臺進行交互,獲取云端數據保存在本地并且進行進一步的管理和分析. 具體來講,資源模型中的單個資源或者一組資源都具有各自的URL作為從外部訪問該資源的接口,第三方應用可以通過GET,PUT,POST,DELETE這4種HTTP請求方法分別對資源進行查詢,更新,新建和刪除操作[16].
以終端設備的接入協議為MODBUS為例,新建設備的URL為“http(s)://api.heclouds.com/devices”,HTTP請求方式為POST,HTTP頭部參數名稱為“apikey”,值為前文所述OneNET分配的的默認APIKey,請求參數及其說明如表1所示.

表1 HTTP請求參數說明
OneNET平臺返回的參數一般包括errno,error和data分別表示調用錯誤代碼,錯誤描述和請求的資源信息如查詢的數據,設備的狀態等.
為提高資源傳輸速率,發送的請求和接收到的響應都通過JSON[17]類型傳輸. 例如新建一個名稱為“example”,地理位置信息為東經106度,北緯40度,鑒權信息為“xxx123”的設備,其請求參數JSON格式應為:

工業互聯網通過網絡解除了設備之間的空間距離限制,匯聚了大量的工業數據,只有對這些紛繁的數據進行條理清晰,層次分明的結構化管理才能有效保障數據信息的安全,同時也能提高工作效率. 但是數據管理平臺作為人與數據交互的主要途徑,具有接觸人員數量較多,人員類型復雜的特點,因此需要在滿足管理需求的情況下加強數據信息的保護. 本文基于Qt開發框架對數據管理平臺進行開發. 圖3為數據管理平臺的整體架構圖,平臺包含數據庫和交互界面兩部分,這兩部分通過模型-視圖框架進行結合,在滿足數據管理需求的同時,根據用戶信息對數據操作權限和數據可訪問范圍進行分級和限制,實現對數據信息的保護.

圖3 數據管理平臺整體架構
Qt中的QtSql模塊提供了對數據庫的支持,同時也包含QtNetwork和QJsonObject[18,19]等模塊可以進行基于HTTP的網絡通信和JSON對象處理,因此可以很方便地調用OneNET的API獲取云端數據,并進行解析和存儲.
為了對數據進行結構化管理,本文設計了工廠,廠房,設備組,設備四個級別的數據標識,對每一條數據都將根據其標識進行分類歸納存儲. 如圖3所示,虛線框中顯示了數據及其標識之間的關系,每一個數據標識對應一個數據表,數據表中存儲了標識的編號,創建時間等詳細信息,表2列出了各個數據標識及其存儲在數據表中的信息.

表2 來源標識數據表信息
表2中所列出的數據標識相關信息為“是”表示對應的數據表存儲了該信息,“否”表示不含有該信息. 經緯度信息用于在界面地圖中標注,具體內容參考2.2.1節. 各級別的標識根據編號建立聯系,例如某廠房的“父項編號”即為該廠房所在工廠的編號,而工廠有可能含有多個廠房,其含有廠房的數量用“子項數量”表示. “狀態”體現了隸屬該標識的所有設備的運行情況,分為正常和異常兩種,所有設備正常運行時狀態信息為正常,而只要有一個設備發生了數據異常或者離線等異常情況時狀態信息變為異常,此時可根據各級別標識的狀態信息逐級查找異常設備.
除了以上用于存儲數據標識的數據表,數據庫還需要存儲從OneNET獲得的設備數據信息以及用戶的用戶名和密碼等信息. 設備的數據信息數據量龐大,是數據庫的主要部分,通過定時向OneNET發送查詢請求獲得,數據內容由不同的工業過程和設備決定.
用戶數據表包含用戶名,密碼,APIKey和權限等級四項內容,用戶名和密碼用于登錄平臺,APIKey用作向OneNET發送請求的頭部參數值,所以APIKey的權限大小決定了該用戶所能查詢的數據范圍,通過這種方法可以將不同種類的設備與不同種類的用戶一一對應,使得用戶只能對自己權利范圍內的數據進行操作和管理,而無法獲取其他設備的數據信息,從而有效防止設備信息泄露. 權限等級則用來對用戶的操作方式進行權限劃分,等級從高到低分別為管理員,高級用戶和普通用戶. 各等級用戶的權限及其關系如圖4所示. 高等級用戶可以對低等級用戶進行創建和刪除等管理操作,不同等級用戶擁有不同的數據訪問權限.
交互界面主要有3種:(1) 是數據顯示界面,包含工廠界面,廠房界面,設備組界面,設備界面和設備數據界面,分別對應顯示設備數據的4個來源標識信息和數據信息; (2) 是操作界面,作為對數據庫進行操作的交互接口; (3) 是用戶登錄和注冊界面,用于用戶登錄或者創建新用戶.
2.2.1 顯示界面
主界面如圖5所示,其中圖5(a)是管理員登錄后的主界面,圖5(b)是普通用戶登錄后的主界面. 界面由標題欄,菜單欄,工具欄,主窗口和狀態欄組成. 如圖 5中,菜單欄包含所有功能菜單,工具欄包含菜單欄中一些常用操作的快捷方式,如“主頁”,“定位”,“刷新”等. 狀態欄顯示了登錄用戶的類別以及網絡連 接狀態. 主窗口是基于數據表格和地圖的工廠信息管理界面,主窗口左側表格用于顯示所有工廠的名稱,可以通過表格“右鍵菜單-屬性”查看工廠的詳細信息.
為了實現用戶的權限分級,應針對不同級別的用戶設計不同的交互界面. 管理員和高級用戶具有高于普通用戶的操作權限,對比圖5中兩幅圖的工具欄可以發現管理員比普通用戶擁有更多的操作接口,具體包括“創建用戶”,“添加”,“刪除”和“修改”操作,同樣的,在菜單欄中也進行了相應權限的劃分. 在數據范圍方面,管理員的APIKey可以訪問所有設備信息,而普通用戶只能訪問部分權利范圍內的設備信息. 假設所有工廠包括工廠A-J,其中工廠A-F為普通工廠,其余工廠為機密性工廠且不允許普通用戶查看,基于此假設對管理員和普通用戶的APIKey進行設備關聯并測試登錄效果,結果如圖5所示,圖5(a)所示管理員登錄后可以訪問所有工廠信息,圖5(b)所示普通用戶只能訪問普通工廠信息. 需要說明的是用戶可訪問的數據范圍并不是根據用戶的級別確定的,而是在創建用戶時指定的(參考2.2.3節),即同樣是普通用戶其可訪問的數據范圍也是存在差異的,這樣能夠提高權限劃分的靈活性.
地圖顯示是通過Qt的QWebChannel[18]模塊調用百度地圖JavaScript API[20,21]來實現的,該API提供了豐富的函數接口,不僅可以顯示地圖,還可以進行標注,設置視圖范圍,導航等基于地圖的操作. 地圖中顯示的工廠標注和表格中的工廠一一對應,如果某工廠的設備出現了異常狀態,地圖圖標會由“水滴”變為“感嘆號”,如圖5主窗口地圖中的左上方所示,此時可以通過地圖標注的“右鍵菜單-在表格中位置”來選中表格中對應的異常工廠,如果需要從表格中找到相應的地圖標注,可以單擊表格中的某一工廠,此時地圖中的對應圖標會變為上下躍動的動態圖標. 雙擊表格中的某一工廠或者地圖中的工廠圖標可以打開該工廠的廠房界面.
圖6為某工廠E的詳細信息. 主窗口右側地圖界面用于顯示地圖并根據工廠經緯度信息在地圖中標注.主窗口內的搜索框用于對地圖內關鍵字進行搜索,需連接互聯網,而工具欄的搜索用于本地數據庫的關鍵字搜索,可在離線狀態下使用.

圖6 某工廠E詳細信息
圖7所示為某工廠E的廠房界面示例,其中包含了該工廠的工廠名和所有的廠房信息,以圖標和文字的形式顯示,并對顯示格式進行了簡單的渲染(參考2.3節). 類似的,通過雙擊的方式還可以逐級打開設備組界面,設備界面和設備數據界面,設備組界面和設備界面形式類似廠房界面,只是作為不同級別的數據標識,其顯示的信息內容不同. 設備數據界面以表格的形式呈現所有設備數據,并且會隨著平臺與OneNET的數據傳輸不斷更新來實時顯示數據內容,歷史數據則保存在數據庫中,歷史數據的可查詢時間范圍也可以根據用戶級別進行自定義劃分. 使用工具欄中的“主頁”,“向前”,“向后”可以靈活地進行不同級別數據標識顯示界面的切換.
2.2.2 數據操作界面
用戶對數據進行操作時需要通過操作界面進行信息交互,如填寫想要查詢的設備ID,新建設備的名稱.在顯示界面已經對數據操作接口進行了權限分級,這里以管理員權限為例介紹數據操作界面.
數據操作主要包括設備數據和各級數據標識的新建,查詢,刪除和修改操作. 由于本地數據結構和OneNET端的存儲結構是保持統一的,兩者之間通過“設備”這一數據標識進行數據信息的對接,即圖2資源模型中的一個設備對應圖3數據結構中的的一個設備,資源模型中的設備數據對應本地數據庫中的設備數據表,所以在進行數據操作時也要保證進行本地數據庫和OneNET端的數據內容相統一,例如在刪除某一數據標識時,會刪除該標識以及其下屬級別的所有數據標識和數據信息,同時也需要刪除OneNET端屬于該標識的設備和數據信息.
新建工廠時需要指定工廠的地理位置和名稱,為方便確認地理位置,在執行該操作時需結合工廠顯示界面的地圖,首先在地圖中定位需要新建工廠的地理位置,然后單擊該點,獲得該點的經緯度信息并顯示在彈出的新建工廠操作界面中,如圖8所示,然后輸入新建工廠的名稱,最后關閉界面,平臺會自動獲取系統當前時刻的具體時間并根據工廠數據表中工廠的數量確定新建工廠的編號,一起保存在工廠數據表中.

圖7 某工廠E的廠房界面

圖8 新建工廠操作界面
新建設備的操作界面如圖9所示,首先需要選擇設備的來源標識,如果數據庫中沒有保存所需的來源標識,應先在本地數據庫中新建各級來源標識,然后在新建設備操作界面中選擇相應的標識. 確定標識后需要輸入設備名稱和鑒權信息,對于表1中非必須的參數暫時沒有設置輸入接口,可根據實際需求進行添加.信息輸入完成后平臺會向OneNET端發送新建設備的POST請求并獲取OneNET端返回的設備ID,然后把新設備的所有信息保存在設備數據表中,并提示設備新建成功,在OneNET端新建成功的設備信息如圖10所示.

圖9 新建設備操作界面

圖10 OneNET端設備信息
用戶能夠通過新建觸發器來確定觸發通知的條件,實現對數據的實時監控. 刪除和修改操作可以直接通過目標項目右鍵菜單中的刪除和修改來執行操作,也可通過相應操作界面中的下拉列表逐級查找目標項目來進行刪除和修改操作. 為保護原始數據,修改操作無法對設備數據和來源標識的創建時間,狀態等固有屬性進行修改,只能修改名稱,經緯度等可變信息. 查詢操作可以通過關鍵字進行本地數據庫搜索和地圖內的關鍵字搜索,也可以通過查詢操作界面輸入對應參數向OneNET發送查詢請求獲取查詢結果.
2.2.3 登錄和注冊界面
登錄界面用于用戶登錄時輸入用戶名,密碼和用戶類別,并根據用戶數據表信息給出“登陸成功”,“用戶名不存在”,“密碼錯誤”的提示信息. 如圖11所示為用戶登錄界面.

圖11 用戶登錄界面
為了保護數據信息安全,盡量減少不必要的用戶數量,創建用戶的權限也進行了劃分,管理員用戶可以創建所有級別的用戶,高級用戶可以創建普通用戶,普通用戶不能創建新的用戶,如圖12所示為管理員權限的創建用戶界面.
創建用戶時需要輸入用戶名和密碼,選擇用戶類型并添加允許該用戶訪問的設備. 添加完成后平臺將所添加設備的ID作為請求參數向OneNET發送新建APIKey的POST請求,OneNET會新建一個APIKey,并將其與添加的所有設備建立關聯,然后返回給數據管理平臺作為新用戶的APIKey,這樣就劃定了新用戶能訪問設備信息的范圍.
MVC[22](Model-View-Controller)是一種常用于創建用戶界面的設計模式,包含3個組件:模型,視圖和控制,分別用來表示數據,顯示數據和操作數據. 在Qt中將視圖和控制兩種組件結合形成了模型-視圖架構,將數據的存儲和數據的顯示進行分離,能夠更加方便地對數據進行顯示和操作,同時為了對用戶輸入進行靈活處理,Qt還引入了代理(Delegate)的概念,以此來優化數據顯示[18]. 模型-視圖的架構如圖13所示.
前文所述工廠等數據表即為圖13中的數據,為了更加方便地訪問基于表格結構的數據,在本文中使用了QSqlTableModel作為數據模型,而對于視圖分別使用了QWebEngineView,QTableView和QListView等多種視圖進行顯示,分別如圖5右側地圖和左側表格以及圖7所示,其中圖7是使用代理渲染的圖標列表視圖.

圖12 注冊用戶界面

圖13 模型-視圖架構
本文基于物聯網開放平臺OneNET設計并實現了一套用于PC端的工業互聯網數據管理平臺,在設計過程中著重考慮了可能發生的人為數據泄漏和破壞問題,結合OneNET的APIKey權限分類方法針對每個用戶獨立地進行數據訪問范圍上的劃分,通過交互界面多級設計的方法實現用戶數據操作權限的分級,建立了數據的異常監控報警機制,在發生異常情況時能夠及時向用戶發送告警通知. 整個流程可為加強工業互聯網終端平臺搭建過程中的信息安全保障提供參照. 除此之外,本文實現了基于百度地圖的地理位置信息管理和設備數據的結構化管理方式,使得交互界面更加友好,方便數據的分析和建模工作. 在接下來的工作中,為進一步加強數據信息安全保護,可以結合比較成熟的生物特征識別算法加強用戶信息認證的安全性,同時考慮到數據信息中可能包含個人敏感信息,在后續工作中會對數據進行脫敏處理,保障信息安全.