?

工業物聯網環境下設備數據采集研究與實現

2020-01-07 08:07歐陽旻郭玉超王桓王志兵
軟件工程 2020年12期
關鍵詞:數據采集

歐陽旻 郭玉超 王桓 王志兵

摘 ?要:數據的采集和云端存儲是工業物聯網的重要應用,文章介紹了利用Modbus工業總線協議進行數據采集的方法,開發了基于Go語言的數據采集系統,解決工業設備海量數據的采集和存儲問題,該系統使工業數據的采集不依賴于網關等特定硬件設備,減少了企業進行智能化改造的成本,數據可視化的呈現也為企業進行生產優化和決策提供了依據。

關鍵詞:工業物聯網;Go語言;數據采集

中圖分類號:TP399 ? ? 文獻標識碼:A

Abstract: Data acquisition and cloud storage are important applications of industrial Internet of things. This paper introduces method of data acquisition using Modbus industrial bus protocol, and proposes a data acquisition system based on Go language to solve the problem of acquisition and storage of massive data of industrial devices. This system not only makes acquisition of industrial data independent of gateway and other specific hardware devices, but also reduces the cost of intelligent transformation of enterprises. Visualization of data also provides a basis for enterprises to optimize production and make decisions.

Keywords: industrial Internet of things; Go language; date acquisition

1 ? 引言(Introduction)

隨著工業物聯網的發展,工業設備的智能化程度越來越高,然而設備的通訊受限于不同設備的物理鏈路、各種不同的協議,因此大多數數據不能互聯互通。同時,現有的SQL(Structured Query Language)數據庫也很難適應工業物聯網中時間序列數據的存儲特點,使得數據的存儲和查詢效率很低。工業物聯網主要集中在生產和服務方面的應用,往往會涉及能源、交通、工業控制等質量較高的設備和資產,對運行安全提出了更高的要求[1,2]。文章介紹了一種新型的利用Modbus工業總線現場協議[3-5]進行數據采集的方法,實現了在云端對邊緣設備進行數據采集的功能。借助這種方法,工業數據的采集可以不依賴于具體硬件網關,減少使用成本,對于企業及時參與工業物聯網的發展有一定的啟示意義。

2 ? 背景(Background)

目前,國內外廠商對于工業物聯網數據采集[6]措施,主要有兩種方案。一是利用嵌入式工業網關接入工業現場,或通過以太網,或通過串口,或通過OPC(OLE for Process Control)服務器等介質進行數據采集。這種方式需要購買廠商的硬件設備,往往價格高昂,并且與設備廠商的平臺進行強綁定,不利于用戶開發,難以滿足個性化和定制化需求。優點是對于要求不多的客戶,使用省心,不需要考慮很多,并且售后服務比較有保障。二是利用數據傳輸單元DTU(Data Terminal Unit)進行透明傳輸,將現場設備接入廠商云端,通過Socket方式實現數據采集。這種方式不需要購買或替換廠商的硬件網關,能直接利用用戶已有的設備,減少了硬件成本開銷。缺點是云服務價格取決于廠商,用戶的話語權減弱,且遷移數據受限制。

3 ? 需求及解決方案(Requirements and solutions)

該系統主要實現在云端[7]對邊緣設備進行采集的功能,同時進行可視化的呈現。國內做數據采集工業網關的廠家非常多,證明這個技術方向有一定的研究價值。本采集系統使用Modbus+MQTT+InfluxDB的技術方案,經過驗證,技術上具有一定的可行性,可以滿足用戶的數據采集需求。

3.1 ? 數據采集

用戶使用本數據采集系統時,首要的需求便是采集現場數據。這要求系統能夠支持用戶設備的通信協議[8]。經過分析研究,Modbus TCP(Modbus Transmission Control Protocol)與Modbus RTU(Modbus Remote Terminal Unit)協議已經能夠滿足用戶的基礎需求。另外,為了支持一些原始的串口協議,系統也加入了對于DTU透傳模塊的支持,經過正確配置后也可以通過DTU模塊讀取下屬設備的數據。只有對協議的支持是遠遠不夠的。為了能夠方便用戶的操作配置,系統的配置文件一定要清晰明了,不使用戶感到迷惑。因此系統選用的JSON格式作為配置格式,既方便用戶閱讀和修改配置,也便于程序讀取和解析。

3.2 ? 數據存儲

