吳 若,蘇 宇,劉 勝,蘇亞輝
(安徽大學(xué) 電氣工程與自動(dòng)化學(xué)院,合肥 230601)
近年來(lái),隨著我國(guó)制造業(yè)對(duì)AGV需求的不斷增大,AGV監(jiān)控與管理系統(tǒng)作為整套AGV系統(tǒng)的核心之一,逐漸在國(guó)內(nèi)受到了重視[1]。吳繼超[2]與張丹丹[3]等人所設(shè)計(jì)的AGV調(diào)度管理平臺(tái),雖然能夠完成AGV的路徑規(guī)劃與任務(wù)調(diào)度等基本功能,但是存在不足之處在于無(wú)法對(duì)AGV參數(shù)數(shù)據(jù)進(jìn)行實(shí)時(shí)更新和對(duì)于多種類型的AGV無(wú)法同時(shí)兼容問(wèn)題。
鑒于在實(shí)際制造業(yè)環(huán)境中存在對(duì)多種不同種類AGV實(shí)時(shí)監(jiān)控管理的功能需求。本文在分析現(xiàn)狀的基礎(chǔ)上,針對(duì)現(xiàn)有解決方案的不足,重點(diǎn)研究基于openTCS的監(jiān)控與管理系統(tǒng)[4]。此系統(tǒng)以AGV為載體,編寫車輛驅(qū)動(dòng)程序,提供接口接收上位機(jī)控制指令集,并將任務(wù)指令集打包發(fā)送至AGV,使內(nèi)核完成對(duì)多AGV的任務(wù)分配、路徑規(guī)劃和動(dòng)態(tài)協(xié)同調(diào)度,其次開(kāi)發(fā)OPC-UA服務(wù)器,完成對(duì)AGV的數(shù)據(jù)采集,并通過(guò)無(wú)線局域網(wǎng)將數(shù)據(jù)傳輸至openTCS內(nèi)核,最后實(shí)現(xiàn)上位機(jī)系統(tǒng)對(duì)AGV的監(jiān)控與管理。
系統(tǒng)開(kāi)發(fā)需要進(jìn)行精確的市場(chǎng)需求分析以及可行性的系統(tǒng)方案設(shè)計(jì)。通過(guò)建立基于openTCS的AGV監(jiān)控與管理系統(tǒng),給管理者和員工提供簡(jiǎn)單明了的AGV實(shí)時(shí)監(jiān)控管理平臺(tái)。根據(jù)對(duì)實(shí)際場(chǎng)景的調(diào)研分析,總結(jié)出了該場(chǎng)景下的難點(diǎn)與需求,并給出系統(tǒng)提供的解決方案。具體規(guī)劃分析如表1所示。
表1 規(guī)劃分析
系統(tǒng)模塊架構(gòu)主要包含openTCS、車輛驅(qū)動(dòng)與OPCUA服務(wù)器三部分。其中openTCS(開(kāi)源交通控制系統(tǒng))是用于小車路徑規(guī)劃與任務(wù)調(diào)度的開(kāi)源系統(tǒng),主要包含三大模塊,分別為內(nèi)核(Kernel)、終端(plant overview)與內(nèi)核控制中心(Kernel Control Center),其中內(nèi)核負(fù)責(zé)路徑規(guī)劃與任務(wù)調(diào)度,終端與內(nèi)核控制中心主要負(fù)責(zé)提供可視化界面,方便人員監(jiān)控管理AGV。車輛驅(qū)動(dòng)負(fù)責(zé)接收內(nèi)核的任務(wù)指令,并將任務(wù)指令通過(guò)通訊網(wǎng)網(wǎng)絡(luò)發(fā)送至AGV,另外還包含有接收OPC-UA服務(wù)器數(shù)據(jù)的接口,當(dāng)監(jiān)聽(tīng)到OPC-UA服務(wù)器采集完AGV數(shù)據(jù)后,負(fù)責(zé)為openTCS調(diào)度系統(tǒng)實(shí)時(shí)傳輸AGV參數(shù)數(shù)據(jù)。系統(tǒng)模型架構(gòu)如圖1所示。
在本系統(tǒng)中,將AGV小車本體設(shè)置為OPC-UA服務(wù)端,AGV調(diào)度系統(tǒng)即openTCS作為OPC-UA客戶端[4],如圖2所示,這樣設(shè)計(jì)的好處如下。
圖2 通信模塊架構(gòu)[6]
1)如果AGV本體是OPC-UA客戶端,那對(duì)AGV本體的數(shù)據(jù)字段或者數(shù)據(jù)格式的修改,也一定需要伴隨著 OPC-UA服務(wù)端的修改,這不利于開(kāi)發(fā)與后期維護(hù),增加了工作量。
2)方便使用第三方OPC-UA客戶端讀取AGV的數(shù)據(jù)[1]。
2.1.1 車輛驅(qū)動(dòng)結(jié)構(gòu)
內(nèi)核本身?yè)碛腥蝿?wù)分配、路線規(guī)劃與動(dòng)態(tài)調(diào)度的默認(rèn)實(shí)現(xiàn),但是本文結(jié)合實(shí)際應(yīng)用場(chǎng)景需要修改默認(rèn)實(shí)現(xiàn),在這種情況下,本文注冊(cè)自定義Guice模塊來(lái)添加了車輛驅(qū)動(dòng)程序來(lái)完成對(duì)實(shí)體小車的實(shí)際控制與調(diào)度。通過(guò)在openTCS源程序中自定義車輛驅(qū)動(dòng)程序,實(shí)現(xiàn)車輛驅(qū)動(dòng)程序與特定車輛的通信,因此可以在內(nèi)核和車輛之間進(jìn)行中介。具體車輛驅(qū)動(dòng)結(jié)構(gòu)如圖3所示。
圖3 驅(qū)動(dòng)結(jié)構(gòu)
圖2車輛驅(qū)動(dòng)模塊一共包含四大功能模塊。交互模塊主要負(fù)責(zé)發(fā)送各項(xiàng)指令給實(shí)際小車,包括向小車發(fā)送任務(wù)電報(bào)、設(shè)置車輛怠速標(biāo)志、適配器空閑超時(shí)命令、啟用/禁用日志、禁用周期性狀態(tài)請(qǐng)求、適配器在連接丟失后重新連接、設(shè)置適配器請(qǐng)求間隔、設(shè)置車輛終止節(jié)點(diǎn);虛擬面板的作用是實(shí)現(xiàn)車輛控制與數(shù)據(jù)的可視化;OPC-UA通信適配器面板用于創(chuàng)建特定項(xiàng)目通信知配器的實(shí)例工廠模型;狀態(tài)面板用于監(jiān)控車輛狀態(tài)的變化與更新通信知配器的連接狀態(tài)。OPC-UA模塊主要負(fù)責(zé)與外部OPC-UA服務(wù)端進(jìn)行交互,完成信息的接受與發(fā)送。其中包括OPCUA客戶端類、密鑰庫(kù)器與OPC-UA客戶頻道管理。仿真小車方便開(kāi)發(fā)人員在實(shí)際車輛還未使用時(shí)測(cè)試小車驅(qū)動(dòng)模塊是否能夠滿足特定情況下的需求。通過(guò)對(duì)不同種類的小車與運(yùn)行環(huán)境對(duì)仿真小車對(duì)象進(jìn)行建模,完成仿真小車與OPC-UA服務(wù)端或車輛驅(qū)動(dòng)的交互。動(dòng)作模塊主要實(shí)現(xiàn)執(zhí)行任務(wù)訂單時(shí)的所有動(dòng)作,包括發(fā)送訂單請(qǐng)求/接受小車回應(yīng)、針對(duì)小車狀態(tài)請(qǐng)求與接受小車狀態(tài)回應(yīng)。
2.1.2 車輛驅(qū)動(dòng)工作流程設(shè)計(jì)
在系統(tǒng)自動(dòng)搬運(yùn)過(guò)程中,AGV小車通過(guò)通信系統(tǒng)接收openTCS任務(wù)指令與報(bào)告自己的狀態(tài)。車輛驅(qū)動(dòng)模塊主要作用是負(fù)責(zé)openTCS與AGV設(shè)備之間對(duì)接,其工作流程如下。
第一步:建立與車輛連接,判斷vehicleChannelManager是否為空,若為空則發(fā)出警報(bào);若不為空,調(diào)用vehicleChannelManager的connect方法并將將字符串vehicleEndPointUrl作為參數(shù)傳入,完成與小車建立連接。
第二步:發(fā)送訂單請(qǐng)求指令,調(diào)用sendCommand方法并將MoveCommand類型的參數(shù)cmd傳入,判斷cmd是否為空,若為空則拋出空指針異常,若不為空,通過(guò)調(diào)用vehicleChannelManager的sendOrderRequest方法創(chuàng)建OrderResponse對(duì)象,完成發(fā)送訂單請(qǐng)求指令。
第三步:檢查車輛位置更新,將當(dāng)前位置currentState與previousState作為參數(shù)傳入checkForVehiclePositionUpdate方法中,分別判斷其positionId的值是否相等,若不想等,則代表位置已經(jīng)改變,并在進(jìn)程模型對(duì)象中重新設(shè)置車輛所在點(diǎn)的位置。
第四步:檢查訂單是否完成,將當(dāng)前位置currentState與previousState作為參數(shù)傳入checkOrderFinished方法中,首先獲得currentState的lastFinishedOrderId的值,若為0,則所有訂單均已完成,完成方法。若不為0,則繼續(xù)判斷currentState的lastFinishedOrderId的值是否與previousState的lastFinishedOrderId值是否相等,若相等,則訂單完成,完成方法。若以上均不滿則,方法進(jìn)入while循環(huán),將MoveCommand集合作為循環(huán)判斷條件,若集合不為空,繼續(xù)執(zhí)行運(yùn)動(dòng)等相關(guān)指令。
第五步:斷開(kāi)與車輛連接,判斷vehicleChannelManager是否為空,若為空則發(fā)出警報(bào);若不為空,調(diào)用vehicleChannelManager的disconnect方法,結(jié)束。
工作流程如圖4所示。
圖4 工作流程圖
傳統(tǒng)的OPC協(xié)議只能對(duì)AGV小車的參數(shù)進(jìn)行單一采集,以小車屬性為例,只能采集到小車編號(hào),而不能同時(shí)獲取到小車型號(hào)、電池電壓、運(yùn)行狀態(tài)等參數(shù)數(shù)據(jù)。本文所采用的OPC-UA協(xié)議可以對(duì)信息數(shù)據(jù)項(xiàng)進(jìn)行多種類型的描述,通過(guò)對(duì)AGV小車進(jìn)行數(shù)據(jù)建模,可以獲取小車某一參數(shù)的詳細(xì)信息,同時(shí)也可以獲取小車所有參數(shù)來(lái)進(jìn)行綜合評(píng)估與分析[7]。極大的簡(jiǎn)化了AGV小車綜合數(shù)據(jù)信息的獲取。本文基于信息規(guī)范,針對(duì)AGV小車的功能需求分析與業(yè)務(wù)特點(diǎn),對(duì)信息進(jìn)行建模。過(guò)程如圖5所示。
圖5 信息模型構(gòu)建
以本文研究的AGV小車為模型,建立信息模型對(duì)象,并根據(jù)小車參數(shù)信息進(jìn)行分類,設(shè)置相關(guān)參數(shù)的NodeId、含義、數(shù)據(jù)類型等信息。部分重要信息如表2、表3所示。
表2 基本數(shù)據(jù)類型
表3 硬件與小車動(dòng)作狀態(tài)
建立OPC-UA服務(wù)器,將已經(jīng)建立的信息模型文件整合到服務(wù)器中,通過(guò)NodeId將AGV小車信息與數(shù)據(jù)模型進(jìn)行關(guān)聯(lián),當(dāng)AGV小車信息改變時(shí),對(duì)相應(yīng)節(jié)點(diǎn)信息進(jìn)行更新[8],openTCS通過(guò)OPC-UA客戶端訪問(wèn)服務(wù)器讀取信息模型中的各項(xiàng)信息。主要流程如下,系統(tǒng)開(kāi)始運(yùn)行后主控進(jìn)程負(fù)責(zé)讀取配置文件,連接成功后創(chuàng)建OPC UA服務(wù)器進(jìn)程與服務(wù)器數(shù)據(jù)節(jié)點(diǎn)NodeID,服務(wù)器監(jiān)聽(tīng)是否有客戶端讀取NodeID,若有,則讀取并返回共享內(nèi)存中的信息;若沒(méi)有,進(jìn)一步判斷主進(jìn)程是否結(jié)束,若未結(jié)束,則繼續(xù)監(jiān)聽(tīng),若結(jié)束則數(shù)據(jù)采集結(jié)束。整體流程如圖6所示。
圖6 AGV數(shù)據(jù)采集流程
根據(jù)對(duì)實(shí)際運(yùn)行中AGV的類型進(jìn)行解析與建模[9],創(chuàng)建了模擬AGV類,車輛驅(qū)動(dòng)負(fù)責(zé)與模擬AGV進(jìn)行對(duì)接,openTCS經(jīng)由車輛驅(qū)動(dòng)使用TCP/IP協(xié)議和AGV或OPCUA開(kāi)展通訊,以保證上位機(jī)能夠順利接收模擬AGV運(yùn)動(dòng)狀態(tài)和參數(shù)數(shù)據(jù)包并完成相應(yīng)邏輯運(yùn)算,其中不同的車輛驅(qū)動(dòng)能夠兼容對(duì)應(yīng)型號(hào)的AGV,openTCS默認(rèn)適配器為L(zhǎng)oopback Adapter,圖7中的MyTestAdapter適配器是為模擬小車仿真測(cè)試而創(chuàng)建的一類適配器。適配器Adapter的實(shí)現(xiàn)如圖7所示。
圖7 車輛驅(qū)動(dòng)
此處采用模擬通信的形式,使用模擬AGV進(jìn)行多AGV批量任務(wù)的仿真驗(yàn)證,完成車輛驅(qū)動(dòng)程序與OPCUA服務(wù)器的編寫后,建立openTCS調(diào)度系統(tǒng)與AGV或OPC-UA服務(wù)端的Socket通信,設(shè)置小車ip地址為127.0.0.1,端口為4001,對(duì)模擬小車與調(diào)度系統(tǒng)進(jìn)行調(diào)試,實(shí)現(xiàn)仿真小車的參數(shù)數(shù)據(jù)與任務(wù)狀態(tài)實(shí)時(shí)跟蹤。圖8為運(yùn)行時(shí)AGV參數(shù)實(shí)時(shí)顯示,圖9展示了模擬運(yùn)行時(shí)實(shí)時(shí)任務(wù)狀態(tài)監(jiān)控。
圖8 仿真小車參數(shù)
圖9 任務(wù)狀態(tài)監(jiān)控
本文設(shè)計(jì)了基于openTCS的多臺(tái)不同種類AGV協(xié)同工作的監(jiān)控與管理系統(tǒng),首先使用openTCS提供的API開(kāi)發(fā)其車輛驅(qū)動(dòng)模塊,其次數(shù)據(jù)采集方法選擇了OPC-UA協(xié)議并開(kāi)發(fā)了其服務(wù)器,完成構(gòu)建面向局域網(wǎng)的通訊模塊,最后實(shí)現(xiàn)了系統(tǒng)對(duì)AGV的監(jiān)控與管理。仿真表明,本系統(tǒng)操作簡(jiǎn)單、穩(wěn)定性與可擴(kuò)展性高,能夠?yàn)锳GV的可靠運(yùn)行提供技術(shù)保障。