小 T 導讀:上海嘉柒智能科技有限公司致力于電力行業線下線上一體化運維,為此提供整體解決方案。業務包含電力運維,智慧路燈,隧道一體化等。其電力運維平臺數據庫使用的是TDengine Database,采用TDengine后,存儲空間大為節省。
業務場景
嘉柒智能的電力運維平臺嘉能云,專注于線下線上聯合運維,具有海量設備接入能力、數據分析和計算能力,其中電力運維平臺數據庫使用的是TDengine Database,在數據層面包含有:數據采集,數據傳輸,數據存儲,數據分析。

數據采集:設備多種多樣,生產研發采集設備及通訊管理機的廠家也非常多,這種場景特別適合TDengine的“一個設備一張表”模式。廠家的設備都是根據規約來生產的,電力規約通常有電力協議有許多比如(IEC101、103、104國內電力調度協議)、61850(國際通用),還有一些其他的比如Modbus-RTU、CDT等。而這些協議包含幾種數據:遙測、遙信、遙脈、遙控、遙調等,這些數據都由一個或多個點表(點表包含測點類型及測點數量多有不同)上報,采集頻率一般是五分鐘(根據被監控設備的重要性及其需要的反應時間來確定),隨著設備量的增加,數據量還是相當龐大的。
遙信:要求采用無源接點方式,即某一路遙信量的輸入應是一對繼電器的觸點,或者是閉合,或者是斷開。通過遙信端子板將繼電器觸點的閉合或斷開轉換成為低電平或高電平信號送入RTU 的YX 模塊。遙信功能通常用于測量下列信號,開關的位置信號、變壓器內部故障綜合信號、保護裝置的動作信號、通信設備運行狀況信號、調壓變壓器抽頭位置信號。自動調節裝置的運行狀態信號和其它可提供繼電器方式輸出的信號;事故總信號及裝置主電源停電信號等。在TDengine中,此種類型的數據比較適合使用bool類型。
遙測:遙測往往又分為重要遙測、次要遙測、一般遙測和總加遙測等。遙測功能常用于變壓器的有功和無功采集;線路的有功功率采集;母線電壓和線路電流采集;溫度、壓力、流量(流速) 等采集;周波頻率采集和其它模擬信號采集。在TDengine中,此種類型的數據比較適合使用float類型。
遙控:采用無源接點方式,要求其正確動作率不小于99. 99 %。所謂遙控的正確動作率是指其不誤動的概率,一般拒動不認為是不正確,遙控功能常用于斷路器的合、分和電容器以及其它可以采用繼電器控制的場合。在TDengine中,此種類型的數據比較適合使用bool類型。
遙調:采用無源接點方式,要求其正確率大于99. 99 %。遙調常用于有載調壓變壓器抽頭的升、降調節和其它可采用一組繼電器控制具有分級升降功能的場合。在TDengine中,此種類型的數據比較適合使用float類型。
遙脈:遙脈往往是累積量,通常用于尖峰平谷時期的電度量采集(分為有功電度、無功電),電壓暫升、暫降等。在TDengine中,此種類型的數據比較適合使用double類型。
系統設計
數據傳輸:數據傳輸方式,多采用RJ45口傳輸,或者sim卡無線傳輸,這取決于監控站允許的網絡環境,如果是串口,則加一個轉換設備將串口轉為網口數據
數據分析:嘉能云電力運維平臺,針對不同站具體的情況,提供相應的數據分析服務。常見的數據分析有:模擬量越限、異常開關、電氣火災、用電分析等等,緊急情況將第一時間通知到電力運維負責人。TDengine的降頻和流式計算功能,為此種場景,提供了極大的方便。
數據存儲:接入站點眾多,每個站點有多個設備,每個設備有多個測點,采集時間間隔小。在這樣的情況下,數據量已經非常龐大了,必須要有一個可靠性高,能快速插入、查詢大量數據的數據庫。考慮到數據庫的方便使用,數據庫性能,以及語言環境;我們開始嘗試使用TDengine,并且用python作為執行快速插入/查詢的client。
本平臺支持公網接入或平臺接入兩種接入方式: 公網接入數據解析,數據傳輸皆在云端完成,平臺將云端數據通過消息隊列訂閱下來,且在訂閱服務中,植入TDengine操作代碼,將接收到的設備三遙數據直接存入TDengine,避免數據流轉時間過長。平臺直接接入設備,嘉能云平臺具備協議解析能力,能直接將設備上傳的字節流數據解析出來,再存入TDengine。
數據存儲結構:在TDengine數據庫中,存儲方式我們采用站名為數據庫名,表名為設備名,一個設備一張表,以凍結時間為主鍵,以點表測點標識符為字段名的模式。
由于接入設備各不相同,在接入設備之前,我們為每個設備創建物模型,相同物模型的設備歸為一類,相同站歸為一組,再通過數據庫同步到TDengine生成相應的設備表。使用TDengine的超級表,可以實現對同一類設備的統一管理。
Show databases;

select * from da00012829 limit 1\G;

數據量寫入:在決定使用TDengine之前,我根據:
- 十個站一千個設備;
- 五分鐘采集上報一次;
- 一個設備兩百個測點;
- 云端接入的情況,
做了一下簡單測試:一千個設備一千張表,每張表200個field,也就是20萬個測點值要分一千次,存入TDengine,經持續的插入測試,數據并無丟失,且運行穩定。
下面是Log記錄:

數據查詢和展示
數據查詢:在數據查詢方面,用于數據分析的數據查詢,我們覺得數據分析完全在代碼層處理是非常慢的,尤其是在數據密度大,分析數據時段長的時候,這會很影響用戶體驗,TDengine除了可以快速插入數據,另外一個重要的點就是可在數據庫層面將數據預處理(過濾、填充、時間段篩選、數據查詢密度等),且速度快。
查詢舉例:觀察一個月內的電壓情況,查詢出相關設備的電流電壓,以及產生的告警;綜合分析。根據采集間隔計算:時間范圍30天43200分鐘,密度為5min一個點,則是8640個值,三相電壓則一次返回三組數據。在接口中嵌入TDengine時序稀釋數據查詢代碼示例,做到即時查詢即時返回:

部分設備測點同比分析示例:

使用感受
TDengine確實是一款不錯的時序數據庫,開源、高效的存儲和查詢,存儲空間大為節省。最開始只是關注插入和查詢性能,數據的壓縮率確實給了不少的驚喜,大約11%,節省了不少的存儲空間。
connection的人性化、輕量級的軟件、每種語言的樣例程序,在安裝包中都/examples中都可以找到。

未來優化建議
TDengine數據庫的鏈接對象處理機制還有待提升,希望2.0版本之后能夠改變。
在數據庫查詢方面:希望查詢能夠更加靈活,且能更多的分擔代碼計算的壓力,這也將使TDengine在項目中的地位越重。
作者簡介:張灝,上海嘉柒智能科技有限公司研發工程師, 主要從事電力運維平臺開發與應用及底層數據接入,近年專注于數據應用與能耗分析。



