在滿足用戶的采集需求后,另一個問題便是數據存儲問題。由于時序數據的天然特殊性,SQL類數據庫并不適合存儲該類數據。因此本系統選用時序數據庫中性能較為優異的InfluxDB數據庫作為存儲方案,為如何收集數據,如何存儲數據,如何處理和監視數據,以及如何可視化數據提出了合適的解決方案。另外,系統還提供了備選方案,如存儲到MQTT(Message Queuing Telemetry Transport)中,后面接入消息隊列,可以進一步處理;用戶也可以選擇直接存入云廠商數據庫,例如,百度云天工TSDB數據庫。

3.3 ? 數據可視化

用戶對于數據的分析和處理有著強烈的需求。例如,用戶想要知道某臺設備數據的波動情況,來判斷這臺設備是否穩定;或者根據數據的趨勢來對后續數據的情況進行預測分析;這些都要求系統能夠對數據進行可視化展示,或者對數據轉發至具有可視化能力的平臺中。為解決這個問題,系統提供多種方案,如Chronograf展示或Grafana展示,也可以借助百度云天工的物可視進行展示。

4 ? 系統設計(System design)

本系統使用的開發軟件為Jetbrains Goland,使用GO語言作為開發語言。系統采用Modbus作為數據采集的協議,MQTT作為配置文件下發和數據存儲方案,InfluxDB和OpenTSDB作為時序數據庫進行存儲,用GO(Golang)語言進行代碼編寫,JSON(JavaScript Object Notation)協議作為配置文件和API(Application Programming Interface)交互的格式,使用Docker容器虛擬化平臺進行系統的整體部署和安裝。系統整體框架可分為三部分:主函數模塊、采集驅動模塊、存儲驅動模塊。

4.1 ? ?主函數模塊

主函數模塊為該模塊程序的入口。程序主要執行的動作有:加載配置文件、加載存儲驅動、加載采集驅動、開始采集任務、注冊系統監聽事件、阻塞主函數等待等。程序執行的流程為:首先從JSON文件中讀取并加載配置文件,然后將存儲模塊的配置文件交給存儲模塊去加載,將采集模塊的配置交給采集模塊去加載。待加載完成后,循環遍歷驅動字典,為每個采集驅動實例開辟線程,并開始采集任務。接著,程序注冊了對于系統的監聽事件,當按下鍵盤停止程序時,程序會循環遍歷驅動字典并停止每個驅動實例。此外,程序還在主線程中一直循環等待阻塞,使得其他采集線程能一直執行。主函數模塊流程圖如圖1所示。

主函數模塊代碼如下:

func main() {

config := loadConfig()

S := drivers.NewStorage(config.Info.Storage)

driverMap := drivers.NewDriver(config.Info.Gateway, S)

for k := range driverMap {

driver := driverMap[k]

go driver.Start()

}

監聽系統事件,有停止信號時關閉程序并銷毀資源。

var stopLock sync.Mutex

stop := false

stopChan := make(chan struct{}, 1)

signalChan := make(chan os.Signal, 1)

go func() {

<-signalChan

stopLock.Lock()

stop = true

stopLock.Unlock()

log.Println("Cleaning before stop...")

程序終止之前,先要關閉所有正在運行的任務,并銷毀對應的資源。

for k := range driverMap {

driver := driverMap[k]

go driver.Stop()

}

stopChan <- struct{}{}

os.Exit(0)

}()

signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)

使用select一直阻塞主程序,等待其他函數執行,或者等待中斷信號發送select {}。

4.2 ? 采集驅動模塊

該模塊是程序的核心,該模塊程序主要執行的動作有:解析存儲配置、生成采集驅動、調度采集程序、開始和停止采集任務、校驗數據類型、轉換數據格式、監聽網絡端口等。程序執行的流程是:首先解析配置文件,判斷每個驅動的采集協議,根據不同協議生成對應的采集驅動,然后開始采集。采集時,如果協議是Modbus,首先判斷函數功能碼,然后去調用對應的函數。采集到的結果是原始值,與用戶的需求值不相吻合。因此調用轉換函數。轉換函數首先判斷傳進來的采集結果是否為空,為空則直接返回。如果采集到的數據不為空,首先判斷采集點表中數據類型是否正確。如果正確,利用反射機制調用對應轉換函數,將傳進來的原始值轉換為對應的需求值。如果協議是原始串口類型,則啟動網絡監聽程序,等待客戶端連接。如果有客戶端請求連接,判斷客戶端合法性,合法則接受客戶端連接,否則拒絕。服務器校驗通過并接受連接后,程序發送采集指令到客戶端,等待客戶端返回結果,然后同樣的將數據進行轉換操作后返回。采集驅動模塊流程圖如圖2所示。

