「直播回放」使用 PLC + OPC + TDengine,快速搭建菸草生產監測系統

TDengine發表於2023-11-01

在菸草工業場景裡,多數裝置的自動控制都是透過 PLC 可程式設計邏輯控制器來實現的,PLC 再將採集的資料匯聚至 OPC 伺服器。傳統的 PI System、實時資料庫、組態軟體等與 OPC 相連,提供分析、視覺化、報警等功能,這類系統存在一些問題:

  1. 收費是按照測點數進行的,價格昂貴,而且需要有商務談判才能開始 PoC,無法在購買決策前做足夠的驗證測試工作;
  2. 系統封閉,如果想整合一個新的 BI、AI 或視覺化工具,需要原廠商的支援,十分困難;
  3. 資料的實時分發、分享功能薄弱;
  4. 架構落後,往往基於 Windows,部署維護還十分複雜。

藉助 TDengine 3.0 雲服務或 TDengine Enterprise(企業版),上述問題便可迎刃而解。作為物聯網、工業大資料平臺,TDengine 內嵌對 OPC UA/DA、MQTT 等協議的支援。透過網頁上簡單的配置,無需一行程式碼,就能將 PLC 採集的資料透過 OPC 聯結器源源不斷的寫入 TDengine,再透過與視覺化工具 Grafana、BI 工具(如 Power BI、帆軟、永洪)的無縫整合,就可以提供資料的視覺化、報表、報警等系列功能。而且由於 TDengine 支援標準的 JDBC、ODBC 介面,眾多的 BI、AI 和報表工具都可以無縫整合,而不被廠商繫結。

同時,你可以使用 TDengine Cloud,無商務談判,免費註冊,幾分鐘內就可以搭建好整個系統,驗證是否工作,無任何前期費用和風險。如果驗證沒問題,可以繼續使用雲服務,也可以切換到 TDengine Enterprise 做本地化部署。對於雲服務,5 萬個測點,如果資料採集間隔是一秒,最基礎的 TDengine Cloud 入門級就可滿足要求,一個月僅需 1200 元。與傳統昂貴的工業軟體相比,大大降低了投入的成本。

本文以 TDengine Cloud 為例,介紹該方案在菸草制絲車間的具體實現。

在下面例子裡,我們將從 OPC Server 採集三個指標:冷床出口水分、計量秤工藝流量及烘絲出口溫度,並希望在視覺化介面實現以下功能:

  1. 實時監測數採完備率和線上狀態:避免資料採集出現異常時不能及時觀察到,導致長時間原始資料缺失
  2. 實時監測各指標值、變化趨勢曲線:及時掌握生產過程中關鍵指標的變化

本文中視覺化工具選擇了開源的 Grafana,你也可以使用國產的 BI 軟體來實現。這個方案也適用於 TDengine Enterprise 企業版。

1. TDengine Cloud OPC 接入介紹

為方便不同資料來源的接入,濤思打造了一套資料接入方案來接入各種不同型別的資料來源。它的核心功能元件是 taosExplorer(TDengine Cloud 為控制檯)、taosX Agent 及各類資料來源聯結器。TDengine 支援兩種 OPC 接入:OPC UA、OPC DA。

需要注意的是,TDengine Cloud 僅支援代理模式接入各類資料來源。TDengine Enterprise 則是直連、代理兩種連線模式均支援。

以某個工廠為例,它的資料中心部署在工廠內部(車間機房、工廠中心機房),各車間透過 OPC 向外提供的資料服務和資料中心處於同一內部網路,這種情況可採用直連模式。如果該工廠的資料中心部署在雲端(TDengine Cloud、共有云、上級集團私有云),且工廠與雲端之間沒有 VPN 連線時,這種情形可採用代理模式。

下面以 TDengine Cloud 雲服務+代理模式為例,介紹如何快速搭建 OPC UA+TDengine+Grafana 環境,實現工業 OPC 資料採集的視覺化。

2. 部署環境

本文的部署拓撲圖如下:

  • 本地 MacBook Pro,Grafana 部署在本機
  • taosX Agent 代理、OPC UA Simulation Server 部署在虛擬機器 vm1 上,Ubuntu 20.04
  • TDengine 採用 TDengine Cloud 雲服務入門版


