小 T 導讀:科大智能(neng)(CSG)是(shi)(shi)全國(guo)領先的工(gong)業智能(neng)化(hua)解決方案(an)供應商(shang)之一。SCARM是(shi)(shi)CSG開(kai)發(fa)的遠程(cheng)監控(kong)與維(wei)護管理平臺(tai),是(shi)(shi)典型的物聯網(wang)應用,開(kai)發(fa)團隊在(zai)評估不同的物聯網(wang)開(kai)發(fa)框(kuang)架后,選用了(le)TDengine Database。
設備監測與預測性維護業務場景介紹
設(she)(she)備預(yu)(yu)測性維護是(shi)在物(wu)流裝(zhuang)(zhuang)備/機臺等(deng)生(sheng)產(chan)設(she)(she)備上加裝(zhuang)(zhuang)物(wu)聯(lian)網傳感器,實(shi)時采集設(she)(she)備運行(xing)過程中的狀態數(shu)(shu)據(ju),運用邊(bian)緣端(duan)/云(yun)端(duan)的設(she)(she)備維保(bao)知(zhi)識庫,管理設(she)(she)備維保(bao)作業(ye),預(yu)(yu)警設(she)(she)備故障發生(sheng)風險;形成物(wu)聯(lian)采集端(duan)—邊(bian)緣計算端(duan)—云(yun)端(duan)大數(shu)(shu)據(ju)端(duan)的管理閉(bi)環。這個閉(bi)環產(chan)生(sheng)的行(xing)業(ye)價值是(shi)巨大的:
- 按計劃保養設備,有效延長設備使用壽命;
- 預警設備故障風險,保障生產安全;
- 提供遠程故障診斷工具,沉淀維保經驗到知識庫,為設備廠商創造增值服務,指導第三方維保服務;
- 量化管理維保作業,為第三方維保服務質量提供管理依據;
- 運用實時監控和數據分析等技術手段,借助邊緣策略,及時處理現場宕機、來料短缺等突發情況。
SCARM是CSG開(kai)發(fa)的遠程監控與(yu)維(wei)護管理平臺(tai)。運(yun)用(yong)物聯網技術(shu),實時監控堆垛機、穿梭車(che)、提升機等(deng)物流設(she)(she)備(bei)(bei)的運(yun)行狀態,結合(he)維(wei)保作業管理數據,計(ji)算設(she)(she)備(bei)(bei)故(gu)障(zhang)風(feng)險,指導用(yong)戶采取適當措施排除設(she)(she)備(bei)(bei)故(gu)障(zhang)風(feng)險,降低(di)設(she)(she)備(bei)(bei)由于維(wei)護不(bu)當所致的停機風(feng)險。
實現目標如下:
- 采集和存儲堆垛機、穿梭車、提升機等設備實時運行數據;
- 實時展示儲堆垛機、穿梭車、提升機等運行情況,比如電機的電壓、電流、行走速度、異常噪音等;
- 預防性維護,綜合分析設備運行與維護作業數據,推算設備故障風險;
- 按期生成檢查和維護保養計劃,管理維保作業,保障生產安全。
設計系統的業務流程
SCARM是典型的(de)(de)物(wu)(wu)聯(lian)(lian)網(wang)(wang)應用,邊緣計(ji)算(suan)(suan)節點推送的(de)(de)數(shu)據經消(xiao)息隊(dui)列分發給流(liu)式計(ji)算(suan)(suan)模(mo)(mo)(mo)塊(kuai)及日志存儲模(mo)(mo)(mo)塊(kuai),物(wu)(wu)化(hua)模(mo)(mo)(mo)型與以(yi)關(guan)系數(shu)據庫為中心的(de)(de)模(mo)(mo)(mo)型有很大區(qu)別,開發團隊(dui)在評估不同的(de)(de)物(wu)(wu)聯(lian)(lian)網(wang)(wang)開發框(kuang)架(jia)后,選用了TDengine Database。我們以(yi)一個例子來展示TDengine簡(jian)單易用的(de)(de)編程(cheng)接(jie)口,及如何用它解決物(wu)(wu)聯(lian)(lian)網(wang)(wang)特有的(de)(de)流(liu)式計(ji)算(suan)(suan)問題。例子的(de)(de)編程(cheng)思路如下:
- 采集服務采集設備數據,并傳遞到MQTT Server進行數據推送;
- 數據處理服務訂閱MQTTServer的最新數據,進行協議解析,將具體的字段進行處理,并調用TDengine的JDBC標準接口寫入數據;
- 再往上的架構就是標準的MVC架構:應用層調用服務層獲取到數據層(TDengine時序數據庫)中設備的統計及分析數據,并返回進行展示和操作;
- 通過Grafana直接連接數據層TDengine數據庫,在應用層展示設備的實時數據情況。
這(zhe)里(li)需要(yao)注意的(de)(de)(de)是,TDengine是一(yi)個設(she)備(bei)(bei)(bei)一(yi)張表(biao)的(de)(de)(de)設(she)計思(si)路,因此在(zai)步驟(zou)2的(de)(de)(de)數(shu)據(ju)(ju)處理服務中(zhong),我(wo)(wo)們根據(ju)(ju)項目(mu)及(ji)設(she)備(bei)(bei)(bei)類(lei)(lei)(lei)型在(zai)TDengine時(shi)序數(shu)據(ju)(ju)庫(ku)中(zhong)先建好(hao)超級(ji)表(biao)(每(mei)(mei)類(lei)(lei)(lei)設(she)備(bei)(bei)(bei)一(yi)個超級(ji)表(biao),定義好(hao)該類(lei)(lei)(lei)設(she)備(bei)(bei)(bei)要(yao)采集的(de)(de)(de)字段,以(yi)及(ji)一(yi)些靜(jing)態標簽如設(she)備(bei)(bei)(bei)ID、分組等)和每(mei)(mei)個設(she)備(bei)(bei)(bei)對(dui)應(ying)的(de)(de)(de)子表(biao)。在(zai)MQTT協議解析后(hou),每(mei)(mei)臺設(she)備(bei)(bei)(bei)的(de)(de)(de)數(shu)據(ju)(ju)應(ying)存(cun)到其對(dui)應(ying)的(de)(de)(de)子表(biao)中(zhong)。子表(biao)的(de)(de)(de)名(ming)字和設(she)備(bei)(bei)(bei)ID之間要(yao)建立一(yi)種(zhong)映(ying)射(she)關(guan)系(xi),這(zhe)樣在(zai)寫(xie)入數(shu)據(ju)(ju)時(shi)可以(yi)根據(ju)(ju)上報數(shu)據(ju)(ju)中(zhong)的(de)(de)(de)設(she)備(bei)(bei)(bei)ID信息直接找(zhao)到要(yao)寫(xie)的(de)(de)(de)表(biao)名(ming)。當然(ran)整(zheng)個平臺的(de)(de)(de)業務數(shu)據(ju)(ju)還是存(cun)儲在(zai)關(guan)系(xi)數(shu)據(ju)(ju)庫(ku)MySQL中(zhong);一(yi)些用戶(hu)最常用的(de)(de)(de)數(shu)據(ju)(ju)我(wo)(wo)們也(ye)放到了Redis中(zhong)。TDengine可以(yi)解決最新采集數(shu)據(ju)(ju)的(de)(de)(de)緩存(cun)問題,省去了一(yi)些Redis的(de)(de)(de)內存(cun)開銷。
系統(tong)的整體架(jia)構如下圖。

