陸世民,李作康,劉 璐,劉 文,王禹林
(南京理工大學 機械工程學院, 南京 210094)
當前,基于數(shù)控機床數(shù)據(jù)進行機床狀態(tài)監(jiān)測以及健康預警和故障診斷研究已成為提升機床可靠性的一大途徑[1-2]。對機床狀態(tài)數(shù)據(jù)有效存儲和管理是開展機床狀態(tài)監(jiān)測以及健康預警和故障診斷研究的工作基礎[3-4]。眾多學者都對數(shù)控機床數(shù)據(jù)存儲和管理技術進行研究,劉自然等人基于TDMS數(shù)據(jù)邏輯方式設計了一套多通道海量振動數(shù)據(jù)快速存儲和查詢系統(tǒng),實現(xiàn)對海量數(shù)據(jù)的快速存儲,但僅研究了振動數(shù)據(jù),缺少對多種不同種類數(shù)據(jù)的研究[5]。劉東洪建立基于Hadoop的機床運行狀態(tài)信息采集與存儲系統(tǒng),實現(xiàn)對多種不同類型數(shù)據(jù)的分布式存儲[6];徐帆基于以太網(wǎng)的數(shù)控群集監(jiān)控系統(tǒng),提出一種跨平臺的數(shù)控集群系統(tǒng)[7],但上述研究都缺少對數(shù)據(jù)庫的實際需求分析和數(shù)據(jù)庫讀寫和查詢功能測試,岳宇賓等基于VisualC++使用Access2003數(shù)據(jù)庫開發(fā)了磨床工藝數(shù)據(jù)管理軟件,雖然滿足了用戶需求,但數(shù)據(jù)庫選型較老,穩(wěn)定性較差[8],王海濤等根據(jù)不同機床技術參數(shù)不同,把機床屬性抽象為8類,進而通過Access2003建立數(shù)據(jù)庫,但缺少實際應用測試[9]。綜上所述,目前開展的數(shù)據(jù)存儲和管理技術研究存在使用數(shù)據(jù)庫較為老舊,缺少數(shù)據(jù)庫分析以及數(shù)據(jù)功能測試的問題,因此有必要對機床運行狀態(tài)數(shù)據(jù)特點、新型數(shù)據(jù)庫和數(shù)據(jù)存儲及測試技術進行研究。
數(shù)控機床時序數(shù)據(jù)存儲與查詢系統(tǒng)用于機床運行狀態(tài)監(jiān)測以及健康預警和故障診斷研究。根據(jù)前期調研,該數(shù)控機床運行穩(wěn)定,性能可靠,其較為常見的故障位置為砂輪電主軸的軸承、各進給軸控制系統(tǒng)和上下料裝置。因此有必要對這些關鍵組件狀態(tài)重點監(jiān)測。
大部分數(shù)控機床數(shù)據(jù)都是機床在某個時間點的狀態(tài)值,是較為規(guī)范的時序數(shù)據(jù),雖然單個數(shù)據(jù)缺少研究意義,但對一段時間的數(shù)據(jù)進行研究卻可以得到很多有用信息。如圖1所示,根據(jù)研究任務以及數(shù)據(jù)采集和存儲頻率差異將數(shù)據(jù)分成高頻數(shù)據(jù)和低頻數(shù)據(jù)。高頻數(shù)據(jù)是機床關鍵組件的狀態(tài)數(shù)據(jù),由于運行狀態(tài)實時變化,需要較高的采集頻率。具體包括設備號、數(shù)據(jù)采集時間、進給軸數(shù)據(jù)(負載率、位置、溫度和進給倍率)、砂輪電主軸數(shù)據(jù)(編程速度、實際速度、角度、溫度、進給倍率和進給速度)、關鍵點振動以及內(nèi)置PLC狀態(tài)(冷卻組件狀態(tài)、機床門狀態(tài)、潤滑狀態(tài)、上下料機械臂狀態(tài)等)。
低頻數(shù)據(jù)寫入時間間隔從幾分鐘到幾天不等,還需細分成機床狀態(tài)數(shù)據(jù)、故障數(shù)據(jù)、工件數(shù)據(jù)和砂輪數(shù)據(jù)。
(1)機床狀態(tài)數(shù)據(jù):存儲機床狀態(tài)信息,便于廠家了解設備生產(chǎn)情況,包括機床號、機床狀態(tài)(加工、維修和停機)、狀態(tài)開始時間和狀態(tài)持續(xù)時間等。
(2)故障數(shù)據(jù):記錄機床故障情況,為健康預警和故障診斷研究提供數(shù)據(jù)支撐,包括設備號、故障時間、故障編號、故障優(yōu)先級和故障附加信息等。
(3)工件數(shù)據(jù):統(tǒng)計工件信息和各個加工階段所需時間,便于廠家生產(chǎn)管理,具體包括加工設備號、工件型號、加工階段和加工時間等。
(4)砂輪數(shù)據(jù):存儲砂輪型號和砂輪更換時間,便于廠家結合加工過程數(shù)據(jù),改進工藝,延長砂輪使用時間,具體包括設備號、砂輪型號、開始時間和結束時間等。
圖1 機床運行狀態(tài)數(shù)據(jù)分類
數(shù)據(jù)采集通過GNC61數(shù)控系統(tǒng)內(nèi)置Socket服務器實現(xiàn)。GNC61數(shù)控系統(tǒng)內(nèi)置通信Server,它與NC內(nèi)核采用基于共享內(nèi)存的高速連接,可以讀取CNC內(nèi)核的PLC子系統(tǒng)、硬件子系統(tǒng)和HMI子系統(tǒng)數(shù)據(jù)。
數(shù)據(jù)采集方式如圖2所示,數(shù)據(jù)采集客戶端創(chuàng)建Socket,設置數(shù)控機床IP和端口號,建立和數(shù)控系統(tǒng)Socket Server的通訊,根據(jù)通信server要求發(fā)送xml形式的請求字符串,通信Server解析請求,將所需信息再以xml形式發(fā)送給客戶端,客戶端解析xml格式的信息,得到所需的各項數(shù)據(jù)。
圖2 運行狀態(tài)數(shù)據(jù)采集流程
根據(jù)數(shù)據(jù)采集方式和數(shù)據(jù)存儲要求將采用圖3所示數(shù)據(jù)采集及存儲方案。數(shù)據(jù)采集及存儲程序按設定頻率不斷循環(huán)。數(shù)據(jù)采集及存儲客戶端首先采集機床運行狀態(tài),根據(jù)結果將機床狀態(tài)錄入機床狀態(tài)數(shù)據(jù)庫,如果機床未加工并發(fā)生故障,采集故障數(shù)據(jù),對比故障發(fā)生時間和故障號等信息判斷是否是新的故障,將新的故障數(shù)據(jù)入機床故障數(shù)據(jù)庫,開始新的循環(huán)。如果機床正在加工,對砂輪數(shù)據(jù)進行采集,對比前后兩次數(shù)據(jù),判斷砂輪是否更換,如果砂輪數(shù)據(jù)更新則錄入砂輪數(shù)據(jù)庫,然后進行加工過程數(shù)據(jù)采集和錄入。最后加工過程結束,將工件信息錄入工件數(shù)據(jù)庫。
圖3 機床運行狀態(tài)數(shù)據(jù)采集及存儲方案
由于加工過程數(shù)據(jù)表是所有表格中數(shù)據(jù)量最大、數(shù)據(jù)種類最多且存儲頻率最高的,因此主要對加工過程數(shù)據(jù)分析表進行分析。
(1)支持持續(xù)的高并發(fā)寫入,加工過程數(shù)據(jù)表需存儲機床主軸狀態(tài)、進給軸狀態(tài)等信息,單次寫入數(shù)據(jù)多,同一時間可能還有其他數(shù)據(jù)表進行存儲,因此,數(shù)據(jù)庫單次存儲寫入上限還將增加。同時機床狀態(tài)實時變化,對采集頻率要求很高,較高的單次寫入量和采集頻率都對數(shù)據(jù)寫入能力提出要求。此外,歷史數(shù)據(jù)將長期保存,數(shù)據(jù)索引不斷增加,可能導致數(shù)據(jù)寫入能力下降,因此需要數(shù)據(jù)庫具備持續(xù)的高并發(fā)寫入能力[10-11]。
(2)時序數(shù)據(jù)寫入優(yōu)化,加工過程數(shù)據(jù)是較為規(guī)范的時序數(shù)據(jù)。時序數(shù)據(jù)具有寫多于讀、順序寫和修改少的特點。有必要針對時序數(shù)據(jù)庫進行優(yōu)化,提高運行效率。
(3)時序數(shù)據(jù)查詢優(yōu)化,因開展健康預警和故障診斷研究,有必要對故障發(fā)生前一段時間的機床運行狀態(tài)數(shù)據(jù)進行研究,同時為顯示當前產(chǎn)量、平均加工時間等信息,需統(tǒng)計相關表格數(shù)據(jù)再反饋給前端。因此數(shù)據(jù)庫需要對時序數(shù)據(jù)查詢進行優(yōu)化,增加查詢方式并縮短查詢時間。
綜合考慮時序數(shù)據(jù)持續(xù)高并發(fā)寫入、寫入優(yōu)化和數(shù)據(jù)查詢的要求,選擇基于PostgreSQL的第三方插件TimescaleDB存儲機床運行狀態(tài)數(shù)據(jù)。
TimescaleDB通過獨特的設計理念優(yōu)化關系型數(shù)據(jù)庫PosrgreSQL在時序數(shù)據(jù)存儲與查詢方面的性能。TimescaleDB提供給用戶一張Hypertable,Hypertable由多個按照特定時間間隔和可選的其他分區(qū)鍵分割的存儲單元chunk組成。chunk由系統(tǒng)自動劃分,數(shù)據(jù)寫入時只需建立一個chunk的索引,確保當前索引能加載在內(nèi)存中,使其具有持續(xù)的高寫入能力。Chunk可通過增加服務器擴大規(guī)模,使TimescaleDB保持良好的橫向擴展能力。此外,TimescaleDB利用智能管理的元數(shù)據(jù),減少時序數(shù)據(jù)查詢延時。
數(shù)據(jù)庫建立包括建立PostgreSQL數(shù)據(jù)庫和轉換成Hypertable。建立PostgreSQL數(shù)據(jù)庫需錄入表格各項參數(shù),包括表格名稱、列名稱和數(shù)據(jù)類型等,設置主鍵和外鍵,表格主鍵為自增長序列,確保主鍵唯一性。
轉換成Hypertable需選擇用于劃分chunk所需列,結合課題需要選擇存儲數(shù)據(jù)采集時間的列名稱。此外還需建立索引,索引會消耗存儲資源,但有助于快速查詢所需數(shù)據(jù)。機床健康預警和故障診斷研究需要根據(jù)機床設備號和故障時間查詢所需數(shù)據(jù),因此以設備號在前采集時間在后的形式建立聯(lián)合索引。
測試流程如圖4所示,數(shù)據(jù)庫端生成測試數(shù)據(jù)、導出數(shù)據(jù)到硬盤,數(shù)據(jù)采集及存儲客戶端采集數(shù)據(jù)、進行格式轉換并寫入數(shù)據(jù)庫表格。
圖4 數(shù)據(jù)采集及存儲測試流程
受硬件及時間限制,將模擬30臺機床正常加工,每隔0.05s采集一臺機床數(shù)據(jù),因此單臺機床采集頻率為1.5s/次,采集時間為2018年1月1日零點至2018年1月15日零點,數(shù)據(jù)量共計23192001條。
數(shù)據(jù)采集數(shù)據(jù)及存儲客戶端使用python編寫,使用關系數(shù)據(jù)庫框架SQLAlchemy完成數(shù)據(jù)錄入、查詢操作,主要功能包括:程序初始化,連接數(shù)據(jù)庫,進入循環(huán)定時程序,以0.05s/次的頻率讀取硬盤數(shù)據(jù),數(shù)據(jù)處理,寫入加工過程數(shù)據(jù)表。
表1所示為采用三種不同循環(huán)定時方式采集數(shù)據(jù)所需時間。數(shù)據(jù)量為10000條,采集頻率為0.05s/次,理論時間為500s,但是基于while循環(huán)和Threading模塊的Timer控件實際所用時間分別是532s和531s,遠大于理論時間。因為方法1和方法2每隔0.05s啟動數(shù)據(jù)采集及存儲程序,此時計時功能停止,待數(shù)據(jù)讀寫完畢,計時功能重新工作,經(jīng)過0.05s再次啟動數(shù)據(jù)讀寫,實際單次循環(huán)時間由等待時間0.05s和數(shù)據(jù)讀寫時間組成,超過0.05s。使用定時任務框架APScheduler時數(shù)據(jù)采集及存儲程序每隔0.05s啟動,此時計時功能保持運行,從而實現(xiàn)數(shù)據(jù)采集及存儲程序嚴格按設定頻率進行,因此將采用APScheduler框架實現(xiàn)循環(huán)定時執(zhí)行程序功能。
表1 機床加工過程數(shù)據(jù)錄入時間
為檢驗TimescaleDB數(shù)據(jù)查詢效果,結合實際需要分別對基于TimescaleDB數(shù)據(jù)庫和PostgreSQL數(shù)據(jù)庫建立的加工過程數(shù)據(jù)表進行復雜條件查詢測試,兩個加工過程數(shù)據(jù)表除使用數(shù)據(jù)庫不同,表格名稱、表格索引及表格數(shù)據(jù)都保持一致。將查詢指定設備號的主軸日平均溫度數(shù)據(jù),為減少誤差,進行10次測試,每次測試隨機更換設備號。
數(shù)據(jù)查詢測試結果如圖5所示,基于PostgreSQL數(shù)據(jù)庫的數(shù)據(jù)查詢所需時間范圍在9.8s~10.8s,平均時間為10.2s,而基于TimescaleDB數(shù)據(jù)庫的數(shù)據(jù)查詢所需時間范圍在6.5s~7.5s之間,平均時間為7.0s??煽闯觯谕葪l件下,TimescaleDB數(shù)據(jù)庫的數(shù)據(jù)查詢所需時間相比較PostgreSQL數(shù)據(jù)庫的數(shù)據(jù)查詢所需時間更短,在本次查詢測試中平均縮短了31.3%的查詢時間。
圖5 TimescaleDB數(shù)據(jù)庫和PostgreSQL數(shù)據(jù)庫查詢時間對比
為實現(xiàn)遠程監(jiān)控功能,降低監(jiān)控端成本,使用ES6語言建立如圖6所示基于B/S架構的狀態(tài)監(jiān)測方案,網(wǎng)頁端實時顯示狀態(tài)信息,其中實時數(shù)據(jù)通過數(shù)據(jù)采集客戶端采集處理后直接上傳到網(wǎng)頁端,歷史數(shù)據(jù)則通過數(shù)據(jù)庫查詢處理后上傳到網(wǎng)頁端。健康預警、故障診斷平臺還將對多組歷史數(shù)據(jù)進行特征提取和神經(jīng)網(wǎng)絡訓練,并基于實時數(shù)據(jù)對機床狀態(tài)判斷,將結果實時反映在網(wǎng)頁端。
圖6 機床狀態(tài)監(jiān)測流程
單臺機床監(jiān)控界面如圖7所示,將實時顯示機床坐標、主軸狀態(tài)、工件加工過程、各軸溫度、機床健康情況等信息,用戶可以在直觀查看機床的各項指標,從而實現(xiàn)對機床加工狀態(tài)的有效監(jiān)測,并及時對機床故障情況采取針對性措施,從而減少損失,提高機床運行效率。
圖7 單臺機床狀態(tài)監(jiān)測界面
用戶可通過瀏覽器端查詢數(shù)據(jù)庫數(shù)據(jù),為確保數(shù)據(jù)庫數(shù)據(jù)安全,將建立用戶登錄驗證機制,通過對用戶密碼通過加鹽算法加密,從而防止除用戶本人外其他用戶惡意登陸,同時建立用戶權限管理制度,對普通用戶僅開放數(shù)據(jù)庫查詢權限,而專業(yè)管理人員擁有寫入、刪除等修改數(shù)據(jù)庫操作相關權限,降低由于誤操作導致數(shù)據(jù)庫數(shù)據(jù)被修改的風險。
(1)根據(jù)數(shù)據(jù)采集頻率和機床狀態(tài)監(jiān)測以及健康預警和故障診斷研究需求對機床運行狀態(tài)數(shù)據(jù)進行分類,建立機床運行狀態(tài)數(shù)據(jù)采集及存儲方案。
(2)基于加工過程數(shù)據(jù)表對數(shù)據(jù)庫需求分析,提出采用基于Postgresql對時序數(shù)據(jù)優(yōu)化的TimescaleDB控件完成數(shù)據(jù)存儲。
(3)根據(jù)TimescaleDB控件建立數(shù)據(jù)庫,通過Python編寫數(shù)據(jù)采集及存儲客戶端程序,使用定時任務框架APScheduler實現(xiàn)嚴格按照設定頻率循環(huán)定期執(zhí)行程序功能,通過查詢測試證明TimescaleDB數(shù)據(jù)庫相比較PostgreSQL縮短了查詢時間。
(4)基于ES6語言建立網(wǎng)頁端界面,實現(xiàn)機床運行狀態(tài)實時監(jiān)測功能,并建立數(shù)據(jù)庫安全機制,降低數(shù)據(jù)庫數(shù)據(jù)被盜和修改風險。