Grafana 資料來源安裝

Grafana 安裝後,需要安裝 TDengine 的資料來源外掛,有兩種方式供選擇:

  • 在 Grafana Configuration – Datasource 頁面中,搜尋 TDengine,完成安裝【推薦】
  • 透過執行下面的命令完成該外掛安裝【以 Linux 為例】

bash -c "$(curl -fsSL )"


3. 配置OPC UA Server

為方便展示,本文將採用 PROSYS OPC UA Simulation Server 的功能,模擬生成 10 個雙精度點位的隨機數。

在 MacBook Pro 上,啟動 PROSYS OPC UA Simulation Server。

切換至 Objects 頁面,右鍵點選 Random:BaseDataVariableType,Duplicate Node 建立 10 個採集點位,均為雙精度浮點數。完成此步驟後,將生成節點地址 ns=3;i=1008~1017。

生成的點位預設隨機數範圍是 [-2,2],如需修改,可點選每個點位 Value 標籤進行設定。預設的數值生成間隔為 1000ms。

4. 建立代理並部署 taosX Agent

登入 TDengine Cloud 後進入控制檯,點選資料寫入->資料來源->建立新的代理

根據提示,在 vm1 上下載並部署 taosX Agent。

tar xf taosx-agent-xxx-linux-x64.tar.gz
cd taosx-agent-xxx-linux-x64
./install.sh

設定代理名稱:agent-vm1

獲得 Endpoint 和 token,將其複製、貼上至 vm1 上的 taosX Agent 的配置檔案中:/etc/taos/agent.toml

在 vm1 上啟動 taosX Agent:

systemctl start taosx-agent


5. 資料準備

在配置 OPC UA 採集任務之前,還有兩個準備工作需要完成:

  • 在 TDengine Cloud 建立 opcdemo 庫
  • 建立批次匯入用的採集點位 CSV 檔案

5.1 建立 opcdemo 庫

登入 TDengine Cloud 後進入控制檯,點選資料瀏覽器-> + 建立資料庫,輸入名稱 opcdemo、設定 CACHEMODEL 為 both 後,完成建立。

5.2 建立點位 CSV 檔案

為方便批次匯入採集點位,TDengine Cloud 提供了以 CSV 檔案批次匯入點位資訊的功能。

根據前面的 OPC UA Simulation Server 建立的 10 個點位資訊,建立 CSV 檔案。

檔案填寫說明:

  • point_id: OPC 點位地址
  • tbname: 該點位地址對應 TDengine 中的子表名
  • type: 該點位地址值的資料型別,對應普通列 val。常見的資料型別有 int/bigint/float/double/varchar/nchar/bool,其中 varchar/ncahr 需給出最大允許長度,如 varchar(50)/nchar(50)
  • stable: 子表所屬的超級表名
  • 時間戳列:
    • ts_col: OPC 原始採集時間戳的列名,預設 ts,預設為首列時間戳
    • received_ts_col: 【可選】TDengine 接收時間戳對應的列名
    • 一旦配置了 received_ts_col 列,該列將取代 ts_col 成為首列時間戳,ts_col 列將做為普通列保留
  • 普通列:
    • val 列:存放採集值,型別由使用者定義,本文中型別為 double
    • quality 列:質量資訊,INT 型,系統預設自動建立
  • tag:: 標籤列定義,以 tag::nchar(10)::unit為例,將建立一個名為 unit,型別為 nchar(10) 的標籤列。需要說明的是,每張超級表預設建立兩個標籤列:point_id VARCHAR(256), point_name VARCHAR(256)
資訊點編碼,OPC TAG點地址,資料型別,對應超級表表名,OPC原始時間列名,標籤列1
tbname,point_id,type,stable,ts_col,tag::nchar(10)::unit
d_1008,ns=3;i=1008,double,stb_double,ts,%H
d_1009,ns=3;i=1009,double,stb_double,ts,kg/h
d_1010,ns=3;i=1010,double,stb_double,ts,℃
d_1011,ns=3;i=1011,double,stb_double,ts,%H
d_1012,ns=3;i=1012,double,stb_double,ts,kg/h
d_1013,ns=3;i=1013,double,stb_double,ts,℃
d_1014,ns=3;i=1014,double,stb_double,ts,%H
d_1015,ns=3;i=1015,double,stb_double,ts,kg/h
d_1016,ns=3;i=1016,double,stb_double,ts,℃
d_1017,ns=3;i=1017,double,stb_double,ts,℃