TDengine配置使用
一、安裝和配置TDengine數據庫集群
1. 安裝
在一臺(tai)Linux服(fu)務器上安裝TDengine的過程非常簡(jian)單,只需要執行install.sh腳本(ben),然后執行命令啟動taosd服(fu)務即可(更多可參考 TDengine官網(wang)):
sudo systemctl start taosd
2. 配置數據庫集群(qun)
項目中采用3臺服務器(qi)配(pei)置TDengine數(shu)據(ju)庫集群(qun)。TDengine的(de)(de)分(fen)布式架構中分(fen)為虛(xu)擬數(shu)據(ju)節(jie)(jie)點(dian)和虛(xu)擬管(guan)理節(jie)(jie)點(dian)兩種不(bu)同的(de)(de)虛(xu)擬化節(jie)(jie)點(dian)。虛(xu)擬節(jie)(jie)點(dian)是對物理服務節(jie)(jie)點(dian)的(de)(de)虛(xu)擬化分(fen),其(qi)中數(shu)據(ju)節(jie)(jie)點(dian)的(de)(de)分(fen)布是完全去中心化的(de)(de),而管(guan)理節(jie)(jie)點(dian)則是遵循Master-Slave的(de)(de)方(fang)式。因此再集群(qun)配(pei)置時,要配(pei)置一下管(guan)理節(jie)(jie)點(dian)主節(jie)(jie)點(dian)所在服務器(qi)的(de)(de)IP地址(MasterIP),以及(ji)第(di)一備選節(jie)(jie)點(dian)的(de)(de)IP(SecondIP)。
首(shou)先在3臺服務(wu)器均完成(cheng)TDengine安裝后,先不要啟(qi)動(dong)服務(wu),在每臺服務(wu)器的taos.cfg文件中添加(jia)MasterIP、SecondIP以及PrivateIP的配置(zhi)信息(xi)。之后,啟(qi)動(dong)3臺服務(wu)器上的taosd服務(wu),并(bing)用taos客戶端連入主節點所在服務(wu)執行(xing)
create dnode <DataNodeIP>
其中(zhong)<DataNodeIP>是具體的第二臺服務器的通信IP地址。這樣這臺服務器就被(bei)加入(ru)到了(le)集群中(zhong)。
仿照(zhao)上述操(cao)作配(pei)置(zhi)第三臺服務(wu)器后,通過show dnodes命令(ling)可查詢(xun)配(pei)置(zhi)的集群節點如下(xia):

