趙磊


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