TDengine在圖撲工業物聯網監控平臺中的應用

應用場景

在物聯網、工業互聯網領域,任何一個項目的實現都離不開兩部分:數據和展示。

對於工業生產監測數據的展示,圖撲已經積累了很成熟的基於HTML5的2D、3D數據可視化技術,提供了一套所見即所得的WEB圖形組態編輯器,包含豐富的圖表展示方式。客戶可以使用圖撲提供的IoT Platform快速的搭建私有云,非常便捷的建立起物聯網和工業互聯網的WEB SCADA,實現邊緣計算和海量數據的展示。

針對海量的設備上報數據,我們在做實時顯示的同時還考慮將歷史數據也進行無損保存,並在IoT Platform上給用戶提供數據查詢的支持。但這就對底層的時序數據存儲提出了相當高的要求。在對比了包括InfluxDB在內的幾個數據庫後,在最新的解決方中,我們選用了TDengine作爲時序數據的存儲引擎。TDengine是濤思數據推出的一款開源的專爲物聯網、車聯網、工業互聯網、IT運維等場景設計和優化的超高性能時序數據庫,本身還提供緩存、數據訂閱、流式計算等功能,最大程度減少研發和運維的複雜度。

圖撲的IoT Platform可以支持設備的接入,架構示意圖如下。

實際應用案例-中央水機監測系統

以山東大禹水處理有限公司中央水機監控項目爲例,我們來介紹在圖撲物聯網雲平臺上集成使用TDengine的思路。每個中央水機設備採集與下發控制的數據包含:進水流量、產水PH、產水電導、膜前壓力、濃水壓力、產水流量、開機沖洗時間設置、總計時間、停機沖洗時間設置、原水泵、高壓泵、進水閥、濃排閥、紫外線、迴流閥、恢復、手自動切換、產水率、產水液位、多介質返洗、活性炭返洗、原水液位等。平臺通過堅實可靠的連接多臺網關控制多臺PLC設備,實時監測這些指標、管理設備並進行實時報警,達到水務治理的目的。

現場的傳感器主要包括溫度、壓力、流量等採集設備,現場的執行器主要包括電機、電磁閥控制的開關等,PLC通過DI/DO、AI/AO實現傳感器信息的採集和執行器動作的控制。PLC設備與MQTT網關之間採用Modbus/TCP協議通訊,MQTT網關獲取採集到的PLC設備數據後再通過MQTT協議轉發到雲端物聯網平臺。平臺接收到 MQTT 網關推送的數據後,會先根據用戶配置的存儲策略將數據寫入到TDengine中。用戶通過瀏覽器訪問圖形組態畫面可以實時接收平臺的數據推送,並以直觀的方式查看組態畫面的變化,實現對中央水機設備的圖形化監測。平臺上可設立多個項目,一臺服務器可多個項目共存。

受益於TDengine的超高性能和超小體量,整個平臺架構變得簡化,解決工業物聯網監控分析系統開發成本高、週期長、運維難度大等痛點。

以schemaless方式使用TDengine

創建數據庫iot_datas,數據的保持時間爲365天,過期的數據將會被成塊刪除:


 
  1. CREATE DATABASE IF NOT EXISTS iot_datas KEEP 365

超級表iot_meters用於存儲設備的數據信息創建超級表的語句如下:


 
  1. CREATE TABLE iot_meters (ts timestamp, value double) TAGS(device_id binary(20), point_id binary(20));

此時可使用自動建表語法來實現寫入數據時,用超級表定義的表結構自動創建不存在的子表,若該表已存在則不會建立新表。自動建表語法跟insert/import語法非常相似,唯一區別是語句中增加了超級表和標籤信息。

假設有 1 個設備 meter_001,設備下有 1 路溫度 temp 和 1 路溼度 humi,我們可以採用寫入數據自動建表的方法:


 
  1. INSERT INTO iot_datas.meter_001_humi USING iot_datas.iot_meters TAGS ('meter_001', 'humi') VALUES ('2018-01-01 00:00:00.000',95);
  2. ​INSERT INTO iot_datas.meter_001_temp USING iot_datas.iot_meters TAGS ('meter_001', 'temp') VALUES ('2018-01-01 00:00:00.000',20);

注意:自動建表語句只能自動建立子表而不能建立超級表,這就要求超級表已經被事先定義好。這裏實現schemaless的方式就是將超級表定義成一個單值模型,也即每條記錄爲:時間戳+採集值。在超級表的標籤列中,要定義出設備ID、點位ID甚至點位物理量名稱、點位分組等信息。這樣同一設備不同點位的數據上報後,可以通過自動建表的語法向其對應子表中寫入,在寫入時指定tag值。此時,如果此點位對應子表不存在則會被自動創建;如果此點位對應子表已經存在,則TDengine本身會跳過建表過程,直接寫入數據,這樣也就是實現了一種schemaless的寫入方式。

當然,在確定設備(子表)已經存在的情況下,可以同時向不同的超級表中同時插入數據。注意爲了提高寫入速度,對同一條insert SQL語句,可以向多張表插入新記錄,具體如下:


 
  1. INSERT INTO iot_datas.meter_001_humi VALUES ('2018-01-01 00:00:01.000', 95)​ iot_datas.meter_001_temp VALUES ('2018-01-01 00:00:01.000', 20)

