趙磊
[摘 ? ?要]文章設計了基于工業(yè)物聯(lián)網(wǎng)的數(shù)據(jù)采集軟件,包括軟件的架構設計、數(shù)據(jù)庫設計、軟件初始設計、采集通道設計、報警預警設計、數(shù)據(jù)存儲設計、數(shù)據(jù)接口設計等,可廣泛應用于各類工業(yè)數(shù)據(jù)采集應用場景,實現(xiàn)實時數(shù)據(jù)采集、歷史數(shù)據(jù)存儲、報警預警、數(shù)據(jù)交互等功能,為滿足工業(yè)物聯(lián)網(wǎng)領域的數(shù)據(jù)采集需求提供了一種新的軟件設計。
[關鍵詞]工業(yè);物聯(lián)網(wǎng);數(shù)據(jù)采集;采集通道
[中圖分類號]TN929.5 [文獻標志碼]A [文章編號]2095–6487(2022)03–0–03
Design of Data Acquisition Software based on Industrial Internet of Things
Zhao Lei
[Abstract]This paper designs data acquisition software based on the Industrial Internet of Things, including software architecture design, database design, software initial design, acquisition channel design, alarm warning design, data storage design, data interface design, etc., which can be widely used in various types of The industrial data collection application scenario realizes functions such as real-time data collection, historical data storage, alarm warning, data interaction, etc., and provides a new software design to meet the data collection needs of the industrial Internet of Things.
[Keywords]industry; Internet of things; data acquisition; acquisition channel
在互聯(lián)網(wǎng)技術、通訊技術、計算機技術等飛速發(fā)展的時代,工業(yè)物聯(lián)網(wǎng)領域也在飛速發(fā)展,過去20年間組態(tài)軟件在工業(yè)數(shù)據(jù)采集方面得到了廣泛應用,但隨著技術的發(fā)展,組態(tài)軟件眾多問題已經(jīng)暴露,比如功能繁冗、安裝環(huán)境要求高、硬件服務器配置要求高、學習成本高、應用成本高等問題。本文為工業(yè)物聯(lián)網(wǎng)領域在數(shù)據(jù)采集方面提供更優(yōu)的軟件設計,力求解決工業(yè)物聯(lián)網(wǎng)領域在數(shù)據(jù)采集方面的若干關鍵技術問題,為進一步的廣泛應用打下良好的基礎,促進我國工業(yè)物聯(lián)網(wǎng)的進一步發(fā)展。
本設計具有對工業(yè)傳感器、工業(yè)設備及相關系統(tǒng)進行數(shù)據(jù)采集、處理、存儲、展示等功能,支持的通信協(xié)議有IEC104、ModbusTCP、ModbusRTU、OPC、西門子S7等,具有如下技術特點:①采集內(nèi)容及通信方式靈活可配置;②支持多種通信協(xié)議,應用范圍廣;③輕量級設計,內(nèi)核精簡,占用硬件資源少,響應速度快、性能穩(wěn)定;④變量采用“模板化”設計,可復用,實際應用中使得系統(tǒng)搭建簡單快速;⑤軟件支持跨平臺部署,支持Windows及Linux。
1 軟件架構設計
基于工業(yè)物聯(lián)網(wǎng)的數(shù)據(jù)采集軟件設計主要包括軟件初始設計、采集通道設計、報警預警設計、數(shù)據(jù)存儲設計、數(shù)據(jù)接口設計,其中軟件初始設計包括變量模板初始化設計、監(jiān)控對象初始化設計、采集通道初始化設計,采集通道設計包括IEC104采集通道設計、ModbusTCP采集通道設計、ModbusRTU采集通道設計、OPC采集通道設計、SIMATIC_S7采集通道設計,數(shù)據(jù)存儲設計包括實時數(shù)據(jù)存儲設計和歷史數(shù)據(jù)存儲設計,數(shù)據(jù)接口設計包括實時數(shù)據(jù)接口設計和遙控遙調(diào)接口設計,如圖1所示。
2 數(shù)據(jù)庫設計
軟件的系統(tǒng)數(shù)據(jù)存儲于關系數(shù)據(jù)庫中,主要的表有采集通道表、變量模板表、監(jiān)控對象表、變量IO信息表、報警預警記錄表、采集設備表。
采集通道表為描述采集通道的屬性表,主要包括通信幀、通信間隔、通信協(xié)議、端口信息、類型。
變量模板表為描述變量模板的屬性表,每1條記錄都代表1個變量,主要包括變量名、功能碼、變量類型、變量模板名、字節(jié)長度、基數(shù)、系數(shù)、數(shù)據(jù)地址、數(shù)據(jù)類型、觸發(fā)規(guī)則、存儲規(guī)則。
監(jiān)控對象表為描述監(jiān)控對象的屬性表,每1條記錄都代表1個監(jiān)控對象,主要包括監(jiān)控對象的編號、設備地址、變量模板名、類型、采集通道序號。
變量I/O信息表為描述變量I/O信息的屬性表,該表主要用于計算變量的報警預警功能,主要包括報警上下限值、預警上下限值、報警是否推送、報警預警信息、延時時間。
報警預警記錄表為報警預警信息的歷史記錄表,主要包括報警預警發(fā)生時間、確認時間、恢復時間、報警預警值、閾值、報警級別。
采集設備表為采集設備的屬性表,主要包括設備地址、間隔、類型、超時時間、安裝位置、安裝時間、生產(chǎn)廠家。
3 軟件詳細設計
3.1 軟件初始設計
軟件啟動時,首先需要對系統(tǒng)配置信息開啟初始化功能,主要包括變量模板初始化、監(jiān)控對象初始化、采集通道初始化。
變量模板初始化需要從變量模板表中讀取所有變量,再將變量分配到相應的變量模板上,再根據(jù)變量的分組信息自動建立歷史數(shù)據(jù)表;監(jiān)控對象初始化需要從監(jiān)控對象表中取出所有監(jiān)控對象,根據(jù)監(jiān)控對象所對應的變量模板賦予該監(jiān)控對象的變量,同時讀取變量IO信息中對應的信息來初始化監(jiān)控對象的報警預警屬性;采集通道初始化需要從采集通道表中取出所有采集通道,首先初始化通訊屬性(包括通信協(xié)議、通信幀等),然后初始化該采集通道對應的監(jiān)控對象(可以是1個采集通道對應多個監(jiān)控對象),最后等待采集通道啟動采集。
3.2 采集通道設計
采集通道設計是數(shù)據(jù)采集軟件的核心設計,主要用于解析不同通信協(xié)議的數(shù)據(jù),然后對數(shù)據(jù)進行報警預警處理、數(shù)據(jù)存儲處理、數(shù)據(jù)接口處理等。軟件支持的通信協(xié)議有IEC104、ModbusTCP、ModbusRTU、OPC、西門子S7等,采用多線程方式進行數(shù)據(jù)采集,每個采集通道均支持遙控遙調(diào)操作。每種采集通道的設計均圍繞著該采集通道的通信協(xié)議進行,大體流程類似,但每種采集通道都會根據(jù)各自通信協(xié)議的特點,有各自獨特的設計。
3.2.1 IEC104采集通道設計
采集通道線程啟動后,首先根據(jù)通道的連接屬性(IP和端口)去連接設備,如果連接不上10 s后繼續(xù)嘗試建立連接直至與設備連接上,然后發(fā)送采集通道的所有幀,發(fā)送之后等待數(shù)據(jù)返回,先處理返回的歷史數(shù)據(jù),再解析設備的實時數(shù)據(jù),數(shù)據(jù)解析完畢之后將最新的數(shù)據(jù)更新到實時庫緩存中,最后將歷史數(shù)據(jù)存到歷史庫中。
需要特別說明的是,IEC104采集通道的報警信息是下位機設備主動上送的,任何時候都有可能收到主動上送的報警,收到報警后對報警進行處理。
3.2.2 ModbusTCP采集通道設計
采集通道線程啟動后,首先根據(jù)通道的連接屬性(IP和端口)去連接設備,如果連接不上5s后繼續(xù)嘗試建立連接直至與設備連接上,然后發(fā)送1幀數(shù)據(jù)請求幀,發(fā)送之后等待該幀數(shù)據(jù)響應(如果響應超時則重發(fā)),然后解析響應數(shù)據(jù),等所有幀都發(fā)送并解析響應完畢后,將最新的數(shù)據(jù)更新到實時庫緩存中,最后將歷史數(shù)據(jù)存到歷史庫中。
3.2.3 ModbusRTU采集通道設計
ModbusRTU采集通道與ModbusTCP類似,都屬于modbus協(xié)議,區(qū)別主要是ModbusRTU協(xié)議是基于串口通訊的,所以本軟件的設計除了在連接屬性上與ModbusTCP不同外,在功能碼、幀格式和數(shù)據(jù)采集流程基本一致。
3.2.4 OPC采集通道設計
采集通道線程啟動后,首先根據(jù)IP和OPC服務初始化,然后通過采集通道的幀配置初始化OPC分組,再將OPC分組注冊OPC異步監(jiān)聽器,之后該采集通道進行異步數(shù)據(jù)采集,采集到數(shù)據(jù)后進行解析處理,最后更新實時庫和存儲歷史數(shù)據(jù)。
3.2.5 SIMATIC_S7采集通道設計
采集通道線程啟動后,首先根據(jù)通道的連接屬性(IP和端口)去連接設備,如果連接不成功繼續(xù)嘗試建立連接直至與設備連接上,然后發(fā)送數(shù)據(jù)請求幀(如果響應超時則重發(fā)),然后解析響應數(shù)據(jù),解析完畢后將最新的數(shù)據(jù)更新到實時庫緩存中,最后將歷史數(shù)據(jù)存到歷史庫中。
3.3 報警預警設計
報警預警模塊是軟件的重要組成部分,軟件的遙測、遙信變量支持報警預警功能,其中遙信變量支持的報警類型有:SOE報警、故障報警和遙信變位報警,遙測變量支持的報警類型為超上上限報警、超上限預警、超下限預警、超下下限報警4種越限類型,具體的配置及說明如下:①遙信SOE報警,由前端設備推送的報警;②遙信故障報警,遙信的1報警或0報警;③遙信變位報警,遙信由0變1或由1變0報警;④遙測越限報警,為超上上限報警、超上限預警、超下限預警、超下下限報警4種類型。報警預警流程如圖2所示。
3.4 數(shù)據(jù)存儲設計
3.4.1 實時數(shù)據(jù)存儲設計
實時數(shù)據(jù)存儲采用實時庫實現(xiàn),本文實時庫采用Redis,Redis是1個開源的使用ANSI C語言編寫、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
Redis只存儲數(shù)據(jù)的最新1條數(shù)據(jù),當數(shù)據(jù)有變化時則覆蓋該數(shù)據(jù)。在Redis中的數(shù)據(jù)格式以HashMap為主,具體格式為:
監(jiān)控對象編號 ? ? 變量名 ? ? ? ?變量值
監(jiān)控對象編號 ? ? 變量名:DATE ? ?變量值時間戳
3.4.2 歷史數(shù)據(jù)存儲設計
歷史數(shù)據(jù)存儲用關系型數(shù)據(jù)庫實現(xiàn),主流關系型數(shù)據(jù)庫(如MySQL、Oracle、PostgreSQL、SQL Server等)都可以作為軟件的歷史存儲數(shù)據(jù)庫。
歷史庫的數(shù)據(jù)表是在軟件初始化時自動建立的,根據(jù)變量模板的分組信息,每1個分組對應一個歷史數(shù)據(jù)表,關聯(lián)該變量模板的每1個監(jiān)控對象的歷史數(shù)據(jù)就按照分組信息以固定時間間隔存入到自動建立的數(shù)據(jù)庫表中。只有變量分組中的遙測、遙信變量才會被自動創(chuàng)建到表中。變量的存儲間隔在t_var_group_cfg表中進行配置,單位為分鐘,-1表示不存儲歷史數(shù)據(jù)。
3.5 數(shù)據(jù)接口設計
3.5.1 實時數(shù)據(jù)接口設計
軟件提供基于SOAP的WebService服務接口來訪問實時數(shù)據(jù),軟件提供的接口地址為http://IP地址:8085/services/ws,主要是通過監(jiān)控對象編號與變量名來獲取實時數(shù)據(jù)。
接口設計為:
public interface RtData {
String getValue(@QueryParam("code") String code,
@QueryParam("varName") String varName);
}
3.5.2 遙控遙調(diào)接口設計
軟件提供基于RESTful的WebService服務接口來進行遙控遙調(diào)操作,接口地址為http://IP地址:8085/services/rs。
主要通過采集通道序號、監(jiān)控對象編號、變量名和操作值來調(diào)用接口,其中遙調(diào)接口的操作值是整型,遙控接口的操作值是布爾型。
public interface RemoteSetting{
String yt(@QueryParam("channelIndex") int channelIndex,
@QueryParam("endCode") String endCode,
@QueryParam("varName") String varName,
@QueryParam("value") int value);
String yk(@QueryParam("channelIndex") int channelIndex,
@QueryParam("endCode") String endCode,
@QueryParam("varName") String varName,
@QueryParam("value") boolean value);
}
4 結語
本文設計的基于工業(yè)物聯(lián)網(wǎng)的數(shù)據(jù)采集軟件為工業(yè)領域提供了配置靈活、模板化、輕量級、性能穩(wěn)定的軟件解決方案,可廣泛應用于各類工業(yè)數(shù)據(jù)采集應用場景,在某些工業(yè)領域上通過定制和深入的開發(fā)可取代組態(tài)軟件進行數(shù)據(jù)采集與監(jiān)視控制工作,具有很好的推廣前景和應用價值。
參考文獻
[1] 張建雄,吳曉麗,楊震,等.基于工業(yè)物聯(lián)網(wǎng)的工業(yè)數(shù)據(jù)采集技術研究與應用[J].電信科學,2018,34(10):124-129.
[2] 馬平,季德亨,王智超.工業(yè)互聯(lián)網(wǎng)數(shù)據(jù)監(jiān)控系統(tǒng)架構的設計與實現(xiàn)[J].工業(yè)控制計算機,2019,32(8):7-9.
[3] 李君,邱君降,柳楊,等.工業(yè)互聯(lián)網(wǎng)平臺評價指標體系構建與應用研究[J].中國科技論壇,2018(12):70-86.
[4] 周劍,肖琳琳.工業(yè)互聯(lián)網(wǎng)平臺發(fā)展現(xiàn)狀、趨勢與對策[J].智慧中國,2017(12):56-58.