郭俊豪



摘 要:在過去,工業(yè)企業(yè)為了實時獲取現(xiàn)場設備的數(shù)據(jù)信息,每一個工業(yè)應用軟件開發(fā)商都需要編寫專用的接口函數(shù)。由于現(xiàn)場設備的種類繁多,且產品的不斷升級,往往給工業(yè)企業(yè)用戶和軟件開發(fā)商帶來了巨大的工作負擔。編寫一種融于工業(yè)互聯(lián)網體系的web化接口工程,提供實時數(shù)據(jù)的接口查詢服務應運而生。
關鍵詞:實時數(shù)據(jù)采集;Historian;RestfulAPI;JAVA;IFIX;Wonderware
1 設計背景
2002年廈門煙草工業(yè)有限公司(以下簡稱廈煙公司)異地技術改造。在新廠房建設投入新設備的同時,源于對設備監(jiān)控的需求,分別引入了英國施耐德的工控軟件Wonderware、美國GE(通用)公司的工控軟件Proficy IFix,落地應用于廈煙公司三大車間:制絲、卷包、動力,搭建起設備自動化監(jiān)視與輔助控制的集中控制系統(tǒng)(以下簡稱集控系統(tǒng))。
集控系統(tǒng)在每個車間部署地都提供了對應現(xiàn)場設備相關傳感器的實時數(shù)據(jù)庫Historian,兩家工業(yè)軟件開發(fā)商都為數(shù)據(jù)分析與挖掘提供了標準規(guī)范的接口方式ODBC與OPC開放標準,基于自身的軟件體系做延伸數(shù)據(jù)分析決策產品。
隨著工業(yè)互聯(lián)網的蓬勃發(fā)展,智能工廠,移動互聯(lián)的理念深入人心,傳統(tǒng)C/S架構的工控軟件已經無法適應互聯(lián)網B/S架構的快速輕便的通訊方式,只適合在生產現(xiàn)場穩(wěn)定運行,提供數(shù)據(jù)源的穩(wěn)定展示。
因此,需要有簡易的模式去按需獲取工控軟件在實時數(shù)據(jù)庫的數(shù)據(jù)源,得到的數(shù)據(jù)可以在網頁信息系統(tǒng)做數(shù)據(jù)分析圖形化,決策推演,以及移動端看到工廠現(xiàn)場生產實時生產狀態(tài)。
2 設計描述
從工業(yè)自動化軟件設計角度來說,系統(tǒng)分析與設計是一項對系統(tǒng)度以及實用性要求特別高的工作[1]。對于卷煙工業(yè)而言,廈煙公司因職能分工的要求,針對不同生產車間部署不同的集控系統(tǒng),目前也同樣缺乏系統(tǒng)整體設計,但針對業(yè)務需求又僅僅只是需要幾個核心傳感器的實時值。因此,從實用角度出發(fā),將不同廠家的集控系統(tǒng)的傳感器實時數(shù)據(jù),采集給應用層做接口設計。
2.1編程語言及框架
采用JAVA語言搭建輕量級無狀態(tài)采集工程,提供穩(wěn)定且實時的傳感器的RESTFULAPI接口。
2.1.1關于REST
REST是以資源為中心的,在REST中,認為Web是由一系列的抽象資源(Abstract Resource)組成,這些抽象資源具有不同的具體表現(xiàn)形式(Representational State),通過REST架構,Web應用程序可以使用一致的接口(URL)暴露資源給外部世界,并對資源提供語義一致的操作服務[2]。因此圍繞著REST架構規(guī)范,采用RESTFULAPI的實現(xiàn)方式去具體實現(xiàn)這次的接口。
本文采用Swagger-UI的方式,將現(xiàn)場傳感器的以接口的方式呈現(xiàn)在開發(fā)者面前,方便前端進行調用與測試。Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調用和可視化 RESTful 風格的 Web 服務。總體目標是使客戶端和文件系統(tǒng)作為服務器以同樣的速度來更新。文件的方法,參數(shù)和模型緊密集成到服務器端的代碼,允許API來始終保持同步。
2.1.2關于Historian實時庫
利用iFix提供的API接口來讀取iFix的實時數(shù)據(jù)庫,是較為簡便的方法,通過調用相關API函數(shù),可以直接讀寫iFIx的實時數(shù)據(jù)庫[3]。
但是不同廠家都有自身連接實時數(shù)據(jù)的連接方式,他們都是統(tǒng)一采用SQLSERVER數(shù)據(jù)庫OLE DB Provider驅動程序去連接Historian。因此本文采取直接通過連接SQLSERVER數(shù)據(jù)庫,通過查詢語句的二次嵌套命中所需要實時數(shù)據(jù)庫的數(shù)據(jù)表,并進行視圖層封裝給上層應用語言作為查詢的實體。詳見如下SQL語句:
SQL語句中,(1)為需要轉化為實體屬性tagname標簽鍵名,timestamp時間戳,value標簽鍵值;(2)為使用OPENQUERY對鏈接服務器指定傳遞查詢,需要傳入Historian實時庫名和嵌套子查詢;(3)為子查詢需要查詢的Historian實時庫中的表ihrawdata里的性tagname標簽鍵名,timestamp時間戳,value標簽鍵值;(4)為子查詢中的判定條件1,根據(jù)業(yè)務部門提供的傳感器鍵值名QYFIX.EP1_T08_PT0807_PV.F_CV;(5)為子查詢中的判定條件2,采集頻率限定值intervalmilliseconds;(6)為子查詢中的判定條件3,根據(jù)時間戳timestamp倒序排序,將最新值排在第一條;(7)為嵌套查詢的命名。
2.1.3關于JAVA
在眾多編程語言中,JAVA語言屬于語義嚴謹并且穩(wěn)定可靠,本文采用JAVA的Spring框架體系,SpringBoot+Mybatis+Redis多數(shù)據(jù)源框架連接不同車間的Historian實時庫,對外暴露可調用API的服務,具備高并發(fā)體系架構,可以很好的勝任此次的工作。框架層級設計詳見圖1:
2.2應用請求與采集工工程實現(xiàn)
根據(jù)業(yè)務部門提供集控系統(tǒng)的標簽鍵做采集。按需采集是此次采集的核心思想,與以往OPC采集方式不同,采用被動式等待調用的模式,由應用發(fā)起調用請求。為了滿足實時性要求,應用針對不同傳感器需發(fā)起異步調用及定時請求,易造成接口崩潰或者數(shù)據(jù)庫鎖。因此在框架中引入Redis緩存機制,設定采集值的生命周期,一旦到達緩存設定周期,才去開啟連接查詢數(shù)據(jù)庫,這個設定周期可以根據(jù)應用展現(xiàn)傳感器時效性設置。應用請求路線詳見圖2:
2.3應用部署與網絡安全
采集工程作為后臺服務,遵循廈煙微服務部署規(guī)則,接入應用網關。
應用調用方需要生成至少1024位的RSA密鑰對,把【RSA公鑰】上傳服務網關獲得應用令牌。應用調用方遵循JWT規(guī)范使用【RSA私鑰】與網關返回的【應用令牌】生成【JWT訪問令牌】,請求在網關注冊的后臺接口時附上JWT安全驗證頭,服務網關負責驗證令牌是否合法或應用調用方是否有權限調用請求的后臺接口,如果有則反向代理至后臺服務,具體鑒權驗證詳見圖3:
3 輸出成果
落地應用
為了檢驗采集工程的真實落地場景,根據(jù)車間需求定制開發(fā)了壓力容器監(jiān)控web頁。
采用HTML+JAVASCRIPT+CSS基于VUE前端框架進行網頁設計與開發(fā),利用Echarts圖表組件進行壓力容器值的實時展示;構筑定時器定時按10秒一次的規(guī)則進行輪詢后臺實時數(shù)據(jù),動態(tài)展示壓力容器的實時值。
4 結語
進入十四五規(guī)劃元年信息化建設的今天,隨著企業(yè)信息化隊伍不斷的壯大,員工自主開發(fā)實力得到提升,掌握并具備相關計算機知識的員工越來越多,在解決信息系統(tǒng)痛點的棘手問題上得以快速解決并轉化為企業(yè)重要知識財富。
參考文獻:
[1] 張鵬. 試析一種面向對象的工業(yè)自動化監(jiān)控系統(tǒng)設計技術 [J].中國石油和化工標準與質量, 2012, 032(005): 113-113.
[2] 袁赟. Java與Restful Web Service [J].電腦知識與技術, 2007, 004(021): 780-782.
[3] 倪磷罡. 基于iFix的歷史記錄程序的開發(fā)與優(yōu)化 [J].電子技術與軟件工程, 2015, 000(018): 178-179.
(廈門煙草工業(yè)有限責任公司,福建 廈門 361022)