蔚晟楠 ,趙圓圓 ,張 帆 *,譚躍剛,方 濤
(1.武漢理工大學(xué)機(jī)電工程學(xué)院,武漢430070;2.湖北嘉一三維高科股份有限公司,武漢430070)
區(qū)別于傳統(tǒng)的加工方式,3D打印是一種將材料進(jìn)行累加制造的技術(shù),十分適合于單件或小批量的快速制造[1],在醫(yī)學(xué)、建筑、制造業(yè)等領(lǐng)域得到較為廣泛的應(yīng)用[2],因而3D打印設(shè)備的保有量迅速上升。物聯(lián)網(wǎng)技術(shù)可以通過(guò)泛在物聯(lián)的方式為3D打印行業(yè)賦能,其通過(guò)傳感器采集數(shù)據(jù)并將數(shù)據(jù)統(tǒng)一到云端進(jìn)行分析和計(jì)算,從而組建若干相互聯(lián)系的映射網(wǎng)絡(luò),這不僅方便了3D打印智能車間大量設(shè)備節(jié)點(diǎn)的遠(yuǎn)程管理,還為企業(yè)加工任務(wù)變更、加工路徑規(guī)劃等問(wèn)題提供即時(shí)解決策略,有效降低了3D打印生產(chǎn)過(guò)程中的故障造成的經(jīng)濟(jì)損失,促使設(shè)備之間進(jìn)行信息交互,進(jìn)而完成設(shè)備制造信息的集成管控[3]。
但是在當(dāng)前物聯(lián)網(wǎng)環(huán)境下,由于不同3D打印設(shè)備所使用的固件種類不同,如Sprinter、Reprap和Marlin等,其解碼方案各不相同,導(dǎo)致通信協(xié)議不能完全統(tǒng)一[4],這使得3D打印設(shè)備傳來(lái)的數(shù)據(jù)很難通過(guò)統(tǒng)一的方式進(jìn)行處理和解析;同時(shí),設(shè)備實(shí)時(shí)狀態(tài)的有效的遠(yuǎn)程監(jiān)控需要可靠的應(yīng)用層傳輸協(xié)議。因而,需要設(shè)計(jì)一種物聯(lián)網(wǎng)環(huán)境下的3D打印設(shè)備通信協(xié)議適配策略來(lái)實(shí)現(xiàn)3D打印設(shè)備有效的物聯(lián)網(wǎng)接入。
針對(duì)上述問(wèn)題,國(guó)內(nèi)外學(xué)者開展了不少研究。陳文藝和田創(chuàng)[5]提出了設(shè)計(jì)不同模塊控制協(xié)議解析的集成化策略,在協(xié)議適配層,它使用node.js中的net模塊構(gòu)建TCP客戶端并對(duì)設(shè)備模型數(shù)據(jù)進(jìn)行封裝。葉青[6]設(shè)計(jì)出一種面向配置的協(xié)議解析方法,但對(duì)于超出調(diào)研范圍的協(xié)議無(wú)法處理,需要人工自行配置。趙凱和張景峰[7]提出了面向接口的通過(guò)三種XML配置文件進(jìn)行協(xié)議適配的方法,對(duì)于一類協(xié)議無(wú)需重復(fù)編寫配置文件。王永娜和趙奎等人[8]與趙凱均使用XML文件表現(xiàn)協(xié)議格式和內(nèi)容,但有所區(qū)別的是,王永娜等人創(chuàng)新性地基于狀態(tài)機(jī)原理通過(guò)自定義協(xié)議解析規(guī)則完成對(duì)應(yīng)功能,最終形成標(biāo)準(zhǔn)協(xié)議。石榮和蔡樂等人[9]提出了基于關(guān)聯(lián)規(guī)則挖掘進(jìn)行識(shí)別的方法,通過(guò)提取特征庫(kù)中的頻繁集、對(duì)匹配字符串的位置進(jìn)行記錄,將關(guān)聯(lián)關(guān)系作為協(xié)議識(shí)別的另一個(gè)特征,最終達(dá)到識(shí)別協(xié)議的目的。但其局限性體現(xiàn)在:這些適配策略未充分利用3D打印設(shè)備通信協(xié)議的特點(diǎn),適配過(guò)程復(fù)雜?;谏鲜鼍窒扌圆浑y看出,它們無(wú)法滿足針對(duì)3D打印領(lǐng)域的物聯(lián)接入系統(tǒng)協(xié)議自動(dòng)化適配的需求。
因此,為滿足不同3D打印設(shè)備適配接入的需求,本文提出一種基于字符串分割排序與二分查找的3D打印通信協(xié)議適配策略,該策略通過(guò)字符串分割、排序、二分查找及計(jì)算相似度等操作,能夠有效地對(duì)不同的通信協(xié)議進(jìn)行識(shí)別、匹配與解析。同時(shí),制定了一套用于3D打印設(shè)備物聯(lián)接入的可靠通信協(xié)議,并進(jìn)行了軟硬件設(shè)計(jì)及測(cè)試。經(jīng)實(shí)際環(huán)境測(cè)試所設(shè)計(jì)的系統(tǒng)能夠正常運(yùn)行,安全可靠。
3D打印物聯(lián)接入系統(tǒng)由3D打印設(shè)備、3D打印物聯(lián)接入裝置和云端服務(wù)器組成,系統(tǒng)連接圖如圖1所示。3D打印物聯(lián)接入裝置通過(guò)串口接收設(shè)備運(yùn)行狀態(tài)信息和向打印設(shè)備發(fā)送控制指令,通過(guò)網(wǎng)口和Wi-Fi接收云端發(fā)送的控制指令、將各項(xiàng)數(shù)據(jù)發(fā)送到平臺(tái)及接受和發(fā)送心跳包。用戶可以登錄物聯(lián)云服務(wù)平臺(tái)進(jìn)行監(jiān)控、管理和數(shù)據(jù)分析等操作。在這一工作流程中,網(wǎng)絡(luò)通信部分需要可靠性協(xié)議的支撐,而物聯(lián)接入的全過(guò)程均需通過(guò)協(xié)議適配操作來(lái)實(shí)現(xiàn)其不同階段的功能。
圖13 D打印物聯(lián)接入系統(tǒng)連接圖
數(shù)據(jù)協(xié)議是指通信過(guò)程中規(guī)定的數(shù)據(jù)格式和交互過(guò)程。通過(guò)研究許多3D打印數(shù)據(jù)協(xié)議后可以將3D打印數(shù)據(jù)協(xié)議如表1進(jìn)行表示。標(biāo)識(shí)符在每個(gè)協(xié)議中都有不同的體現(xiàn),代表該協(xié)議的特殊性,數(shù)據(jù)開始標(biāo)志則從一定程度上體現(xiàn)了數(shù)據(jù)的類型,如溫度、擠料和位置數(shù)據(jù)等。
表1 數(shù)據(jù)協(xié)議的一般表示形式
(1)不同固件的數(shù)據(jù)協(xié)議
當(dāng)向Marlin固件類型的3D打印設(shè)備發(fā)送M105指令時(shí),設(shè)備返回?cái)?shù)據(jù)協(xié)議如下:
Ok T:15.00/25.00 B:20.00/30.00@:0.00 B@:0.00數(shù)據(jù),其中Ok就是該固件特有的標(biāo)識(shí)符,T表示噴頭溫度數(shù)據(jù)開始的標(biāo)志,15.00即為所需要的數(shù)據(jù),B:20.00亦然。而向Reprap固件類型的3D打印設(shè)備發(fā)送M105指令時(shí),設(shè)備返回?cái)?shù)據(jù)協(xié)議如下:
Ok T:15 B:20
數(shù)據(jù)。其他固件與之類似,均采用相同的表達(dá)方式。
(2)同一固件的不同數(shù)據(jù)協(xié)議
當(dāng)請(qǐng)求Marlin固件類型的3D打印設(shè)備溫度數(shù)據(jù)時(shí),設(shè)備將返回
Ok T:15.00/25.00 B:20.00/30.00@:0.00 B@:0.00
數(shù)據(jù),而當(dāng)向該固件類型的3D打印設(shè)備位置數(shù)據(jù)時(shí),設(shè)備將返回
X:100.00 Y:0.00 Z:0.00 E:0.00 Count X:8000 Y:0 Z:0
數(shù)據(jù),在這一回顯內(nèi)容中,無(wú)標(biāo)識(shí)符,直接以數(shù)據(jù)開始標(biāo)志開頭并加以數(shù)據(jù)表示,其他固件亦然。
由此可見,不同固件類型的協(xié)議及請(qǐng)求不同數(shù)據(jù)的協(xié)議所返回的信息均不同。因此,論文擬將上述區(qū)別作為解決不同固件或同固件不同數(shù)據(jù)識(shí)別適配問(wèn)題的出發(fā)點(diǎn),進(jìn)而完成不同數(shù)據(jù)協(xié)議的適配。
(1)固件適配
協(xié)議適配策略包括固件類型匹配和協(xié)議內(nèi)容匹配兩方面,其業(yè)務(wù)邏輯如圖2所示。
圖2 固件類型適配流程
固件類型適配可以分為已知協(xié)議適配及人工干預(yù)層組成,已知協(xié)議的適配環(huán)節(jié)由消息接收層、適配決策層和協(xié)議封裝層構(gòu)成,人工干預(yù)層主要包括不同的接口及封裝操作組成。對(duì)于不同協(xié)議,其基本結(jié)構(gòu)類似,不同主要體現(xiàn)在標(biāo)識(shí)符的不同和數(shù)據(jù)開始的標(biāo)志不同。因此,當(dāng)串口獲取到某一條通信協(xié)議后,系統(tǒng)將按照統(tǒng)一的方式把該信息送至消息接收層,該層將對(duì)長(zhǎng)字符串進(jìn)行分割并按照英文字母順序進(jìn)行排序,這樣能夠有效減少數(shù)據(jù)匹配過(guò)程所花費(fèi)的時(shí)間,提高了匹配的效率。二分查找算法在一定程度上能夠加快數(shù)據(jù)查找的速度,但其查找條件為不可變字符,同時(shí)庫(kù)中協(xié)議信息也可能因?yàn)闀r(shí)效性較差而有一定偏差或大小寫拼寫有錯(cuò)誤,因此需要在保證一定可信度的前提下,根據(jù)協(xié)議字符數(shù)的多少按80%比例確定二分查找的完成條件?;诖?,還要對(duì)剩下的字符計(jì)算相似程度,取最大者為匹配確定的協(xié)議。隨后將通過(guò)數(shù)據(jù)協(xié)議的適配過(guò)程考量其符合程度,若無(wú)法正確解析,將返回協(xié)議適配階段重新匹配或進(jìn)行人工干預(yù)。
在物聯(lián)接入系統(tǒng)中,協(xié)議以
形式存在。任何對(duì)協(xié)議內(nèi)容的操作完成后都需將該協(xié)議置于字典頂,進(jìn)而減少適配時(shí)間。
(2)數(shù)據(jù)協(xié)議適配
除不同固件類型外,適配問(wèn)題仍然要處理同一設(shè)備不同類型數(shù)據(jù)協(xié)議異構(gòu)的問(wèn)題。針對(duì)這一問(wèn)題,采取如下適配方法,工作流程為:物聯(lián)接入裝置向3D打印設(shè)備請(qǐng)求溫度和位置數(shù)據(jù),隨后將從串口處獲取打印設(shè)備發(fā)來(lái)的狀態(tài)信息,之后接入裝置將通過(guò)特定字符串正則的方法將數(shù)據(jù)信息提取,同時(shí)檢查提取的信息是否為數(shù)據(jù)或合理字符,若檢查成功則將所有數(shù)據(jù)放進(jìn)數(shù)組并加以運(yùn)用,若不成功則會(huì)反復(fù)正則多次,直至超時(shí)后返回協(xié)議適配環(huán)節(jié),具體實(shí)現(xiàn)流程圖如圖3所示。
圖3 數(shù)據(jù)協(xié)議適配流程圖
為了有效地進(jìn)行3D打印設(shè)備在線上平臺(tái)的接入,在3D打印物聯(lián)接入系統(tǒng)中設(shè)計(jì)了4種通信協(xié)議:3D打印設(shè)備平臺(tái)認(rèn)證通信協(xié)議、3D打印設(shè)備狀態(tài)數(shù)據(jù)封裝協(xié)議、3D打印平臺(tái)遠(yuǎn)程控制指令協(xié)議和心跳檢測(cè)通信檢測(cè)協(xié)議。在3D打印物聯(lián)接入系統(tǒng)中,為了實(shí)現(xiàn)3D打印物聯(lián)服務(wù)平臺(tái)的設(shè)備認(rèn)證,本文設(shè)計(jì)了3D打印設(shè)備平臺(tái)認(rèn)證通信協(xié)議。在數(shù)據(jù)通訊的過(guò)程中,心跳檢測(cè)通信協(xié)議可以用于保證長(zhǎng)連接的存活與可靠性,而3D打印設(shè)備狀態(tài)數(shù)據(jù)封裝協(xié)議和3D打印平臺(tái)遠(yuǎn)程控制指令協(xié)議則分別用于數(shù)據(jù)上傳平臺(tái)和向設(shè)備發(fā)送指令的通信場(chǎng)景。
(1)3D打印設(shè)備平臺(tái)認(rèn)證通信協(xié)議
該協(xié)議用于授權(quán)的3D打印設(shè)備接入線上平臺(tái)的認(rèn)證過(guò)程。其認(rèn)證流程如圖4所示。
圖43 D打印設(shè)備接入平臺(tái)認(rèn)證過(guò)程
其主要包括設(shè)備平臺(tái)注冊(cè)、設(shè)備線下激活、設(shè)備平臺(tái)認(rèn)證三個(gè)環(huán)節(jié)。在注冊(cè)環(huán)節(jié)中,用戶在平臺(tái)設(shè)置密碼,并生成設(shè)備的唯一標(biāo)識(shí)碼,用戶在線下激活環(huán)節(jié)將密碼和標(biāo)識(shí)碼導(dǎo)入物聯(lián)設(shè)備,最后在設(shè)備第一次接入平臺(tái)后進(jìn)行認(rèn)證比對(duì)。通過(guò)認(rèn)證協(xié)議,平臺(tái)可以對(duì)設(shè)備進(jìn)行授權(quán)管理。
(2)3D打印設(shè)備狀態(tài)數(shù)據(jù)封裝協(xié)議
該協(xié)議用于將不同型號(hào)的3D打印數(shù)據(jù)識(shí)別后進(jìn)行統(tǒng)一的封裝,接入線上平臺(tái)后便于統(tǒng)一解析。封裝的格式采用了基于鍵值對(duì)的JSON格式。狀態(tài)數(shù)據(jù)主要包括設(shè)備的通用信息(設(shè)備標(biāo)識(shí)碼和IP)、傳感器數(shù)據(jù)(溫度數(shù)據(jù))、打印數(shù)據(jù)(X,Y,Z軸的位置數(shù)據(jù)以及擠料)、打印進(jìn)度等實(shí)時(shí)數(shù)據(jù)。
(3)3D打印平臺(tái)遠(yuǎn)程控制指令協(xié)議
該協(xié)議主要用于平臺(tái)遠(yuǎn)程控制3D打印,發(fā)送控制指令。設(shè)計(jì)了多次交互流程,保證指令的正確發(fā)送和接收。
首先,用戶點(diǎn)擊按鈕將使云平臺(tái)向物聯(lián)接入裝置發(fā)送了數(shù)據(jù)格式 {EID:***,I:***}END的DATA2數(shù)據(jù)。然后,裝置接收到指令信息后將接收的數(shù)據(jù)以{EID:***,RI:***}END 的數(shù)據(jù)格式將 DATA22 回顯使平臺(tái)進(jìn)行確認(rèn),若一致,平臺(tái)將發(fā)送{EID:***,IDE:OK}END的確認(rèn)信息DATA222返回物聯(lián)接入裝置。接著,裝置收到確認(rèn)消息后會(huì)控制串口給終端設(shè)備發(fā)送DATA3,設(shè)備執(zhí)行完畢后將返回DATA33信息,其格式體現(xiàn)為{I:***,IS:***}。最后,物聯(lián)接入裝置將DATA33加入設(shè)備編號(hào)信息形成DATA333發(fā)送回平臺(tái),至此一次通信完成。
(4)心跳檢測(cè)
心跳檢測(cè)通信協(xié)議主要完成空包“{}”的發(fā)送使通信另一方識(shí)別到該信號(hào)用以確認(rèn)狀態(tài)。當(dāng)平臺(tái)向物聯(lián)接入裝置發(fā)送“{}”數(shù)據(jù)時(shí),數(shù)據(jù)接收模塊將識(shí)別到這一特定信息并將標(biāo)志位置位,每隔1 min系統(tǒng)將查看一次標(biāo)志位的狀態(tài),若標(biāo)志位置位,則將之前計(jì)數(shù)清零并復(fù)位標(biāo)志位,否則計(jì)數(shù)增一。如圖5所示,當(dāng)計(jì)數(shù)達(dá)到三時(shí),認(rèn)為平臺(tái)與物聯(lián)接入裝置通信已經(jīng)斷開,則會(huì)重新啟動(dòng)來(lái)建立新的 socket連接。
圖5 3D打印物聯(lián)接入系統(tǒng)數(shù)據(jù)交互過(guò)程及數(shù)據(jù)協(xié)議
如圖6所示,3D打印物聯(lián)服務(wù)平臺(tái)采用分布式存儲(chǔ)技術(shù)和MQTT協(xié)議相結(jié)合的方式完成多個(gè)節(jié)點(diǎn)的接入、大量實(shí)時(shí)狀態(tài)數(shù)據(jù)的處理與解析及控制指令的發(fā)送。
圖63 D打印物聯(lián)服務(wù)平臺(tái)
本文采用Orange Pi Zero硬件并基于Armbian系統(tǒng)搭建物聯(lián)接入系統(tǒng)。
圖7為本系統(tǒng)數(shù)據(jù)處理模塊的單元測(cè)試展示圖。網(wǎng)絡(luò)連接模塊基于flask框架完成網(wǎng)絡(luò)接入功能。本物聯(lián)接入系統(tǒng)在Armbian中移除了network manager并對(duì)interfaces文件進(jìn)行修改,僅在文件中規(guī)定了IP的類型和標(biāo)識(shí)符,通過(guò)編寫bash腳本控制系統(tǒng)網(wǎng)絡(luò)初始化過(guò)程和IP獲取邏輯,降低了初始化時(shí)間。
圖7 物聯(lián)接入系統(tǒng)軟件
終端連接模塊完成串口尋找和波特率的設(shè)置工作,其遍歷全部可用端口并開啟多線程,避免數(shù)據(jù)堵塞甚至工作流程的崩潰。數(shù)據(jù)處理模塊則首先向3D打印設(shè)備確認(rèn)串口狀態(tài),隨后即可按照收一條數(shù)據(jù)后再發(fā)一條數(shù)據(jù)的方式獲取3D打印設(shè)備運(yùn)行狀態(tài)數(shù)據(jù)及發(fā)送設(shè)備控制指令。數(shù)據(jù)發(fā)送模塊主要是通過(guò)建立socket連接并依靠心跳檢測(cè)包保證通信鏈路的正常工作,增強(qiáng)了通信過(guò)程的可靠性與完整性。
本系統(tǒng)經(jīng)過(guò)測(cè)試,能夠穩(wěn)定完成既定功能,主要測(cè)試參數(shù)如表2所示。
表2 主要測(cè)試參數(shù)
圖8和圖9分別為兩種不同固件類型的3D打印設(shè)備接入實(shí)物展示及其物聯(lián)平臺(tái)接入數(shù)據(jù)展示界面。其中,圖8所示的3D打印設(shè)備內(nèi)嵌Marlin類型的固件,圖9所示的3D打印設(shè)備內(nèi)嵌Reprap類型的固件。圖8測(cè)試時(shí)間為15 min,分別顯示了熱床打印過(guò)程中實(shí)時(shí)噴頭溫度及XYZ三軸坐標(biāo)數(shù)據(jù)。如圖所示,噴頭溫度無(wú)明顯波動(dòng),在打印過(guò)程中保持在40°上下,三軸坐標(biāo)可以根據(jù)3D打印設(shè)備的運(yùn)動(dòng)及時(shí)顯示出來(lái);圖9表示測(cè)試開始前10 s的噴頭溫度及XY軸坐標(biāo)曲線,在打印過(guò)程開始時(shí),3D打印接入裝置能夠迅速將傳感器獲取的數(shù)據(jù)傳輸至平臺(tái),溫度保持200°左右,噴頭溫度無(wú)明顯數(shù)據(jù)缺失,右上角圖線平緩,表明此時(shí)X軸無(wú)運(yùn)動(dòng)。上述實(shí)驗(yàn)都驗(yàn)證了利用設(shè)計(jì)的接入?yún)f(xié)議,能夠通過(guò)物聯(lián)網(wǎng)平臺(tái)遠(yuǎn)程有效地對(duì)不同固件的打印機(jī)進(jìn)行監(jiān)控。
圖8 物聯(lián)接入系統(tǒng)測(cè)試(a)
圖9 物聯(lián)接入系統(tǒng)測(cè)試(b)
針對(duì)目前3D打印設(shè)備物聯(lián)接入系統(tǒng)仍存在通信協(xié)議不統(tǒng)一導(dǎo)致無(wú)法實(shí)現(xiàn)不同3D打印設(shè)備有效接入的問(wèn)題,本文提出了一種基于知識(shí)庫(kù)的3D打印設(shè)備物聯(lián)適配接入策略,通過(guò)長(zhǎng)字符串分割排序、二分查找和相似度計(jì)算、協(xié)議重排等操作極大地減少了協(xié)議匹配的時(shí)間;制定了用于可靠數(shù)據(jù)傳輸和狀態(tài)檢測(cè)的通信協(xié)議。分別將Marlin固件類型、Reprap固件類型的3D打印設(shè)備分別接入3D打印物聯(lián)服務(wù)平臺(tái),證實(shí)了方案的可行性。本文所作工作解決了不同固件類型的3D打印設(shè)備的適配接入問(wèn)題,方便了3D打印設(shè)備資源的調(diào)度,同時(shí)通過(guò)物聯(lián)網(wǎng)將數(shù)據(jù)發(fā)送至物聯(lián)服務(wù)平臺(tái)可以為數(shù)字孿生等上層應(yīng)用提供便利。