到此,集群(qun)配(pei)置成功(gong)。
二、創建Spring Boot項目,配置taos依賴及參數
在SpringBoot項目的pom.xml文件中加(jia)入taos的jdbc依賴:
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>1.0.1</version>
</dependency>
在SpringBoot項目(mu)的.yml文(wen)件(jian)中配置公共的taos數(shu)據庫(ku)連接(jie)url:
spring:
taos:
enable: true
jdbcUrl: jdbc:TAOS://192.168.12.28:6020/demo?user=root&password=taosdata
database: demo
三、實現taos相關業務
打開taos數(shu)據庫連接
try {
if(connection == null)
connection = DriverManager.getConnection(url);
}catch (Exception e){
e.printStackTrace();
}
創建超級表及設備(bei)的子表
Statement smt = connection.createStatement();
String sql = String.format(CREATE_SUPER_TABLE, s_name);
smt.executeUpdate(sql);
sql = String.format(CREATE_TABLE, t_name, s_name, paras[0], paras[1]);
smt.executeUpdate(sql);
設備信息的插入
Statement smt = null;
try{
smt = connection.createStatement();
return smt.executeUpdate("import into " + sqlBody);
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(smt != null)
? smt.close();
}catch (Exception e){
e.printStackTrace();
}
}
設備信息的查詢
Statement smt = null;
List<T> list = new ArrayList<>();
try{
smt = connection.createStatement();
result = smt.executeQuery(sql);
Field[] fields = clazz.getDeclaredFields();
T t = null;
while (result.next()){
t = clazz.newInstance();
for (Field field : fields){
field.setAccessible(true);
field.set(t, result.getObject(field.getName(), field.getType()));
}
list.add(t);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(smt != null)
smt.close();
}catch (SQLException se){
se.printStackTrace();
}
}
四、配合Grafana的可視化展示
實際效果圖如下圖

使用TDengine的體會
相(xiang)比關系型(xing)數(shu)(shu)(shu)據(ju)(ju)(ju)庫,時序數(shu)(shu)(shu)據(ju)(ju)(ju)庫對量級龐(pang)大(da)的時序數(shu)(shu)(shu)據(ju)(ju)(ju)能高效(xiao)的進行存儲和查詢(xun),而(er)且在(zai)存儲空(kong)間的節省上(shang)也(ye)有很大(da)的優勢(shi)。特別是(shi)使用(yong)(yong)TDengine數(shu)(shu)(shu)據(ju)(ju)(ju)庫,相(xiang)較于一開始使用(yong)(yong)的OpenTSDB時序數(shu)(shu)(shu)據(ju)(ju)(ju)庫,在(zai)I/O的操作(zuo)會(hui)更快,數(shu)(shu)(shu)據(ju)(ju)(ju)存儲空(kong)間占用(yong)(yong)少。再加上(shang)TDengine數(shu)(shu)(shu)據(ju)(ju)(ju)庫輕量、集成簡單的優勢(shi),使用(yong)(yong)方式(shi)靈活,可發揮空(kong)間很大(da)。后續(xu)期望(wang)能通過數(shu)(shu)(shu)據(ju)(ju)(ju)庫自帶(dai)的流(liu)式(shi)計算來(lai)分擔業務上(shang)的一些(xie)計算壓力。
作者簡介:
張少華(第一作者),安徽科大智能物聯高級軟件開發工程(cheng)師,目前負責物聯網應用方向研發工作。
黃一多,安(an)徽科大(da)智能物(wu)聯軟(ruan)件總工程師,目前(qian)主要負責物(wu)聯網、大(da)數據等核心(xin)技術研究工作(zuo)。
公司介紹:
科大智能物聯技術有限公司作為科大智能科技股份有限公司(股票代碼:300222)的重要成員,是面向工業智能物聯解決方案的先驅者和領軍企業。公司在“引領行業發展,促進工業進步”的愿景下,秉承“創造價值、交付價值”的經營理念,致力于將智能算法、大數據技術、物聯網技術等應用在物流與供應鏈、生產工藝優化、智能加工、產品質量檢測與追溯等工業生產的不同領域和環節,將新技術賦能各類制造業企業,實現智能制造,提(ti)升客(ke)戶企業競(jing)爭力,推動行業轉型升級。
原文首發于:


























