• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    工業(yè)物聯(lián)網(wǎng)環(huán)境下設(shè)備數(shù)據(jù)采集研究與實現(xiàn)

    2020-01-07 08:07:43歐陽旻郭玉超王桓王志兵
    軟件工程 2020年12期
    關(guān)鍵詞:數(shù)據(jù)采集

    歐陽旻 郭玉超 王桓 王志兵

    摘 ?要:數(shù)據(jù)的采集和云端存儲是工業(yè)物聯(lián)網(wǎng)的重要應(yīng)用,文章介紹了利用Modbus工業(yè)總線協(xié)議進行數(shù)據(jù)采集的方法,開發(fā)了基于Go語言的數(shù)據(jù)采集系統(tǒng),解決工業(yè)設(shè)備海量數(shù)據(jù)的采集和存儲問題,該系統(tǒng)使工業(yè)數(shù)據(jù)的采集不依賴于網(wǎng)關(guān)等特定硬件設(shè)備,減少了企業(yè)進行智能化改造的成本,數(shù)據(jù)可視化的呈現(xiàn)也為企業(yè)進行生產(chǎn)優(yōu)化和決策提供了依據(jù)。

    關(guān)鍵詞:工業(yè)物聯(lián)網(wǎng);Go語言;數(shù)據(jù)采集

    中圖分類號: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)

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

    2 ? 背景(Background)

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

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

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

    3.1 ? 數(shù)據(jù)采集

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

    3.2 ? 數(shù)據(jù)存儲

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

    3.3 ? 數(shù)據(jù)可視化

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

    4 ? 系統(tǒng)設(shè)計(System design)

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

    4.1 ? ?主函數(shù)模塊

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

    主函數(shù)模塊代碼如下:

    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()

    }

    監(jiān)聽系統(tǒng)事件,有停止信號時關(guān)閉程序并銷毀資源。

    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...")

    程序終止之前,先要關(guān)閉所有正在運行的任務(wù),并銷毀對應(yīng)的資源。

    for k := range driverMap {

    driver := driverMap[k]

    go driver.Stop()

    }

    stopChan <- struct{}{}

    os.Exit(0)

    }()

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

    使用select一直阻塞主程序,等待其他函數(shù)執(zhí)行,或者等待中斷信號發(fā)送select {}。

    4.2 ? 采集驅(qū)動模塊

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

    4.3 ? 存儲驅(qū)動模塊

    這一部分是程序的結(jié)尾部分,也是程序向上傳輸?shù)耐ǖ?。當每個采集驅(qū)動采集到數(shù)據(jù)并轉(zhuǎn)換完成后,都會調(diào)用存儲模塊,對數(shù)據(jù)進行寫入。存儲驅(qū)動的流程是:獲取到數(shù)據(jù)后,根據(jù)對應(yīng)的存儲驅(qū)動啟用與否,調(diào)用對應(yīng)的存儲函數(shù)進行寫入,可以是寫入數(shù)據(jù)庫,也可以是發(fā)送到MQTT的Topic里面去。數(shù)據(jù)發(fā)送后,如果失敗則打印相應(yīng)的日志,如果成功,返回并進行下一次數(shù)據(jù)的發(fā)送。

    5 ? 系統(tǒng)實現(xiàn)(System implementation)

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

    系統(tǒng)使用Docker部署。需要編寫Dockerfile和entrypoint.sh代碼。Dockerfile代碼內(nèi)容如下:

    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代碼內(nèi)容如下:

    #!/bin/sh

    cd ~/bin/ || exit

    ./linux_amd64 &

    status=$?

    if [ $status -ne 0 ]; then

    exit $status

    fi

    while true ; do

    sleep 1

    done

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

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

    6 ? 結(jié)論(Conclusion)

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

    參考文獻(References)

    [1] 王鵬.基于Modbus協(xié)議的數(shù)據(jù)采集系統(tǒng)的研究[D].合肥工業(yè)大學,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協(xié)議的工業(yè)網(wǎng)關(guān)設(shè)計與實現(xiàn)[D].內(nèi)蒙古大學,2013:5-10.

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

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

    [6] 劉金.大規(guī)模集群狀態(tài)時序數(shù)據(jù)采集、存儲與分析[D].北京郵電大學,2018:3-4.

    [7] 王妙瓊,魏凱,姜春宇.工業(yè)互聯(lián)網(wǎng)中時序數(shù)據(jù)處理面臨的新挑戰(zhàn)[J].信息通信技術(shù)與政策,2019,5:4-9.

    [8] 胡存,駱德漢,童懷.基于Modbus與MQTT融合工業(yè)能耗網(wǎng)關(guān)系統(tǒng)設(shè)計[J].物聯(lián)網(wǎng)技術(shù),2019,9(04):49-54.

    作者簡介:

    歐陽旻(1975-),男,碩士,講師.研究領(lǐng)域:軟件開發(fā),網(wǎng)絡(luò)技術(shù).

    郭玉超(1998-), 男,本科生.研究領(lǐng)域:軟件開發(fā),網(wǎng)絡(luò)技術(shù).

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

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

    猜你喜歡
    數(shù)據(jù)采集
    Web網(wǎng)絡(luò)大數(shù)據(jù)分類系統(tǒng)的設(shè)計與改進
    CAN總線通信技術(shù)在電梯監(jiān)控系統(tǒng)中的應(yīng)用
    基于大型嵌入式系統(tǒng)的污水檢測系統(tǒng)設(shè)計
    社會保障一卡通數(shù)據(jù)采集與整理技巧
    基于AVR單片機的SPI接口設(shè)計與實現(xiàn)
    CS5463在植栽用電子鎮(zhèn)流器老化監(jiān)控系統(tǒng)中的應(yīng)用
    大數(shù)據(jù)時代高校數(shù)據(jù)管理的思考
    科技視界(2016年18期)2016-11-03 22:51:40
    鐵路客流時空分布研究綜述
    基于廣播模式的數(shù)據(jù)實時采集與處理系統(tǒng)
    軟件工程(2016年8期)2016-10-25 15:54:18
    通用Web表單數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn)
    軟件工程(2016年8期)2016-10-25 15:52:53
    淳化县| 茌平县| 始兴县| 垣曲县| 望奎县| 临西县| 玛沁县| 丹寨县| 青田县| 新竹市| 郴州市| 大邑县| 阿拉善左旗| 革吉县| 柳林县| 浠水县| 玉山县| 乃东县| 肥乡县| 绥滨县| 邹城市| 天全县| 行唐县| 和龙市| 宿松县| 鹿邑县| 长葛市| 赣榆县| 竹山县| 化德县| 福建省| 册亨县| 九寨沟县| 皋兰县| 沙坪坝区| 南江县| 彭阳县| 海晏县| 安化县| 巴青县| 太康县|