(浙江工業(yè)大學(xué) 信息工程學(xué)院,杭州 310023)
隨著智能制造時(shí)代的來(lái)臨,在工業(yè)生產(chǎn)領(lǐng)域提出了工業(yè)物聯(lián)網(wǎng)[1]的概念,其目的是通過(guò)工業(yè)資源的網(wǎng)絡(luò)互聯(lián)、數(shù)據(jù)互通和系統(tǒng)相互操作,實(shí)現(xiàn)制造過(guò)程的合理優(yōu)化和制造環(huán)境的快速適應(yīng),以達(dá)到資源的高效利用。同時(shí),云平臺(tái)技術(shù)的提出使得互聯(lián)網(wǎng)真正進(jìn)入了云計(jì)算時(shí)代,依托云平臺(tái)將本地軟、硬件資源虛擬化,可以改變工業(yè)生產(chǎn)的模式并提升效率。
皮革加工行業(yè)中,裁斷機(jī)作為一種被廣泛使用的傳統(tǒng)手工設(shè)備,加工企業(yè)主要依靠人工方式進(jìn)行裁斷作業(yè),該方式不僅需要大量勞動(dòng)力,且對(duì)于沖裁料的利用率低下,難以達(dá)到理想的效果。為了在一個(gè)有限的沖裁區(qū)間內(nèi)實(shí)現(xiàn)對(duì)沖裁樣片的充分排列,提高沖裁料的利用率,許繼影[2]等人提出基于兩階段排放算法的矩形排樣優(yōu)化方法、Satoshi Fujita[3]等人研究了可旋轉(zhuǎn)物品在二維裝箱問(wèn)題中的解。如今對(duì)于裁斷機(jī)等傳統(tǒng)工業(yè)設(shè)備的聯(lián)網(wǎng)研究多數(shù)只是對(duì)其運(yùn)行數(shù)據(jù)進(jìn)行監(jiān)測(cè)[4],如孫愷廷[5]等人設(shè)計(jì)的工業(yè)機(jī)器人三維虛擬監(jiān)控系統(tǒng)、胡曉軒[6]等人面向船舶制造車(chē)間的數(shù)據(jù)采集與監(jiān)控系統(tǒng),這些研究往往是依靠各種傳感器設(shè)備將設(shè)備運(yùn)行數(shù)據(jù)進(jìn)行采集,之后通過(guò)對(duì)采集的數(shù)據(jù)做進(jìn)一步分析,得出設(shè)備是否運(yùn)行正常等結(jié)論,但并未改變?cè)O(shè)備的控制模式。目前,裁斷機(jī)的控制系統(tǒng)大多采用客戶端/服務(wù)端模式搭建,并嵌入了排樣算法實(shí)現(xiàn)裁床對(duì)沖裁料的自動(dòng)加工。該模式下,對(duì)于每個(gè)機(jī)床終端在本地均需要為其配備一套相關(guān)設(shè)備[7],并安裝客戶端軟件,當(dāng)終端數(shù)量增加時(shí),其配套設(shè)備的成本會(huì)十分巨大。
針對(duì)上述問(wèn)題,本文在裁斷機(jī)原有的客戶端/服務(wù)端控制模式基礎(chǔ)上,結(jié)合云技術(shù)和WEB技術(shù)設(shè)計(jì)了一款基于阿里云的裁斷機(jī)監(jiān)控系統(tǒng),依靠云平臺(tái)減少了系統(tǒng)對(duì)本地硬件資源的需求。系統(tǒng)主要分為本地運(yùn)動(dòng)控制端和阿里云WEB監(jiān)控端。其中,WEB監(jiān)控端采用前后端分離的方式搭建,前端用戶操作界面基于VUE框架編寫(xiě),后端基于Django框架編寫(xiě)。本地運(yùn)動(dòng)控制端的工作主要是在本地服務(wù)器搭建了上位機(jī)系統(tǒng),采用OPC UA協(xié)議實(shí)現(xiàn)了與裁斷機(jī)設(shè)備控制器的信息交互,采用MQTT協(xié)議完成了與云端的信息交互。最終使得用戶可以通過(guò)訪問(wèn)部署在阿里云的操作界面完成對(duì)本地裁斷機(jī)設(shè)備的監(jiān)控。
系統(tǒng)硬件結(jié)構(gòu)如圖1所示。本地運(yùn)動(dòng)控制端由服務(wù)器、控制器和裁斷機(jī)設(shè)備組成。服務(wù)器搭建有上位機(jī)系統(tǒng),該上位機(jī)系統(tǒng)通過(guò)OPC UA協(xié)議[8]實(shí)現(xiàn)一臺(tái)服務(wù)器與多個(gè)控制器間的數(shù)據(jù)交互,控制器采用AM335X芯片并搭建CodeSys系統(tǒng),通過(guò)EtherCAT總線實(shí)現(xiàn)對(duì)裁斷機(jī)設(shè)備的控制。WEB監(jiān)控端則部署在阿里云服務(wù)器上,實(shí)現(xiàn)用戶能夠通過(guò)訪問(wèn)相關(guān)的網(wǎng)站地址,對(duì)本地的設(shè)備完成監(jiān)控。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
整個(gè)監(jiān)控系統(tǒng)以基于CoDeSys[9]開(kāi)發(fā)的裁斷機(jī)控制系統(tǒng)為研究對(duì)象進(jìn)行搭建,主要完成阿里云WEB監(jiān)控端和本地上位機(jī)系統(tǒng)的開(kāi)發(fā),實(shí)現(xiàn)對(duì)裁斷機(jī)的監(jiān)控,整體軟件設(shè)計(jì)框圖如圖2所示。
圖2 系統(tǒng)軟件結(jié)構(gòu)圖
通過(guò)在本地服務(wù)器搭建上位機(jī)系統(tǒng),實(shí)現(xiàn)云端與本地控制器的數(shù)據(jù)交互。上位機(jī)主要采用Winfom框架開(kāi)發(fā),通過(guò)嵌入MQTT客戶端[10]和MySQL客戶端[11]實(shí)現(xiàn)與云端的數(shù)據(jù)通訊;通過(guò)嵌入OPC UA客戶端實(shí)現(xiàn)與控制器的數(shù)據(jù)通訊。其中MQTT主要完成一些實(shí)時(shí)控制命令的下發(fā);MySQL用于存儲(chǔ)設(shè)備的運(yùn)行數(shù)據(jù);OPC UA實(shí)現(xiàn)將裁斷機(jī)運(yùn)行數(shù)據(jù)下發(fā)至設(shè)備控制器以及回傳設(shè)備當(dāng)前的運(yùn)行狀態(tài)信息。
阿里云WEB監(jiān)控端分為前后端兩部分,前端采用VUE框架開(kāi)發(fā),用戶可以操作前端頁(yè)面生成相關(guān)控制命令并依靠嵌入的MQTT客戶端完成命令的下發(fā);后端采用Django框架[12]搭建,編寫(xiě)了排樣算法負(fù)責(zé)生成裁斷機(jī)設(shè)備的運(yùn)行數(shù)據(jù),并保存至數(shù)據(jù)庫(kù)。
系統(tǒng)整體的監(jiān)控流程如下:用戶使用平板電腦等移動(dòng)終端訪問(wèn)部署在云服務(wù)器的WEB界面,生成合適的刀模排樣結(jié)果[13-14]并下發(fā)控制命令至本地服務(wù)器,本地服務(wù)器中的上位機(jī)監(jiān)聽(tīng)到云端的控制命令后,會(huì)去數(shù)據(jù)庫(kù)中讀取對(duì)應(yīng)的沖裁數(shù)據(jù)并下發(fā)至目標(biāo)裁斷機(jī)的控制器,控制器根據(jù)這些數(shù)據(jù)控制裁斷機(jī)完成對(duì)沖裁料的加工。在沖裁的過(guò)程中,本地服務(wù)器會(huì)實(shí)時(shí)返回沖裁過(guò)程中裁斷機(jī)的運(yùn)行狀態(tài),如當(dāng)前正在沖裁的樣片序號(hào)、本次對(duì)沖裁料的加工是否完成等。
本地對(duì)于裁斷機(jī)設(shè)備的控制系統(tǒng)主要采用C/S(客戶端/服務(wù)器端)模式進(jìn)行搭建,主要由服務(wù)器與設(shè)備控制器組成。在服務(wù)器搭建有上位機(jī)系統(tǒng)并嵌入了OPC UA、MQTT以及MySQL客戶端。其中,OPC UA客戶端用于和裁斷機(jī)控制器實(shí)現(xiàn)信息的交互;MQTT客戶端模塊實(shí)現(xiàn)與云端實(shí)時(shí)數(shù)據(jù)的傳輸;MySQL客戶端模塊實(shí)現(xiàn)對(duì)云端MySQL數(shù)據(jù)庫(kù)的存取操作。
傳統(tǒng)的工業(yè)自動(dòng)化解決方案由于在設(shè)備間的通信上采用不兼容和不可互操作的差別化標(biāo)準(zhǔn),因而存在數(shù)據(jù)交互的困難。OPC UA協(xié)議采用客戶端/服務(wù)器模式和發(fā)布者/訂閱者模式為不同設(shè)備間實(shí)現(xiàn)信息的交互提供了方法。通過(guò)在地址空間定義節(jié)點(diǎn)類(lèi)并實(shí)例化,采用層次結(jié)構(gòu)進(jìn)行訪問(wèn)簡(jiǎn)化了客戶端的訪問(wèn)。C#語(yǔ)言可以實(shí)現(xiàn)OPC UA的自動(dòng)化接口,開(kāi)放給用戶一些方便的接口,支持自動(dòng)配置、過(guò)程控制和數(shù)據(jù)存取功能的開(kāi)發(fā)。通過(guò)在窗口界面中搭建用戶輸入和響應(yīng)事件模塊,實(shí)現(xiàn)了瀏覽OPC UA服務(wù)器、修改數(shù)據(jù)以及訂閱數(shù)據(jù)等功能,其流程圖如3所示,具體實(shí)現(xiàn)方式如下:
圖3 OPC UA協(xié)議數(shù)據(jù)交互流程圖
(1)訪問(wèn)OPC UA服務(wù)器節(jié)點(diǎn):在主程序中引用“OpcUaHelper.Forms”庫(kù),使用庫(kù)中的FormBrowseServer()函數(shù)實(shí)例化一個(gè)MyForm對(duì)象,該對(duì)象能夠以結(jié)構(gòu)層次的方式對(duì)OPC UA服務(wù)器中的節(jié)點(diǎn)進(jìn)行訪問(wèn)。在訪問(wèn)過(guò)程中,能夠游覽服務(wù)器所開(kāi)放的相關(guān)節(jié)點(diǎn)信息。
(2)訂閱節(jié)點(diǎn)數(shù)據(jù):使用“OpcUaHelper.Forms”庫(kù)中的OpcUaClient()函數(shù)實(shí)例化一個(gè)OPC UA客戶端對(duì)象,該對(duì)象內(nèi)部包含了一系列對(duì)于服務(wù)器節(jié)點(diǎn)信息操作的方法。本系統(tǒng)采用其中的ConnectServer()方法實(shí)現(xiàn)對(duì)OPC UA服務(wù)器的連接,采用ReadNode()方法實(shí)現(xiàn)對(duì)OPC UA服務(wù)器的設(shè)備運(yùn)行數(shù)據(jù)的采集,將所采集的數(shù)據(jù)轉(zhuǎn)成字符串形式并用C#語(yǔ)言中的String變量進(jìn)行保存,用于后續(xù)與云端MQTT服務(wù)器進(jìn)行數(shù)據(jù)交互。
(3)修改節(jié)點(diǎn)數(shù)據(jù):采用“OpcUaHelper.Forms”庫(kù)中的WriteNode()方法實(shí)現(xiàn)對(duì)OPC UA服務(wù)器相關(guān)數(shù)據(jù)的修改,該函數(shù)均是通過(guò)訪問(wèn)OPC UA服務(wù)器中節(jié)點(diǎn)的各個(gè)層次結(jié)構(gòu),在TCP/IP通訊協(xié)議的基礎(chǔ)上完成對(duì)裁斷機(jī)設(shè)備運(yùn)行參數(shù)的修改。
為了實(shí)現(xiàn)本地與云端的數(shù)據(jù)交互,在上位機(jī)中嵌入了MQTT客戶端模塊和MySQL客戶端模塊。其中,MQTT主要用于和云端的實(shí)時(shí)數(shù)據(jù)交互,比如接收下發(fā)的運(yùn)行設(shè)備編號(hào)和回傳設(shè)備運(yùn)行狀態(tài)信息等,MySQL主要存放生成的排樣方案所對(duì)應(yīng)的裁斷機(jī)運(yùn)行數(shù)據(jù)。
(1)MySQL客戶端模塊:MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系型數(shù)據(jù)庫(kù)會(huì)將數(shù)據(jù)保存在不同的表中以增加存取速度并提高靈活性。如今,MySQL已經(jīng)為各種編程語(yǔ)言提供了API接口,同時(shí)能夠作為一個(gè)庫(kù)嵌入其他的軟件中,使嵌入客戶端的方式實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)得以實(shí)現(xiàn),不僅提高了數(shù)據(jù)交互的實(shí)時(shí)性,也降低了本地客戶端的內(nèi)存空間消耗。本系統(tǒng)的數(shù)據(jù)讀取模塊采用C#語(yǔ)言進(jìn)行搭建并嵌入到本地上位機(jī)系統(tǒng),在功能上實(shí)現(xiàn)對(duì)設(shè)備運(yùn)行數(shù)據(jù)的讀取和解析。
(2)MQTT客戶端模塊:目前基于HTTP協(xié)議的物聯(lián)網(wǎng)系統(tǒng)開(kāi)發(fā)的方式被頻繁采用,但在一些嵌入式系統(tǒng)或網(wǎng)絡(luò)帶寬昂貴的開(kāi)發(fā)情況下,HTTP協(xié)議并不適用。MQTT作為一種低開(kāi)銷(xiāo)、低帶寬占用的即時(shí)通訊協(xié)議,在工業(yè)物聯(lián)網(wǎng)、小型設(shè)備等方面有廣泛的應(yīng)用。因此本客戶端選擇采用MQTT協(xié)議搭建數(shù)據(jù)交互模塊,實(shí)現(xiàn)對(duì)設(shè)備沖裁指令的下發(fā)和沖裁狀態(tài)信息的回傳。
阿里云WEB監(jiān)控端基于B/S(瀏覽器/服務(wù)器)架構(gòu)進(jìn)行搭建,采用前后端分離的方式開(kāi)發(fā)并部署至阿里云服務(wù)器。其中,前端WEB操作界面基于VUE框架編輯,開(kāi)發(fā)了用戶操作界面和排樣結(jié)果可視化區(qū)域。后端采用Django框架搭建,主要編寫(xiě)了刀模樣片排樣算法,可以根據(jù)刀模圖形的DXF文件信息[15]生成裁斷機(jī)設(shè)備的控制參數(shù)。在此基礎(chǔ)上,通過(guò)嵌入MQTT客戶端模塊實(shí)現(xiàn)和本地服務(wù)器的信息交互,監(jiān)控端功能框圖如圖4所示。
圖4 WEB監(jiān)控端功能框圖
為了實(shí)現(xiàn)對(duì)沖裁料的充分利用,需要對(duì)刀模樣片進(jìn)行排樣。排樣的目標(biāo)是在特定區(qū)域的矩形沖裁料內(nèi)放置盡可能多的樣片,且樣片之間不能互相重合。本文根據(jù)實(shí)際沖裁情況設(shè)計(jì)了針對(duì)單一刀模樣片的排樣算法,算法將沖裁方案主要分為水平垂直正排、水平對(duì)頭單排垂直正排、水平正排垂直對(duì)頭單排3種。
如圖5所示,將圖中沖裁料坐標(biāo)系記為{B},沖裁料第i行、j列刀模樣片的坐標(biāo)系記為{Bij},{Bij}的原點(diǎn)相對(duì)于坐標(biāo)系{B}的坐標(biāo)值為xij、yij,其旋轉(zhuǎn)角度為θij。令dij(θij,θj(j+1))為沖裁料上排列的第i行、j列樣片與第i行、j+1列樣片的水平步距,d01為{B11}坐標(biāo)原點(diǎn)到?jīng)_裁料Y軸的水平距離,dN(N+1)為第1行、N列樣片坐標(biāo)系{B1N}的坐標(biāo)原點(diǎn)到該樣片右側(cè)邊緣切線的水平距離。hij(θij,θ(i+1)j)為在沖裁料排列的第i行、j列樣片與第i+1行、j列樣片的垂直步距,h01為{B11}坐標(biāo)原點(diǎn)到?jīng)_裁料X軸邊界的水平步距,h34為第3行、1列樣片坐標(biāo)系{B31}坐標(biāo)原點(diǎn)到該樣片上方邊緣切線的垂直距離。
水平垂直正排方案的排列情況如圖5所示,在該方案下,沖裁料上排列的樣片旋轉(zhuǎn)角度均一致。
圖5 水平垂直正排示意圖
水平對(duì)頭單排垂直正排方案的排列情況如圖6所示,在該方案下,沖裁料上排列的樣片奇數(shù)列和偶數(shù)列的旋轉(zhuǎn)角度差180°。
圖6 水平對(duì)頭單排垂直正排示意圖
水平正排垂直對(duì)頭單排方案的排列情況如圖7所示,在該方案下,沖裁料上排列的樣片奇數(shù)行和偶數(shù)行的旋轉(zhuǎn)角度差180°。
圖7 水平正排垂直對(duì)頭單排示意圖
記沖裁料一行能夠排列的樣片個(gè)數(shù)為N,m為一行樣片的總寬度,M為沖裁料的寬度,有m=d01+…+d(N-1)N,m 圖8 排樣方案生成流程圖 為了能夠?qū)崿F(xiàn)云端對(duì)本地設(shè)備進(jìn)行實(shí)時(shí)的數(shù)據(jù)交互,本系統(tǒng)依靠MQTT協(xié)議在阿里云服務(wù)器搭建了實(shí)時(shí)監(jiān)控平臺(tái),實(shí)現(xiàn)了與MQTT服務(wù)器的數(shù)據(jù)交互、裁斷機(jī)沖裁命令的下發(fā)以及沖裁過(guò)程狀態(tài)信息回傳等功能,具體實(shí)現(xiàn)方式如下: (1)與MQTT服務(wù)器交互:在前端VUE項(xiàng)目中引入Paho功能包,實(shí)現(xiàn)MQTT客戶端功能,生成MQTT客戶端前先編輯用于連接MQTT服務(wù)器的參數(shù)列表,如服務(wù)器IP地址、端口號(hào)等,具體如下ServerUri=′mq.tongxinmao.com′ServerPort=18832;TimeOut=5;KeepAlive=100;CleanSession=false;SSL=false;在此基礎(chǔ)上調(diào)用new Paho.MQTT.Client函數(shù),創(chuàng)建MQTT Client實(shí)例,編寫(xiě)onConnect()函數(shù)和onConnectionLost()函數(shù)用于登錄和斷開(kāi)MQTT服務(wù)器;編寫(xiě)WriteToStatus()函數(shù),用于描述MQTT狀態(tài);編寫(xiě)onMessageArrived()函數(shù),用于接收MQTT服務(wù)器的消息,實(shí)現(xiàn)與MQTT服務(wù)器數(shù)據(jù)交互功能。 (2)沖裁命令的下發(fā):在前端VUE項(xiàng)目中編寫(xiě)MQTT客戶端函數(shù),當(dāng)用戶點(diǎn)擊發(fā)送按鈕時(shí),將待運(yùn)行的裁斷機(jī)編號(hào)傳至MQTT服務(wù)器中特定的主題文件,本地服務(wù)器監(jiān)聽(tīng)到該主題有數(shù)據(jù)會(huì)將主題中的數(shù)據(jù)讀至本地并去云端數(shù)據(jù)庫(kù)中取得運(yùn)行數(shù)據(jù),完成下發(fā)。 (3)沖裁過(guò)程狀態(tài)信息實(shí)時(shí)回傳:當(dāng)裁斷機(jī)設(shè)備在運(yùn)行時(shí),搭建在本地服務(wù)器會(huì)通過(guò)MQTT協(xié)議以一定的時(shí)間間隔將運(yùn)行數(shù)據(jù)上傳至云端,該數(shù)據(jù)會(huì)被搭建在前端界面的MQTT客戶端訂閱并在可視化區(qū)域進(jìn)行標(biāo)記,實(shí)現(xiàn)了沖裁過(guò)程中對(duì)裁斷機(jī)運(yùn)行狀態(tài)的實(shí)時(shí)監(jiān)控。 對(duì)于本文設(shè)計(jì)的控制系統(tǒng),通過(guò)實(shí)驗(yàn)驗(yàn)證其可行性。在WEB游覽器中輸入云端IP地址訪問(wèn)操作界面,在界面中選用具有明顯大小頭的且形狀不規(guī)則1號(hào)刀模,點(diǎn)擊3種排樣方式最優(yōu)解按鈕,在可視化區(qū)域可觀察到1號(hào)刀模樣片在一張寬為1 400 mm沖裁料上的排樣結(jié)果,如圖9所示。 圖9 排樣結(jié)果顯示 當(dāng)確定最優(yōu)排樣方案后,選擇待運(yùn)行的裁斷機(jī)編號(hào)并點(diǎn)擊下發(fā)裁斷任務(wù)按鈕,系統(tǒng)會(huì)將排樣區(qū)域中第i行、j列樣片旋轉(zhuǎn)中心相對(duì)沖裁料原點(diǎn)的二維坐標(biāo)值xij、yij以及自身旋轉(zhuǎn)角θij存入后端數(shù)據(jù)庫(kù)中,并發(fā)送裁斷機(jī)編號(hào)至本地服務(wù)器,數(shù)據(jù)庫(kù)中第一行沖裁樣片的排樣數(shù)據(jù)如表1所示。 表1 第一行沖裁樣片的排樣數(shù)據(jù) 本地服務(wù)器收到裁斷命令后,會(huì)讀取云端數(shù)據(jù)庫(kù)中的運(yùn)行數(shù)據(jù),并下發(fā)至裁斷機(jī)控制器,控制器界面顯示了裁斷機(jī)的運(yùn)行狀態(tài),并支持用戶對(duì)裁斷機(jī)做一些簡(jiǎn)單的手動(dòng)操作,控制器界面如圖10所示。 圖10 裁斷機(jī)控制器界面 綜上,測(cè)試結(jié)果表明本文所設(shè)計(jì)的系統(tǒng)能夠很好的對(duì)裁斷機(jī)進(jìn)行監(jiān)控。由表1可知,系統(tǒng)所設(shè)計(jì)的排樣算法能夠生成裁斷機(jī)所需的運(yùn)行數(shù)據(jù),并且依靠相應(yīng)的傳輸協(xié)議可以將數(shù)據(jù)發(fā)送至設(shè)備控制器,實(shí)現(xiàn)對(duì)沖裁料的加工。 本文設(shè)計(jì)了一種基于云平臺(tái)的裁斷機(jī)監(jiān)控系統(tǒng),在本地服務(wù)器基于Winform框架搭建了上位機(jī)系統(tǒng),通過(guò)OPC UA協(xié)議實(shí)現(xiàn)了與裁斷機(jī)控制器的數(shù)據(jù)交互。在阿里云服務(wù)器基于VUE框架設(shè)計(jì)了前端用戶操作界面,并通過(guò)Canvas標(biāo)簽搭建了排樣結(jié)果可視化區(qū)域?;贒jango框架設(shè)計(jì)了后端,主要編寫(xiě)了刀模排樣算法用于生成單一刀模樣片在從材料上的排樣方案。同時(shí),通過(guò)搭建MQTT數(shù)據(jù)交互模塊實(shí)現(xiàn)了裁斷機(jī)控制命令的下發(fā)和運(yùn)行數(shù)據(jù)的回傳。通過(guò)該系統(tǒng),用戶可以完成對(duì)裁斷機(jī)設(shè)備的監(jiān)控。本文下一步研究工作的重點(diǎn)是將裁斷機(jī)設(shè)備的運(yùn)行數(shù)據(jù)進(jìn)行采集并根據(jù)數(shù)據(jù)對(duì)設(shè)備進(jìn)行故障分析。3.2 數(shù)據(jù)實(shí)時(shí)監(jiān)控
4 實(shí)驗(yàn)結(jié)果與分析
5 結(jié)束語(yǔ)