圖撲IoT Platform介紹

IoTopo 將TDengine的schemaless方案,做的更加簡便,只需要一個數據庫一個超級表,所有設備測點都是這個超級表下的一個子表,子表的名稱可以僅由設備序列號+測點ID組成。整個過程可以通過平臺的可視化界面完成。

1)時序數據庫配置

iotopo物聯網平臺採用RESTful接口連接TDengine,用戶可以修改鏈接參數,修改數據庫名稱,修改數據保留天數。保存修改後,平臺會自動創建數據庫和超級表,底層建表語句見前文。配置界面下如所示:

2) 添加設備

在設備管理界面,新建一個設備,輸入設備序列號和設備名稱,在通訊設置中,關聯 MQTT 網關,點擊確定。如下圖所示,我們創建了一箇中央水機的設備,序列號名稱爲:zhongyangshuijiceshi。

3) 配置測點及存儲策略

添加完設備後,需要配置設備測點,測點ID 要與 MQTT 網關推送的數據保持一致。如果測點需要保存到TDengine。可以配置存儲間隔(以秒爲單位),存儲間隔爲 0 或空時不進行保存,存儲間隔爲 -1 時表示變化存儲(數據發生變化時存儲),存儲間隔爲 -2 時表示實時存儲(接收到 MQTT 網關推的數據時存儲)。

當測點數據需要存儲到TDengine時,平臺會將數據保存到超級表下面的子表中,比如保存“進水流量”的底層 SQL 語句如下:


 
  1. INSERT INTO iot_datas.zhongyangshuijiceshi_jinshuiliuliang USING iot_datas.iot_meters TAGS ('zhongyangshuijiceshi', 'jinshuiliuliang') VALUES ('2018-01-01 00:00:00.000', 20);

4)在組態畫面中顯示測點數據

在製作組態畫面時可以綁定測點的實時數據,如下圖所示,選中一個文本框點擊綁定按鈕,彈出數據綁定界面,選擇實時數據和對應的測點即可完成綁定。

運行組態畫面時,IoT Platform會自動從數據庫中讀取相應的測點數據並進行實時更新。組態畫面是可以導入和嵌入到其他項目中的,演示地址如下:

http://demo.iotopo.com/share?url=displays/ff2eb425-633d-11ea-83c1-fa163e07e858.json

5)訪問自建的 TDengine 數據庫

如果用戶需要用到非IoT Platform創建的TDengine數據庫,可以通過創建數據源和數據集的方式訪問TDengine。首先用戶需要在數據源管理界面創建一個數據源,配置方法也是需要提供REST接口,和數據庫名稱。

創建數據源:

創建數據集:

用戶在組態畫面中可以選擇一個表格控件,然後點擊表格控件的“行數據”綁定按鈕,在綁定界面中選擇綁定數據集即可完成綁定,詳細可以參考:

通過前面簡單的配置,中央水機監控系統大部分功能就實現了。用戶可以通過IoTopo物聯網平臺方便的從TDengine中查詢到所有接入點位的數據,如下圖:

利用平臺的組態工具,我們還開發瞭如下實時監控界面。

平臺選用TDengine的理由

在之前一個版本,平臺底層使用的是InfluxDB來存儲時序數據。然而InfluxDB在面對海量數據時的讀寫性能存在瓶頸,因此我們決定採用性能更強悍的TDengine。在深入使用TDengine後,我們還發現了諸多優勢。

1)支持SQL語句

TDengine支持SQL語句操作,使得TDengine可以通過插件方式無縫的嵌入到很多大數據展示系統方案中。

2)動態建表

在TDengine實現schemaless的寫入方式,使數據庫可以動態的適配多樣的工業場景。

3)性能高、體量小

TDengine對順序產生的時序數據插入、查詢、聚合統計性能非常高,而整個數據庫體量卻非常小,這就讓我們的平臺變得更易搭建和維護。

4)節約存儲成本

由於TDengine是個列式存儲數據庫,數據壓縮後其存儲空間比一般數據庫大大減少。

IoTopo工業物聯網平臺組態示例

IoTopo工業物聯網平臺前端界面採用標準HTML5開發,支持 2D/3D圖形組態,同時聽過豐富的組態模版,可滿足絕大多數工業數據可視化監控應用場景。

下面舉幾個項目的例子,來展示IoTopo物聯網平臺的組態界面。更多的界面可以訪問:

http://www.iotopo.com/examples/

​某智能新風系統項目

某工廠智能監控項目

某風力發電SCADA項目

某生活園區可視化項目

TDengine的集成爲工業物聯網平臺提供了堅實的底層,但後期也還有很多細化的工作等待去開展,比如:多個超級表的適配、多維度tag的支持等。只要我們踏踏實實做產品,在物聯網和工業互聯網的潮流中,一定可以做出更多的貢獻。

作者簡介:白華軍,智慧水務研究院院長(博士),從業16年,包括SAP ERP專家顧問、軟件需求分析師、技術架構師、軟件項目經理等。持續推動着大型電子商務與管理信息系統成功應用與運維;對JAVA,ASP.NET、C/C++/C#,WINDOWS/LINUX系統、HANA數據庫、工業物聯網、數據倉庫等技術都有資深建樹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章