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