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