以上 CSV 檔案成功匯入後,將在 TDengine 中在指定的庫中(本文為 opcdemo)建立一張名為 stb_double 的超級表,並以之為模板建立 10 張子表,名為 d_1008/d_1009…/d_1017。

taos> desc stb_double;
             field              |          type          |   length    |    note    |
=====================================================================================
 ts                             | TIMESTAMP              |           8 |            |
 quality                        | INT                    |           4 |            |
 val                            | DOUBLE                 |           8 |            |
 point_id                       | VARCHAR                |         256 | TAG        |
 point_name                     | VARCHAR                |         256 | TAG        |
 unit                           | NCHAR                  |          10 | TAG        |
Query OK, 6 row(s) in set (0.008236s)

6. 建立資料採集任務

登入控制檯,點選資料寫入->資料來源->新增資料來源

填寫資料來源名稱,選擇型別:OPC-UA,代理選剛新建的代理 agent-vm1,目標資料庫 opcdemo,輸入 OPC UA Server 的服務地址。

本文代理模式下,OPC UA Server 部署在vm1上,服務地址填寫 127.0.0.1 即可,埠號及詳細資訊參見 PROSYS Simulation Server 的 Status 頁面。

點選“選擇檔案”按鈕,進入 CSV 檔案匯入介面。

採集間隔設定為 1 秒,採集模式設定為 observe。

本次 CSV 共採集 10 個點位,為最佳化寫入效能,將批次大小調整為 10。如有必要,可選擇開啟 Debug 日誌。

7. 資料採集驗證

登入控制檯,點選資料瀏覽器->Sql,執行多次最新資料查詢語句,觀察查詢結果。如結果行時間戳單調遞增,則表示資料採集鏈路工作正常,資料已正常入庫了。

select last_row(*) from opcdemo.stb_double;

8. 資料視覺化

Grafana 部署在本地 MacBook Pro 上,希望訪問雲服務上的 TDengine 例項中的 opcdemo 庫的資料。根據雲服務控制檯【工具-Grafana】頁面的指引,填入 Host、Cloud Token,刪除 User、Password,儲存退出。

選擇 Import Dashboard,點選 Upload JSON file 匯入 OPCDemo.json 檔案,選擇對應的 TDengine 的 DataSource,完成 Dashboard 匯入。

點選 OPC Demo Dashboard,開啟該儀表板,可以觀察到實時資料的變化。

9. OPC Demo Dashboard 使用說明

該儀表盤可以選擇三個物理量作為監控物件:metric01、metric02、metric03,分別對應:冷床出口水分、工藝流量、烘絲出口溫度,位於第一行,可透過下拉框選擇;使用者可設定裝置離線閾值 offline_threshold(單位:秒),透過下拉框選擇。

首行三個控制元件,分別是 metric01 的分鐘級數採完備率、整體數採完備率以及線上狀態。

在菸草生產行業,資料採集是否有缺漏,是企業資料運營管理的基礎。在本文中我們提出兩個指標來衡量數採完備:分鐘級數採完備率、整體數採完備率。

9.1 分鐘級數採完備率

演算法說明:以一分鐘劃分時間視窗,分段計算當前時間區間(最近 5/15/30 分鐘…)內 metric01 物理量採集點數除以 60 後的比值 – 預設資料生成間隔為 1000ms,即 1 秒。

select _wstart, count(*)/60 from opcdemo.$metric01 where _c0 >= $from and _c0 < $to interval(1m) limit 100 offset 1

9.2 整體數採完備率

演算法說明:計算 metric01 物理量採集點數除以當前時間區間內秒級跨度的比值,spread 計算的時間值單位與 opcdemo 庫的 precision 一致,預設為 ms。

select count(*)/(spread(_c0 )/1000+1) from opcdemo.$metric01 where _c0 >= $from and _c0 < $to

9.3 線上狀態

裝置是否按設計要求及時上報資料,可透過線上狀態的監測來實現。如在指定時間閾值內無採集資料到達,顯示紅色 offline 以示警。

