「直播回放」使用 PLC + OPC + TDengine,快速搭建菸草生產監測系統
在菸草工業場景裡,多數裝置的自動控制都是透過 PLC 可程式設計邏輯控制器來實現的,PLC 再將採集的資料匯聚至 OPC 伺服器。傳統的 PI System、實時資料庫、組態軟體等與 OPC 相連,提供分析、視覺化、報警等功能,這類系統存在一些問題:
- 收費是按照測點數進行的,價格昂貴,而且需要有商務談判才能開始 PoC,無法在購買決策前做足夠的驗證測試工作;
- 系統封閉,如果想整合一個新的 BI、AI 或視覺化工具,需要原廠商的支援,十分困難;
- 資料的實時分發、分享功能薄弱;
- 架構落後,往往基於 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 採集三個指標:冷床出口水分、計量秤工藝流量及烘絲出口溫度,並希望在視覺化介面實現以下功能:
- 實時監測數採完備率和線上狀態:避免資料採集出現異常時不能及時觀察到,導致長時間原始資料缺失
- 實時監測各指標值、變化趨勢曲線:及時掌握生產過程中關鍵指標的變化
本文中視覺化工具選擇了開源的 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 安全生產勞保穿戴監測系統
- PLC快速聯網,實現裝置遠端監測管理
- 使用docker快速搭建Permeate滲透測試系統實踐Docker
- 基於工業物聯網的中藥生產過程監控和故障監測系統
- grafana+prometheus快速搭建MySql監控系統實踐GrafanaPrometheusMySql
- 生產經營監控系統指標體系的梳理指標
- 生產系統恢復到異機測試
- docker-compose快速搭建 Prometheus+Grafana監控系統DockerPrometheusGrafana
- 直播間截留監控系統
- 生產區域人數超員監控報警系統
- 工廠園區能耗監測系統開發方案,線上監測平臺搭建
- 能源管控系統開發解決方案,線上監測系統搭建
- ubuntu搭建nodejs生產環境——快速部署手冊UbuntuNodeJS
- 直播系統程式碼,點選產生動畫效果並移動的特效動畫特效
- 能耗監測管控系統開發解決方案,能源線上監測網站搭建網站
- 基於施耐德PLC的水位測控系統如何實現遠端監控上下載
- 基於PLC智慧閘道器的智慧立體倉庫實時監測系統
- 在k8s中快速搭建基於Prometheus監控系統K8SPrometheus
- 個人如何搭建專屬直播系統!
- 語音直播系統原始碼開發語音直播系統部署搭建原始碼
- 產品的生態系統
- python搭建系統監控Python
- Nagios監控系統搭建iOS
- 搭建完美的監控系統
- 重點高耗能企業能耗監測管理系統開發,線上監測平臺搭建
- 履約產品:產品體系&履約監控產品搭建
- 能源線上監測系統開發方案,工廠節能減排系統搭建
- 工廠能源管控系統開發解決方案,線上監測系統搭建
- 愛奇藝直播-打造高效的特效資源生產體系特效
- Redis快速產生測試資料的三種方法Redis
- 短影片直播APP系統:成品原始碼開發快速搭建部署平臺APP原始碼
- 水電錶監測系統能源能耗節能平臺搭建
- 淺談水電站閘門PLC遠端監控系統
- 教育直播授課教育系統搭建
- 能源管控系統開發,重點高耗能企業線上監測系統搭建
- 文化媒體系統如何快速搭建
- 前端監控系統Sentry搭建前端
- 搭建前端錯誤監控系統前端