4.3 ? 存儲驅動模塊

這一部分是程序的結尾部分,也是程序向上傳輸的通道。當每個采集驅動采集到數據并轉換完成后,都會調用存儲模塊,對數據進行寫入。存儲驅動的流程是:獲取到數據后,根據對應的存儲驅動啟用與否,調用對應的存儲函數進行寫入,可以是寫入數據庫,也可以是發送到MQTT的Topic里面去。數據發送后,如果失敗則打印相應的日志,如果成功,返回并進行下一次數據的發送。

5 ? 系統實現(System implementation)

系統使用Go語言編寫,在Goland里面添加Docker遠程部署,鏈接到服務器,點擊運行即可將系統部署到服務器。開發中需要使用的代碼文件和用途描繪如表1所示。

系統使用Docker部署。需要編寫Dockerfile和entrypoint.sh代碼。Dockerfile代碼內容如下:

FROM alpine:latest

MAINTAINER GuoYuchao

ENV LANG C.UTF-8

WORKDIR /root/

COPY ./bin bin

COPY ./entrypoint.sh entrypoint.sh

ENTRYPOINT ./entrypoint.sh

entrypoint.sh代碼內容如下:

#!/bin/sh

cd ~/bin/ || exit

./linux_amd64 &

status=$?

if [ $status -ne 0 ]; then

exit $status

fi

while true ; do

sleep 1

done

在Goland里面添加Docker遠程部署配置,連接到服務器,點擊運行即可將本系統部署到服務器。部署完后進行系統測試,先查看服務器是否存在在Docker容器中,顯示系統已經成功部署,如圖4所示。

部署成功后進行數據采集結果測試、數據存儲測試,以及數據可視化測試。先看采集程序是否采集到了數據,接著檢查InfluxDB和OPEN TSDB數據庫,再檢查數據是否正確的發送到了數據庫中,最后檢查TSDB數據可視化,數據可視化結果如圖5所示。

6 ? 結論(Conclusion)

本系統解決了傳統的數據采集系統使用C語言和一些單片機產品組合開發存在的開發效率低下,產品價格昂貴,部署、維護難度高花費大等缺點,實現了數據采集、數據存儲、數據可視化的功能,滿足了工業物聯網環境下企業對數據采集和智能化生產的需求,借助這種方法,工業數據的采集可以不依賴于具體的硬件網關,減少了企業智能化改造的成本,同時數據可視化的呈現為企業進行生產優化和決策提供了依據,助力企業智能化的發展。

參考文獻(References)

[1] 王鵬.基于Modbus協議的數據采集系統的研究[D].合肥工業大學,2019:6-7.

[2] Y. Peng, P. Liu, T. Fu. Performance analysis of edge-PLCs enabled Industrial internet of things[J]. Peer-to-Peer Networking and Applications, 2020,13(5):1830-1838.

[3] 何建忠.基于MODBUS協議的工業網關設計與實現[D].內蒙古大學,2013:5-10.

[4] 劉立博,丁茹.基于Modbus協議的臺達DVP系列PLC位姿監控功能擴展[J].中國設備工程,2020(21):184-186.

[5] 閻坤.基于JAVA實現的Modbus通訊模塊在溫測系統中的應用[J].工業控制計算機,2019(11):33-36.

[6] 劉金.大規模集群狀態時序數據采集、存儲與分析[D].北京郵電大學,2018:3-4.

[7] 王妙瓊,魏凱,姜春宇.工業互聯網中時序數據處理面臨的新挑戰[J].信息通信技術與政策,2019,5:4-9.

[8] 胡存,駱德漢,童懷.基于Modbus與MQTT融合工業能耗網關系統設計[J].物聯網技術,2019,9(04):49-54.

作者簡介:

歐陽旻(1975-),男,碩士,講師.研究領域:軟件開發,網絡技術.

郭玉超(1998-), 男,本科生.研究領域:軟件開發,網絡技術.

王 ?桓(1980-),男,博士,副教授.研究領域:工業時間序列預測及非線性系統分析.

王志兵(1974-),男,碩士,副教授.研究領域:大數據,軟件工程.

猜你喜歡
數據采集
Web網絡大數據分類系統的設計與改進
CAN總線通信技術在電梯監控系統中的應用
基于大型嵌入式系統的污水檢測系統設計
基于AVR單片機的SPI接口設計與實現
CS5463在植栽用電子鎮流器老化監控系統中的應用
大數據時代高校數據管理的思考
基于開源系統的綜合業務數據采集系統的開發研究
大數據時代的管理會計
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合