李作康,王禹林,劉 璐,陸世民,何 彥
(1.南京理工大學(xué) 機(jī)械工程學(xué)院, 南京 210094;2.重慶大學(xué) 機(jī)械傳動國家重點(diǎn)實(shí)驗(yàn)室,重慶 400030)
智能制造日益成為未來制造業(yè)發(fā)展的重大趨勢,遠(yuǎn)程監(jiān)測是基礎(chǔ)手段。周凌青等使用LabVIEW開發(fā)了一套能機(jī)床生產(chǎn)信號實(shí)時(shí)監(jiān)測系統(tǒng)[1],Jonathan Downey等人也實(shí)現(xiàn)了對生產(chǎn)環(huán)境中數(shù)控加工設(shè)備的實(shí)時(shí)監(jiān)測[2],Li Y等設(shè)計(jì)了一種集成的基于特征的在線動態(tài)監(jiān)控系統(tǒng)[3],Wu C等設(shè)計(jì)了一種基于開放式數(shù)控系統(tǒng)的遠(yuǎn)程監(jiān)控系統(tǒng)[4],方磊等開發(fā)了一種數(shù)字化車間生產(chǎn)狀態(tài)實(shí)時(shí)監(jiān)測系統(tǒng)框架[5]。但是上述監(jiān)測系統(tǒng)均采用傳統(tǒng)的Client/Server架構(gòu),客戶端必須進(jìn)行軟件安裝,系統(tǒng)維護(hù)成本高,不便于生產(chǎn)線設(shè)備的廣泛應(yīng)用。
隨著Web瀏覽器技術(shù)的不斷成熟,Cheng X等開發(fā)了一套遠(yuǎn)程視頻監(jiān)控系統(tǒng),實(shí)現(xiàn)了對生產(chǎn)環(huán)境的遠(yuǎn)程管理[6],Mourtzis D 等提出一種根據(jù)監(jiān)測設(shè)備空閑狀態(tài)來制定加工設(shè)備生產(chǎn)計(jì)劃的調(diào)度系統(tǒng)[7],但是生產(chǎn)管理和調(diào)度系統(tǒng)不能對設(shè)備多項(xiàng)參數(shù)進(jìn)行全面監(jiān)控。蘇憲利等使用Socket和Ajax技術(shù)設(shè)計(jì)了基于Web環(huán)境的數(shù)控機(jī)床遠(yuǎn)程監(jiān)控系統(tǒng)[8],張子龍等利用Modbus協(xié)議和HostLink協(xié)議開發(fā)了數(shù)控機(jī)床狀態(tài)監(jiān)測系統(tǒng)[9],但是都只是針對單臺設(shè)備部分參數(shù)進(jìn)行了監(jiān)測。
綜上所述,目前數(shù)控加工設(shè)備監(jiān)測系統(tǒng)存在開發(fā)架構(gòu)老舊,不適合生產(chǎn)線多臺數(shù)控加工設(shè)備推廣應(yīng)用,基于B/S架構(gòu)的監(jiān)測系統(tǒng)多用于生產(chǎn)管理調(diào)度,或僅針對單臺機(jī)床進(jìn)行監(jiān)測,可見,為提高生產(chǎn)線設(shè)備運(yùn)行可靠性和利用率,有必要對生產(chǎn)線多臺設(shè)備多源參數(shù)遠(yuǎn)程監(jiān)測系統(tǒng)的開發(fā)進(jìn)行研究。
基于B/S架構(gòu)的遠(yuǎn)程監(jiān)測系統(tǒng)總體框架如圖1所示,主要開發(fā)過程分為兩部分:
(1)服務(wù)端程序開發(fā)。服務(wù)器端程序采用Python語言以及Flask框架,基于Socket接口和TCP/IP協(xié)議實(shí)時(shí)讀取數(shù)控加工中心實(shí)時(shí)狀態(tài)信息,應(yīng)用ORM框架實(shí)現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的訪問和存儲,為Web端頁面調(diào)用數(shù)據(jù)定義API接口;
(2)Web端開發(fā)?;赗eact架構(gòu)進(jìn)行邏輯及界面設(shè)計(jì),實(shí)現(xiàn)登錄注冊功能、單臺設(shè)備單獨(dú)監(jiān)測功能、多臺設(shè)備同時(shí)監(jiān)測功能、設(shè)備基礎(chǔ)信息和故障信息等信息的查詢功能,以及設(shè)備狀態(tài)評價(jià)、故障和優(yōu)化信息收集、操作記錄等的管理記錄功能。
圖1 遠(yuǎn)程監(jiān)測系統(tǒng)總體框架
實(shí)現(xiàn)對數(shù)控加工設(shè)備狀態(tài)的準(zhǔn)確監(jiān)測,不僅要在讀取數(shù)控系統(tǒng)已有基本信息的基礎(chǔ)上,更要結(jié)合設(shè)備的歷史加工數(shù)據(jù)對設(shè)備狀態(tài)性能變化進(jìn)行分析,因此監(jiān)測系統(tǒng)數(shù)據(jù)來源分為實(shí)時(shí)監(jiān)測數(shù)據(jù)和數(shù)據(jù)庫數(shù)據(jù)。
(1)實(shí)時(shí)監(jiān)測數(shù)據(jù):對于數(shù)控系統(tǒng)中已經(jīng)封裝好的對象,通過Socket向數(shù)控系統(tǒng)發(fā)送請求直接讀取,對于接入數(shù)控系統(tǒng)的傳感器信號,先要在PLC中對信號進(jìn)行定義封裝后,然后通過Socket實(shí)時(shí)讀取數(shù)據(jù)。A軸溫度傳感器信號傳遞流程如圖2所示,讀取步驟如下:
1)在數(shù)控系統(tǒng)硬件組態(tài)中,設(shè)置將A軸溫度信號接入數(shù)控系統(tǒng)的溫度采集模塊的地址及波特率;
2)通過映像地址獲取A軸溫度傳感器數(shù)值;
3)PLC主程序中將數(shù)據(jù)變量定義封裝;
4)通過Socket協(xié)議讀取溫度信號。
圖2 A軸溫度信號傳遞流程
(2)數(shù)據(jù)庫數(shù)據(jù):遠(yuǎn)程監(jiān)測系統(tǒng)的數(shù)據(jù)庫選用PostgreSQL,數(shù)據(jù)庫中user表,用來存儲監(jiān)測系統(tǒng)注冊用戶信息,包括用戶名,密碼,注冊時(shí)間,使用權(quán)限等;equipment表用來存儲設(shè)備基本參數(shù)信息;tools表用來存儲設(shè)備刀庫信息,包括刀具長度,半徑,偏置等;failure表用來存儲設(shè)備故障信息,包括故障等級,故障原因,解決措施等;evaluation表用來存儲設(shè)備的評估信息;每臺設(shè)備對應(yīng)的datas表用來存儲設(shè)備監(jiān)測信息,包括設(shè)備開機(jī)時(shí)間,加工產(chǎn)品數(shù),加工效率,電機(jī)溫度及負(fù)載率等;alarm表用來存儲設(shè)備的報(bào)警信息。
服務(wù)器端程序采用應(yīng)用Flask框架,通過blueprints實(shí)現(xiàn)功能模塊的分離開發(fā),在此基礎(chǔ)上,程序采用多線程設(shè)計(jì),針對數(shù)控加工中心加工產(chǎn)品數(shù)量和報(bào)警信息等需要實(shí)時(shí)采集統(tǒng)計(jì)的信息,在設(shè)備連接成功后,分別采用一個(gè)獨(dú)立的循環(huán)線程實(shí)時(shí)采集;針對固定監(jiān)測頻率的信號采用一個(gè)單次觸發(fā)的線程,通過端口實(shí)時(shí)監(jiān)聽Web端發(fā)送的API請求,觸發(fā)單次線程進(jìn)行信息讀取。服務(wù)端程序工作流程如圖3所示,程序啟動會并實(shí)時(shí)監(jiān)聽Web請求,接收到請求后進(jìn)行設(shè)備Socket連接,連接失敗則直接返回異常,連接成功啟動程序開啟循環(huán)線程,根據(jù)不同API請求單次線程調(diào)用相應(yīng)函數(shù)進(jìn)行數(shù)據(jù)獲取,將多線程數(shù)據(jù)返回Web端,并進(jìn)行數(shù)據(jù)存儲,斷開單次線程設(shè)備連接后,繼續(xù)監(jiān)聽API請求。
圖3 服務(wù)端程序工作流程
Web端應(yīng)用React架構(gòu)[10],界面間的工作邏輯如圖4所示,監(jiān)測系統(tǒng)開啟后首先進(jìn)行登錄身份認(rèn)證,登錄界面將登錄信息發(fā)送至服務(wù)器,服務(wù)器程序通過與數(shù)據(jù)庫user數(shù)據(jù)表中用戶信息進(jìn)行驗(yàn)證匹配,登錄成功后進(jìn)入用于顯示監(jiān)測設(shè)備的基本信息的系統(tǒng)主界面,可點(diǎn)擊設(shè)備名稱進(jìn)入其單臺監(jiān)測界面,也可通過導(dǎo)航欄選擇進(jìn)入操作記錄界面、多臺設(shè)備監(jiān)測界面、單臺設(shè)備監(jiān)測界面以及信息查詢界面,各個(gè)界面通過向服務(wù)器端發(fā)送API請求獲取數(shù)據(jù),進(jìn)行數(shù)據(jù)刷新,服務(wù)器拒絕API請求時(shí),會自動跳轉(zhuǎn)異常提示界面,系統(tǒng)以定時(shí)循環(huán)的方式不斷向服務(wù)器端發(fā)送請求,直至監(jiān)測系統(tǒng)關(guān)閉,停止監(jiān)測。
圖4 Web端界面工作流程
圖5 遠(yuǎn)程監(jiān)測系統(tǒng)部分監(jiān)測界面
Web界面設(shè)計(jì)開發(fā)主要包括主界面、登錄注冊界面、單臺設(shè)備監(jiān)測界面、多臺設(shè)備監(jiān)測界面以及信息查詢和操作記錄界面等,其中部分監(jiān)測界面如圖5所示。其中信息查詢界面顯示的信息見表1,包括故障信息,基本參數(shù)信息,設(shè)備刀庫信息查詢。
表1 信息查詢功能表
單臺設(shè)備監(jiān)測頁面顯示的信息見表2,數(shù)控加工設(shè)備的基本參數(shù)以及從數(shù)據(jù)庫中獲取的歷史信息的顯示在頁面加載時(shí)完成,不需要實(shí)時(shí)更新,開機(jī)時(shí)間、加工數(shù)量、產(chǎn)能以及電機(jī)溫度等緩慢變化信息的刷新頻率為5s刷新一次,軸坐標(biāo)、報(bào)警信息、加工程序段以及已加工時(shí)間等信息刷新頻率為1s刷新一次。其中軸坐標(biāo)信息監(jiān)測模塊、電機(jī)溫度監(jiān)測模塊、電機(jī)負(fù)載率和實(shí)際功率監(jiān)測模塊可以單獨(dú)控制其開始監(jiān)測和停止監(jiān)測。
表2 單臺設(shè)備監(jiān)測信息
多臺設(shè)備同時(shí)監(jiān)測界面可實(shí)時(shí)顯示每臺設(shè)備的運(yùn)行狀態(tài),包括是設(shè)備離線、空閑、加工中、暫停中、報(bào)警、急停等狀態(tài),設(shè)備當(dāng)前使用刀具名稱、編號、類型和姿態(tài),設(shè)備冷卻潤滑狀態(tài),各電機(jī)實(shí)時(shí)溫度信息,設(shè)備加工效率和產(chǎn)能,以及運(yùn)行時(shí)間等關(guān)鍵信息。
多臺設(shè)備同時(shí)監(jiān)測界面利用React生命周期中componentDidMount函數(shù)實(shí)現(xiàn)向服務(wù)器發(fā)送請求功能,監(jiān)測按鈕控制是否對數(shù)控加工設(shè)備進(jìn)行監(jiān)測,componentDidMount會在頁面加載完成后自動觸發(fā)setInterval函數(shù),實(shí)現(xiàn)以固定頻率對處于監(jiān)測狀態(tài)的設(shè)備進(jìn)行監(jiān)測。由于服務(wù)器程序采用模塊化設(shè)計(jì),針對不同數(shù)控加工設(shè)備為Web端定義不同的API,導(dǎo)致componentDidMount函數(shù)中需要同時(shí)調(diào)用多個(gè)API接口,Web端同時(shí)發(fā)出多個(gè)請求時(shí)性能會下降。這種情況下,令多臺設(shè)備監(jiān)測頁面以10s刷新一次的頻率同時(shí)監(jiān)測10臺設(shè)備,對其性能進(jìn)行了分析,在一個(gè)組件生命周期中,10條請求每條平均時(shí)長3.8s,總計(jì)用時(shí)7.37s,其中同10條請求同時(shí)響應(yīng)時(shí)長0.47s,占總時(shí)長的6.38%,時(shí)響應(yīng)5條以上請求時(shí)長4.39s,占總時(shí)長的59.57%,造成頁面卡頓,需要進(jìn)一步進(jìn)行優(yōu)化。
針對上述情況,頁面響應(yīng)速度慢的主要原因是同時(shí)響應(yīng)了多條api請求,所以對多臺設(shè)備同時(shí)監(jiān)測頁面實(shí)現(xiàn)方式進(jìn)行調(diào)整,不在componentDidMount函數(shù)中觸發(fā)setInterval,采取在點(diǎn)擊監(jiān)測按鈕改變設(shè)備監(jiān)測狀態(tài)的同時(shí)觸發(fā)相應(yīng)的setInterval函數(shù),即將原先一個(gè)setInterval函數(shù)一次更新10臺設(shè)備State信息,改為由10個(gè)setInterval函數(shù)分別更新10臺設(shè)備State信息,從而達(dá)到分散響應(yīng)請求的目的。再次令多臺設(shè)備監(jiān)測頁面以10s刷新一次的頻率同時(shí)監(jiān)測10臺設(shè)備,在每條請求獲取數(shù)據(jù)大小為1.1KB不變的前提下,每條請求平均時(shí)長約為288.5ms,響應(yīng)速度提高約13.3倍,其中存在同時(shí)響應(yīng)兩條請求的情況,此時(shí)請求平均時(shí)長為583.25ms,高于平均時(shí)長2倍,證明界面同時(shí)響應(yīng)多條api請求時(shí),響應(yīng)速度會下降。
通過對API請求分散化的處理方式對多臺設(shè)備同時(shí)監(jiān)測界面進(jìn)行了優(yōu)化,不僅使數(shù)控加工設(shè)備遠(yuǎn)程監(jiān)測系統(tǒng)的響應(yīng)速度大幅提升,頁面刷新流暢,同時(shí)也提高了監(jiān)測系統(tǒng)的擴(kuò)展能力,當(dāng)生產(chǎn)線上數(shù)控加工設(shè)備數(shù)量增加時(shí),監(jiān)測系統(tǒng)的Web端頁面仍可具有流暢刷新能力。
應(yīng)用Locust工具進(jìn)行監(jiān)測系統(tǒng)性能測試,使用Python編寫腳本來定義用戶行為,模擬多個(gè)并發(fā)用戶訪問操作監(jiān)測系統(tǒng)。腳本中模擬定義用戶首先打開監(jiān)測系統(tǒng)根目錄,然后分別進(jìn)入10臺設(shè)備監(jiān)測界面,并模擬向服務(wù)器發(fā)送相應(yīng)的api請求,獲取每臺設(shè)備監(jiān)測信息,包括各軸位置,電機(jī)溫度、負(fù)載和功率、以及設(shè)備狀態(tài)和加工效率等。設(shè)定每個(gè)任務(wù)最小等待時(shí)間為1000ms,最大等待時(shí)間為5000ms。運(yùn)行python腳本對系統(tǒng)進(jìn)行壓力測試,分別模擬了不同個(gè)數(shù)用戶同時(shí)對監(jiān)測系統(tǒng)進(jìn)行操作的場景,每次測試時(shí)間為5min,測試結(jié)果如表3所示。
表3 系統(tǒng)性能分析結(jié)果
從壓力測試結(jié)果可知,在30個(gè)用戶以下同時(shí)操作監(jiān)控系統(tǒng)時(shí),請求速度小于10reqs/s,監(jiān)測系統(tǒng)能零失敗率的返回用戶相應(yīng)數(shù)據(jù);在30個(gè)用戶同時(shí)操作監(jiān)測系統(tǒng),請求速度達(dá)到10.02reqs/s時(shí),發(fā)出的2885條請求中出現(xiàn)1條請求失敗,失敗率為0.03%,即使同時(shí)使用的用戶數(shù)量達(dá)到100個(gè),請求速度達(dá)到32.47reqs/s,失敗率僅有0.13%左右,并且從請求的平均響應(yīng)時(shí)間可以看出,平均響應(yīng)時(shí)間保持在30~40ms,不隨請求速度變化而變化。本文開發(fā)設(shè)計(jì)的數(shù)控加工設(shè)備遠(yuǎn)程監(jiān)控系統(tǒng)擬應(yīng)用在生產(chǎn)車間,為研究制造過程中加工設(shè)備的智能預(yù)警及診斷系統(tǒng)收集基礎(chǔ)數(shù)據(jù),使用用戶較少,主要監(jiān)測信息刷新間隔5s,在需要時(shí)才開始監(jiān)測部分刷新間隔為1s、2s的信息,監(jiān)測系統(tǒng)性能完全滿足實(shí)際需求。
本文針對生產(chǎn)線上多臺數(shù)控加工設(shè)備開發(fā)了一套基于B/S架構(gòu)的遠(yuǎn)程實(shí)時(shí)監(jiān)測系統(tǒng),介紹了監(jiān)測系統(tǒng)服務(wù)器端和Web端的開發(fā)流程,使用Python語言開發(fā)的服務(wù)器端程序基于Socket讀取數(shù)控系統(tǒng)中的多源數(shù)據(jù),并使用ORM框架分類存儲到PostgreSQL數(shù)據(jù)庫;基于React開發(fā)的Web端通過API接口與服務(wù)器端程序進(jìn)行數(shù)據(jù)交換,采用請求分散化的方式優(yōu)化了多臺設(shè)備同時(shí)監(jiān)測功能,應(yīng)用Locust測試工具驗(yàn)證了監(jiān)測系統(tǒng)性能。開發(fā)的遠(yuǎn)程監(jiān)測系統(tǒng)可以作為數(shù)控設(shè)備可靠性以及智能化提升研究基礎(chǔ)。