演算法說明:判斷 metric01 物理量在指定離線閾值內是否有資料入庫,如有則判 Online,否則判 Offline。

select count(*) from (select last_row(*) from opcdemo.$metric01 where _c0 >= now-$offline_thresholds)

三個 Gauge 儀表表頭控制元件,用於顯示烘絲出口水分、工藝流量、烘絲出口溫度的最新值。

select last_row(val) from opcdemo.$metric01

三個 TimeSeries 曲線控制元件,用於顯示烘絲出口水分、工藝流量、烘絲出口溫度在當前時間區間內的動態曲線,顯示值為動態時間視窗內採集值的算術平均值。

select _wstart, avg(val) from opcdemo.$metric01 where _c0 >= $from and _c0 < $to interval($interval) fill(null)

以上以制絲車間的幾個典型引數為例,介紹瞭如何利用 TDengine 的 OPC 聯結器,將資料採集入庫,並透過 Grafana 將這些引數以動態視覺化方式直觀地呈現出來。

掌握了以上基本語法,大家可以舉一反三,結合自己的實際業務要求,不用寫一行程式碼,就可以輕鬆地定製自己專屬的 Grafana Dashboard,進行實時採集資料監控了。

10. 開發實時業務應用

前面闡述瞭如何基於 TDengine 實現 OPC 數採接入、持久化,以及基於 Grafana 方便地實現實時資料的視覺化。估計會有讀者想更進一步瞭解如何基於 TDengine 來開發實時業務應用,如 SPC 統計過程控制能否方便地實現呢?

下面我們簡單介紹一下,如何利用 TDengine 來開發 SPC 實時業務應用。

SPC:統計過程控制是工業界廣泛使用的質量分析工具,它採用統計技術對生產過程的某個物理量進行實時監控計算,快速識別出生產過程中產品質量的隨機波動與異常波動,對生產過程的異常趨勢提出預警,以便生產管理人員及時採取措施,消除異常,恢復過程的穩定,從而達到提高和控制質量的目的。

SPC 的第一步是計算標準差。TDengine 提供 stddev 標準差函式,方便使用者快速從時序資料算得標準差 σ。

透過實時查詢可獲取指定時間段的時序資料,再透過 TDengine 內嵌函式即可直接算得:均值 μ(avg)、最大(max)、最小(min)、跨距(spread)。

結合前面算得的標準差 σ、該物理量設計的合格上下限範圍 USL-LSL、目標值 T,可算得 SPC 各過程引數:Cp/Cr/Cpu/Cpl/Cpk/Cpm/Pp/Pr/Ppu/Ppl/Ppk/Ppm。

TDengine 提供各種主流程式語言如 C/C++、Java、Go、RUST、Python、C# 的驅動程式,也提供 RESTful 介面,支援 SQL 語法,因此應用開發的學習成本幾乎為零,十分簡單。

11. 總結

很多使用者對於如何快速、便捷呈現工業現場的實時時序資料比較畏懼,覺得需要耗費大量人力進行應用開發才能實現,影響了時序資料快速有效的利用。其實,和 IT 運維採用 Telegraf+TDengine+Grafana 一樣,菸草生產企業可以非常方便地利用 TDengine 的 OPC 接入能力,透過搭建 OPC+TDengine+Grafana 方案,快速實現低程式碼的業務資料監控。

需要說明的是,本文的例子是一較簡單的場景:taosX Agent 代理和 OPC UA Server 部署在同一節點上。其他的場景可以從這個場景中演變而來,如:

  • taosX Agent 與 OPC UA Server 分別部署在不同節點上
  • 部署多個 taosX Agent,每個 Agent 對接多個 OPC UA Server

實際部署拓撲都可以按需規劃、實施,取決於您實際的部署需求。

TDengine 不僅支援 OPC,也支援 MQTT, PI System, Wonderware 等資料來源的無縫接入,受篇幅所限本文不多做介紹,僅分享基於 TDengine Cloud 提供 OPC+TDengine+Grafana 方案的具體實現。這套方案同樣可以基於 TDengine Enterprise 企業版來實現,如果您有這樣的需求,請聯絡北京濤思商務團隊獲取相關資源。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014783/viewspace-2992307/,如需轉載,請註明出處,否則將追究法律責任。

相關文章