徐建明 張宇軒 朱俊威 俞 立
(浙江工業(yè)大學(xué)信息工程學(xué)院 杭州310023)
工業(yè)生產(chǎn)不斷向信息化發(fā)展過程中,監(jiān)控系統(tǒng)起到了不可或缺的作用。4G 無線監(jiān)控系統(tǒng)可以用于一些特定環(huán)境,但是在要求大規(guī)模數(shù)據(jù)傳輸和設(shè)備遠(yuǎn)程操控作業(yè)環(huán)境下比較無力。隨著5G 的到來這些問題將迎刃而解。
5G 相比于4G 網(wǎng)絡(luò)具有更低的延時和更高的速率及容量[1]。低延時與大容量可以使5G[2-3]應(yīng)用于實時高精度的操作環(huán)境下,如王浩等人[4]基于5G網(wǎng)絡(luò)對城市軌道交通全自動無人駕駛列車控制系統(tǒng)研究。5G 網(wǎng)絡(luò)的高速率、低延時同樣適用于監(jiān)控系統(tǒng),使監(jiān)控系統(tǒng)更加高效、穩(wěn)定和可靠,柳曦等人[5]和Rehmani 等人[6]提出了5G 通信技術(shù)在火電廠的應(yīng)用。應(yīng)巨林等人[7]進(jìn)行了基于5G 技術(shù)的農(nóng)作物視頻監(jiān)控平臺的研究與應(yīng)用。
傳統(tǒng)的工業(yè)監(jiān)控系統(tǒng)大多采用硬可編程邏輯控制器(programmable logic controller,PLC),如鄧鑫[8]使用S7-300 設(shè)計煤礦帶式輸送機運行監(jiān)控系統(tǒng)。郭恒瑞等人[9]提出了基于PLC 設(shè)計的礦用裝煤平車線監(jiān)控系統(tǒng)。但是硬PLC 通常用于一些邏輯控制系統(tǒng),難以勝任多軸運動控制。隨著計算機技術(shù)的迅速發(fā)展及PLCopen[10-11]標(biāo)準(zhǔn)的提出,嵌入式軟PLC 技術(shù)的出現(xiàn)打破了傳統(tǒng)PLC 的局限性。嵌入式軟PLC 具有開放的硬件體系結(jié)構(gòu),豐富的指令集,更高的性價比,適用于計算機網(wǎng)絡(luò)和開發(fā)方便等特性。軟PLC 在監(jiān)控系統(tǒng)中越來越流行,如徐建明等人[12]使用Soft PLC Running System[13]實現(xiàn)基于WEB 的工業(yè)機器人3D 虛擬動態(tài)監(jiān)控系統(tǒng)。目前的監(jiān)控系統(tǒng)大多采用C/S(客戶端/服務(wù)器)模式搭建,如張愛民等人[14]基于TCP/IP 協(xié)議設(shè)計的工業(yè)機器人遠(yuǎn)程監(jiān)控與診斷系統(tǒng),此模式下,用戶需要安裝客戶端。然而采用B/S(瀏覽器/服務(wù)器)框架搭建的監(jiān)控系統(tǒng)簡潔方便,如吳麗梅[15]設(shè)計基于B/S構(gòu)架的EPICS(experimental physics and industrial control system)實時監(jiān)測系統(tǒng),董玉德等人[16]設(shè)計基于物聯(lián)網(wǎng)的路燈可視化監(jiān)控系統(tǒng)。
針對上述問題,本文在基于B/S 架構(gòu)搭建云端監(jiān)控平臺前提下,前端使用原生代碼實現(xiàn),后端使用簡潔的Spring Boot 框架搭建。本地控制平臺由運動控制器和5G 模組組成,運動控制器通過USB 驅(qū)動程序識別5G 模組,使用消息隊列遙測傳輸(message queuing telemetry transport,MQTT)協(xié)議通過5G網(wǎng)絡(luò)與阿里云服務(wù)器進(jìn)行數(shù)據(jù)交互,并且使用Codesys IDE 創(chuàng)建了一個Pou 六軸運動實驗平臺工程和WEB 前端界面驗證基于5G 與阿里云的六軸運動實驗平臺監(jiān)控系統(tǒng)。
監(jiān)控系統(tǒng)硬件框架如圖1 所示。六軸運動實驗平臺由6 個電機與6 個伺服驅(qū)動器組成,由運動控制器通過EtherCAT 總線傳輸信號到伺服驅(qū)動器控制電機的運動。運動控制器選取Cortex-A8 為核心的工業(yè)控制MCU[17]AM335X 芯片,運動控制器安裝了Linux 操作系統(tǒng)并在Linux 系統(tǒng)中搭載Codesys Runtime 系統(tǒng)組成了嵌入式軟PLC。聯(lián)網(wǎng)部分采用MH5000-31 5G 模組,模組接入天線并且插入具有5G業(yè)務(wù)SIM 卡處于5G 網(wǎng)絡(luò)覆蓋范圍內(nèi)撥號連入5G 網(wǎng)絡(luò),用于本地控制平臺與云服務(wù)器數(shù)據(jù)互傳。監(jiān)控平臺部署在云服務(wù)器上,用戶通過瀏覽器訪問特定IP 地址的服務(wù)器監(jiān)視和控制六軸運動實驗平臺。
圖1 監(jiān)控系統(tǒng)硬件框架圖
六軸運動實驗平臺監(jiān)控系統(tǒng)軟件架構(gòu)主要由兩大部分組成,本地控制平臺和云端監(jiān)控平臺。監(jiān)控系統(tǒng)軟件框架圖如圖2 所示。
圖2 監(jiān)控系統(tǒng)軟件框架圖
云端監(jiān)控平臺用于處理本地控制平臺發(fā)送的實驗平臺數(shù)據(jù)且顯示到前端界面或者發(fā)送實驗平臺控制指令到本地控制平臺,平臺由WEB 前端界面、Spring Boot 框架后端、MQTT 客戶端和服務(wù)端組成。為了避免同源的問題存在,WEB 前端使用Nginx[18]部署在云服務(wù)器上,Spring Boot 后端主要負(fù)責(zé)處理前端的AJAX(asynchronous JavaScript and XML)請求。
本地控制平臺分為5G 模組和運動控制器。運動控制器使用的是搭載了MQTT 客戶端、Codesys Runtime 等服務(wù)的Linux 系統(tǒng),由于Codesys Runtime和MQTT 客戶端屬于不同的進(jìn)程,所以運動控制器還需要搭載進(jìn)程通訊服務(wù),通過共享內(nèi)存實現(xiàn)。Codesys Runtime 向共享內(nèi)存寫入實驗平臺的運行數(shù)據(jù)或者從共享內(nèi)存讀出實驗平臺的控制指令,MQTT 客戶端從共享內(nèi)存中讀出設(shè)備數(shù)據(jù)并且上傳到云服務(wù)器或者接受服務(wù)器發(fā)送的指令寫入共享內(nèi)存中。Codesys Runtime Pou 工程通過EtherCAT 總線發(fā)送指令給各軸伺服驅(qū)動器實現(xiàn)六軸實驗平臺運動控制功能。
本地控制平臺主要包括5G 模組和運動控制器兩大部分,編寫USB 驅(qū)動程序建立5G 模組與運動控制器的通訊,移植MQTT 協(xié)議在運動控制器中建立MQTT 客戶端。
本地控制平臺與云端服務(wù)器進(jìn)行數(shù)據(jù)交互的前提是本地控制平臺接入互聯(lián)網(wǎng)。由于5G 模組與運動控制器通過USB 線連接,所以使用模組需要編寫Linux 內(nèi)核USB 驅(qū)動。本文使用的是Linux-3.2.0內(nèi)核,對5G 模組沒有很好的兼容,需要對內(nèi)核中的CDC 驅(qū)動和ECM 驅(qū)動進(jìn)行修改,主要過程如下。
(1)在linux_src/include/linux/usb.h 中添加設(shè)備的宏。
(2)在linux_src/drivers/usb/serial/option.c 文件中usb_device_id option_ids[]的ID 列表添加用于匹配設(shè)備數(shù)據(jù)的ID。
(3) 在 linux_src/drivers/usb/serial/usb_wwan.c 中增加對bcdUSB 值和華為VID 值的定義。
(4)linux_src/drivers/usb/serial/usb_wwan.c文件中usb_wwan_write 函數(shù)添加對零包的判斷。
USB 驅(qū)動修改后更新至文件系統(tǒng),在系統(tǒng)設(shè)備中出現(xiàn)ttyUSB0、ttyUSB1、ttyUSB2 和ttyUSB3 4 個端口表示5G 模組已被識別,如圖3 所示。
圖3 5G 模組設(shè)備端口信息圖
模組正確識別后使用腳本向ttyUSB1 接口發(fā)送信息使本地控制平臺實現(xiàn)上網(wǎng)功能,具體腳本及解釋如下:
首先注冊到相應(yīng)的運營商網(wǎng)絡(luò),其次撥號上網(wǎng),最后通過dhcpcd 獲得動態(tài)IP 地址用于上網(wǎng)所用,本地控制平臺正確獲得動態(tài)IP 地址,如圖4 所示,IP 為169.254.129.250。
圖4 dhcpcd 獲得動態(tài)IP 信息圖
MQTT 是一種基于發(fā)布/訂閱范式的消息協(xié)議,具有開放、簡單、輕量的特性,是為了物聯(lián)網(wǎng)場景而設(shè)計的輕量級傳輸協(xié)議[19-20]。MQTT 通訊結(jié)構(gòu)圖如圖5 所示。
圖5 MQTT 通訊結(jié)構(gòu)圖
MQTT 的服務(wù)器部署在云服務(wù)器上,客戶端可以向服務(wù)端發(fā)布和訂閱消息,主要過程如下。
(1)運動控制器移植MQTT 庫用于消息的發(fā)布與訂閱程序的設(shè)計,使用“arm-linux-gnueabihf-gcc”編譯器編譯MQTT 源碼包獲得動態(tài)鏈接庫,將動態(tài)鏈接庫放入運動控制器的Linux 系統(tǒng)下。
(2)消息發(fā)布程序用于向云服務(wù)器發(fā)布消息,在發(fā)布程序中編寫Publish()函數(shù),該函數(shù)主要用于發(fā)布數(shù)據(jù),待數(shù)據(jù)發(fā)生變化時使用open()函數(shù)打開文件獲得文件描述符fd,Write()函數(shù)通過fd 尋找到文件并且寫入數(shù)據(jù)。配置MQTT 發(fā)布的地址、主題、用戶、發(fā)布質(zhì)量及密碼,通過mosquitto_pub 將數(shù)據(jù)發(fā)布到服務(wù)器,消息發(fā)布流程圖如圖6 所示。
圖6 消息發(fā)布流程圖
(3)消息訂閱用于接收從服務(wù)器發(fā)布的消息,在訂閱程序中使用mosquitto_lib_init 初始化MQTT 為數(shù)據(jù)接收做準(zhǔn)備,打開共享內(nèi)存用于把接收的數(shù)據(jù)放入內(nèi)存中。使用mosquitto_subscribe 訂閱數(shù)據(jù),數(shù)據(jù)訂閱成功后放入共享內(nèi)存方便Codesys Runtime 獲得數(shù)據(jù)。消息訂閱流程圖如圖7 所示。
圖7 消息訂閱流程圖
Linux 進(jìn)程間的通信主要有3 種,即管道通信、消息緩沖通信和共享內(nèi)存通信。管道通信局限于單向通信,消息緩沖不再局限于父子進(jìn)程,但是信息的復(fù)制需要額外的CPU 的時間。共享內(nèi)存利用緩沖區(qū)直接交換信息,無需復(fù)制,快捷、信息量大。本系統(tǒng)采用共享內(nèi)存的方法實現(xiàn)MQTT 客戶端和Codesys Runtime 傳遞數(shù)據(jù)。共享內(nèi)存的創(chuàng)建首先使用Shm_open 創(chuàng)建共享內(nèi)存,然后Ftruncate 重新定義共享內(nèi)存的大小,最后Mmap 獲得共享內(nèi)存的地址,方便數(shù)據(jù)的讀取和寫入。操作結(jié)束后使用Close、munmap 和shm_ulink 關(guān)閉和釋放共享內(nèi)存。共享內(nèi)存創(chuàng)建流程圖如圖8 所示。
圖8 共享內(nèi)存創(chuàng)建流程圖
在Codesys 開發(fā)環(huán)境下基于PLCopen 規(guī)范采用ST 語言以及Codesys SoftMotion 提供的功能塊設(shè)計六軸實驗平臺控制程序。在Codesys IDE 環(huán)境下建立一個Standard Project,在項目中添加運動控制器設(shè)備以及EtherCAT Master 設(shè)備,EtherCAT Master 下添加6 個LiWei_SMD002_X 電機設(shè)備用于傳遞信息給伺服驅(qū)動器,之后添加Pou 單元并使用ST 語言進(jìn)行編程設(shè)計及控制程序。
Pou 單元由回零和位置跟隨兩個功能組成,回零部分Home 采用了MC_MoveAbsoulte 模塊實現(xiàn),通過設(shè)定加減速度、速度和執(zhí)行位使電機運行到指定的位置。位置跟隨部分采用了SMC_FollowPosition 模塊來實現(xiàn),模塊會根據(jù)fSetPostion 的值使電機運行到相應(yīng)的位置,所以只需要使fSetPostion 的值按照正弦變化即可使電機按照正弦運動,fSetPostion的值變化如式(1)所示。其中y1、y2、y3、y4、y5、y6分別表示一至六軸的fSetPostion 值,其中t為時間,ω表示頻率,A表示幅值。x1、x2、x3、x4、x5、x6表示初始相位角,SMC_FollowPosition 模塊圖如圖9 所示。
圖9 SMC_FollowPosition 模塊圖
云端WEB監(jiān)控采用B/S架構(gòu)的方式實現(xiàn),使用阿里云服務(wù)器作為云端監(jiān)控平臺載體。本文WEB監(jiān)控平臺主要由前端和后端組成,前端采用原生的HTML 文本標(biāo)記語言、CSS 樣式和JavaScript 腳本編寫而成。由于傳統(tǒng)WEB 框架過于復(fù)雜,并不能滿足快速開發(fā)的要求,Spring Boot 框架則具有快速和高效的特性[21],所以后端采用Spring Boot 框架搭建而成。
WEB 前端提供了交互界面,用戶通過瀏覽器訪問指定的IP 地址的服務(wù)器即可訪問到交互界面。WEB 前端界面主要包括兩部分,六軸實驗平臺運行狀態(tài)監(jiān)視和遠(yuǎn)程控制部分。六軸實驗平臺監(jiān)視部分用于顯示六軸運行時實際位置,其由Multi Axis Detection System 和六軸曲線圖兩部分組成。數(shù)值顯示部分顯示各個軸的實際位置數(shù)值,曲線圖部分顯示6個軸實際位置隨時間的動態(tài)變化。六軸曲線圖部分使用Echarts 實現(xiàn),使用Echarts.init 初始化DIV 標(biāo)簽獲得Echarts 圖的標(biāo)識,通過標(biāo)識符配置橫軸、豎軸和Serial 等參數(shù),縱軸表示實驗平臺中電機運行時的位置,橫軸為時間軸(時間單位為秒),Series 存放了實驗平臺運行時的各個軸的位置值。通過set-Postion 生成曲線圖,數(shù)據(jù)的更新功能采用定時更換Series 選項下各個軸的數(shù)據(jù)實現(xiàn),由setInterval 實現(xiàn)定時更新數(shù)據(jù)的功能,WEB 交互界面如圖10所示。
圖10 WEB 交互界面圖
WEB 后端使用JAVA 語言基于Spring Boot 框架建立,Spring Boot 是一個基于Spring 的全新框架,可簡化Spring 項目的初始搭建和開發(fā)過程[22]。后端用于處理接收前端發(fā)出的AJAX 請求,并兼顧向MQTT 服務(wù)器發(fā)布和訂閱數(shù)據(jù)。后端程序設(shè)計流程圖如圖11 所示。后端作為前端與本地控制平臺交互的橋梁,根據(jù)前端發(fā)送AJAX 請求內(nèi)容判斷是向文件中寫入實驗平臺控制指令還是從文件中讀取實驗平臺的位置數(shù)據(jù)。
圖11 后端程序設(shè)計流程圖
以六軸運動控制實驗平臺為基礎(chǔ),對部署在阿里云的監(jiān)控系統(tǒng)進(jìn)行實驗測試。
(1)5G 網(wǎng)絡(luò)相比于4G 網(wǎng)絡(luò)具有更大的容量和速率及更低的延時,使用SpeedManager 軟件測試4G網(wǎng)絡(luò)和NSA 模式下的5G 網(wǎng)絡(luò),結(jié)果見圖12。5G 網(wǎng)絡(luò)比4G 網(wǎng)絡(luò)具有更高的下行速度和上行速度,并且5G 網(wǎng)絡(luò)延時及抖動相當(dāng)于4G 網(wǎng)絡(luò)的一半。由于當(dāng)前5G 網(wǎng)絡(luò)采用的組網(wǎng)模式為非獨立組網(wǎng)(nonstand alone,NSA)在4G 網(wǎng)絡(luò)的基礎(chǔ)設(shè)施上部署5G網(wǎng)絡(luò),并不能完全體現(xiàn)出5G 網(wǎng)絡(luò)的優(yōu)勢,但是獨立組網(wǎng)模式(stand alone,SA)需要新建5G 網(wǎng)絡(luò),包括基站、回程鏈路及核心網(wǎng),所以SA 沒有普及。
圖12 4G 與5G 網(wǎng)絡(luò)對比圖
(2)電機的運動控制由Codesys Pou 項目實現(xiàn),控制Codesys Pou 中的fSetPostion 值規(guī)劃電機運動。fSetPostion 值由式(1)得到,這里選取幅值A(chǔ)為50 cm,頻率ω選擇1 rad/s,各個軸的初始相位角由xi=2×π×(i ÷24) 決定,i取值0~5 分別表示1~6軸,設(shè)備運行時6 個電機之間同步組成正弦運動,每個電機都是沿著正弦函數(shù)運行,但是初始相位角的不同導(dǎo)致各個軸之間存在相位差,六軸運動實驗平臺運行軌跡如圖13 所示,各個電機按正弦運動并且相互之間存在相位差。對比圖13 的4 G和5 G網(wǎng)絡(luò)下的運動軌跡圖,得到4G 網(wǎng)絡(luò)下軌跡圖數(shù)據(jù)傳輸?shù)难訒r較大,時常軌跡圖出現(xiàn)失真的情況,只能大致看出實驗平臺按正弦運動,而5G 網(wǎng)絡(luò)下的軌跡圖則比較明顯,并且傳輸相對穩(wěn)定。
圖13 六軸運動實驗平臺運行軌跡圖
在WEB 監(jiān)控界面中開啟電源并且對六軸運動實驗平臺進(jìn)行初始化,運行時軌跡圖如圖13 所示。實驗平臺各個軸的當(dāng)前位置數(shù)值如圖14 所示,顯示當(dāng)前6 個軸的位置值分別為49.99388 cm、48.08789 cm、42.90479 cm、34.79780 cm、24.31940 cm和12.18367 cm。圖15 為當(dāng)前六軸運動控制實驗平臺水晶球的位置,從左往右分別是軸1 至軸6,6 個水晶球所處位置與WEB 界面顯示位置一致。
圖14 實驗平臺運行位置數(shù)值顯示圖
圖15 六軸運動實驗平臺電機位置圖
本文采用5G 通信、MQTT 協(xié)議、Codesys IDE、進(jìn)程通訊技術(shù)和前后端分離技術(shù)搭建一種基于阿里云的六軸運動實驗平臺遠(yuǎn)程監(jiān)控系統(tǒng)。本地控制平臺使用開源的Linux 系統(tǒng)降低了開發(fā)成本,提高了系統(tǒng)移植性,并且采用模塊化的設(shè)計方式縮短了開發(fā)周期,可以在需要額外擴展的時候快速開發(fā)。WEB云端監(jiān)控采用前后端分離技術(shù)進(jìn)行設(shè)計,掛載在阿里云服務(wù)器上。系統(tǒng)針對六軸運動控制實驗平臺進(jìn)行了實時數(shù)據(jù)采集,將數(shù)據(jù)上傳到云服務(wù)器,經(jīng)云服務(wù)器后端程序處理后將六軸運動位置數(shù)據(jù)在前端界面顯示,并且前端操作界面可以對六軸運動實驗平臺進(jìn)行遠(yuǎn)程控制。所設(shè)計系統(tǒng)滿足工業(yè)監(jiān)控系統(tǒng)的基本要求,對開發(fā)基于5G 網(wǎng)絡(luò)的工業(yè)監(jiān)控系統(tǒng)具有一定的參考價值。