王黎軒 姚雁春 楊江紅

摘要:本文從動態調度[1]的角度出發,針對三種具體情況,判斷RGV和CNC的工作狀態,通過枚舉法[2]列出各種情況,對RGV進行調度,并求出成料數量和工作效率。針對一道工序的物料加工,建立一個CNC的狀態矩陣,判斷CNC工作狀態,并求解CNC狀態總和,如果不處于工作狀態,則說明其需要進行上下料操作,由此可以確定RGV上下料消耗的時間以及CNC消耗的時間,然后將數據代入所寫代碼求得產出的成品數量、CNC的工作效率。
關鍵詞:智能RGV動態調度、0-1規劃、枚舉法、搜索算法、事件驅動策
引言
隨著信息技術、控制工程和智能化的發展,智能加工系統極大地提高了工業制造、機械加工和物流運輸等眾多領域的效率。為了最大程度地節省加工時間、降低生產成本,生產最大數量的成料,進行物料加工調度成為了迫切的需要解決的問題。作為一種無人駕駛、能在固定軌道上自由運行的智能車,RGV可以根據指令完成一系列相關作業任務,而我們將針對RGV三種不同的工作情況,分別對其整個加工過程進行動態調度,縮短RGV和CNC的等待時長,提升生產效率,以滿足現實中企業的需求。
1、一道工序的情況
針對一道工序的物料加工,我們要討論如何安排上下料順序來獲得最高的作業效率,首先確定最優的RGV上料順序并求出最短時間,由于RGV右側的CNC上下料時間都小于RGV左側的CNC的上下料時間,所以當RGV到達某一位置時,先對其右側的CNC上料,隨后立即對其左側的CNC上料,完成后前往下一個位置。其次求解第一道工序的情況,通過0-1變量設定RGV和CNC的工作狀態,建立一個CNC的狀態矩陣,判斷CNC工作狀態,并求解CNC狀態總和,如果不處于工作狀態,則說明其需要進行上下料操作,由此可以確定RGV上下料消耗的時間以及CNC消耗的時間,最后根據數據進行程序運算即可得到所需。
2、模型建立與求解
2.1初始上料順序的確定
由于RGV的移動時間遠遠小于CNC的加工時間,故可以先確定RGV對CNC第一次上料的順序,來形成CNC加工的時間間隔。
為確定一個RGV對CNC第一次上料的順序,讓RGV在當前位置先對其右側的CNC進行上料,因為所有右側的CNC的上下料的時間p1是小于所有左側的CNC上下料的時間p2的。所以當RGV到達某一位置,先對其右側的CNC上料,隨后立即對其左側的CNC上料,完成后前往下一個位置。將所有CNC的上料工作完成后,讓RGV再回到初始位置,等待CNC加工完成后按照第一次上料的順序進行上下料和清洗工作即可。這樣就確定出來一個8臺CNC的工作順序,將這個工作順序稱為“一次工作循環”。
設RGV移動1個單位消耗的時間為t1,移動2個單位消耗的時間為t2,移動3個單位消耗的時間為t3,觀察所有數據,可以得出:
Δt=t2-t1=t3-t2=13
其為一個定值,那么就可以證明一個結論:RGV執行一遍工作循環的最短移動時間為4t1+2Δt。可以使用計算機利用搜索算法[5]來求解這一結論,使用搜索確定RGV移動的順序,并且根據給定的順序來計算RGV消耗的時間,再與結論時間作比較,可以得出相同的結果。
兩個關鍵步驟為:
1. 移動步驟:若當前RGV處于空閑狀態并且其左右兩側CNC都在處于加工狀態,一旦有其他CNC處于空閑狀態或發出上下料請求,RGV就移動到其位置為其上下料和熟料清洗;
2. 上下料步驟:若當前RGV的左側CNC或右側CNC處于空閑或發出上下料請求,RGV應先對左側CNC進行操作再對右側CNC進行操作。
具體流程如下:
建立一個RGV的狀態序列RGVstatus,建立一個CNC的狀態矩陣CNCstatus,RGV的狀態序列記錄其每秒的狀態,CNC的狀態矩陣儲存每臺CNC的每秒的狀態;一秒一秒地進行枚舉,對于當前時間times,如果RGVstatus [times]=0,說明當前RGV處于空閑狀態;
隨即判斷其左右兩側CNC的狀態,這里記錄RGV的當前位置為RGVPosition,具體數值為1到4,含義與RGV工作流程的確定中的相同;
若CNCsum<8,則RGV即可前往下一位置,定義RGVPath為當前給定的移動序列,定義RGVPathindex為當前RGVPosition對應在RGVPath中的位置指針,每次移動時RGVPathindex都往后指向一次,因為RGV最后一次移動需要回到初始位置,這里是用取模操作讓RGVPathindex自動指到初始位置,這樣就可以到RGV需要前往的下一個位置RGVnextPosition=RGVpath [RGVPathindex ],計算此次RGV移動消耗的時間,即t|RGV_Position-RGV_nextPosition | ,將RGV狀態序列中后續狀態就行更新,并且記錄RGV的移動次數RGVmoves加一;
若RGV不滿足移動的條件,要么就是RGV處于工作狀態,即RGVstatus [times]=1,要么就是其左右兩側CNC中至少有一臺處于空閑狀態或發出上下料請求。
因為RGV左側的CNC上下料時間p1都小于RGV右側的CNC的上下料時間p2,故先檢查RGV右側的CNC是否處于工作狀態,即檢查CNCstatus [RGVPosition*2-1][ times]是否為1,若為0,則說明其需要進行上下料操作,則RGV上下料消耗的時間為WastTimeRGV=p1,但特殊的,如果RGVmoves>0,則說明所有CNC已經完成了一遍上料過程,當前RGV需要對CNC上的熟料進行清洗,此時WastTimeRGV=p1+e,e為RGV清洗物料的時間,而對于CNC來說,其需要等待上下料和加工的時間,才能再次達到上下料請求的狀態,故CNC消耗的時間為WastTimeCNC=p1+c,其中c為CNC加工一道工序時所消耗的時間,根據RGV和CNC消耗的時間分別更新其狀態序列和狀態矩陣;
再次簡化問題,忽略最后RGV需要返回初始位置,運用C++進行求解一道工序8小時工作的情況,源代碼見附錄二,求得結果:
結語
RGV不需要等到CNC處于空閑狀態或發出上下料請求再行動,而是完成當前工作后立刻前往下一位置等待CNC完成,可以設定一個指標RGVhavemoved來判斷RGV是否是移動到下一個位置進行等待。
參考文獻
[1]韓中庚,梅正陽.智能RGV的動態調度策略問題的數學模型[J].數學建模及其應用,2019,8(01):53-65+83.
[2]高亞靜,周明,李庚銀,李睿,肖利民.基于馬爾可夫鏈和故障枚舉法的可用輸電能力計算[J].中國電機工程學報,2006(19):41-46.
[3]鄧俊,韋化,黎靜華,白曉清.一種含四類0-1變量的機組組合混合整數線性規劃模型[J].中國電機工程學報,2015,35(11):2770-2778.
[4]王寵兒. 事件驅動策略的研究[D].山東大學,2017.