章信華, 嵇建波
(桂林航天工業(yè)學院 電子信息與自動化學院, 廣西 桂林 541004)
隨著我國經(jīng)濟的發(fā)展,我國物流產(chǎn)業(yè)的發(fā)展成就矚目,物流經(jīng)濟在國民經(jīng)濟中的“先導性作用”更加重要[1]。AGV 由于具有靈活高效、安全可靠、及維修方便等諸多優(yōu)點,在物流自動化中受到了越來越多廠商的重視[2]。倉儲物流中最重要的系統(tǒng)就是AGV自動分揀系統(tǒng),而建立AGV自動分揀系統(tǒng)的第一步就是要繪制整個倉庫的地圖,只有把倉庫的地圖繪制好了,才能正常調(diào)度AGV執(zhí)行分揀任務。
由于實際的地圖中包含大量的信息,即使繪制一張簡單的調(diào)度系統(tǒng)地圖也是非常困難的。通過搜索文獻,未找到任何關于繪制調(diào)度系統(tǒng)地圖的文獻,看得出來,這是一個新興的專業(yè)領域,還處于保密階段。一些公司繪制調(diào)度系統(tǒng)地圖的方法,是直接在調(diào)度系統(tǒng)服務器中編碼繪制地圖,該方法需要先在紙上將地圖繪制好,再將地圖上的點和線一一繪制出來,工作量非常大,即使是一張簡單的地圖,也要耗費1周甚至更長時間;另一方面,這種繪圖方法導致調(diào)度系統(tǒng)和地圖完全綁定,每次修改地圖,都需要在調(diào)度系統(tǒng)中重新編碼生成新的地圖;所以這是一種耗時長且十分笨拙的繪圖方法,有必要提出一種新的繪圖方法來解決這個問題。
在實際的AGV倉儲物流系統(tǒng)中,通常有貨架、待命區(qū)、充電區(qū)和上貨區(qū),另外還有很多路徑上的引導定位點,這些引導定位點相當于實際交通中的十字路口,用于引導AVG左轉(zhuǎn)、右轉(zhuǎn)或者直行,以便執(zhí)行相應的任務。為了讓AGV能夠識別貨架、待命區(qū)、充電區(qū)、上貨區(qū)和引導定位點,要在這些定位點上放置無線射頻識別卡(RFID射頻卡),當AGV經(jīng)過這些定位點上的RFID射頻卡時,AGV上的RFID閱讀器將會讀取射頻卡的信息,從而讓AGV知道當前走到哪個位置了,以便執(zhí)行相應的動作,例如轉(zhuǎn)彎、卸貨、待命、充電和上貨。
基于地圖的以上特點,故本文在建立地圖的時候,將地圖規(guī)劃為只由點和線段組成,點包括5種關鍵點,分別是:“貨架”、“待命區(qū)”、“充電區(qū)”、“上貨區(qū)”和“引導定位點”;線段是指任意2個關鍵點之間的連接,包含單向線段和雙向線段;即一張地圖是由若干個關鍵點和若干條線段組成。
AGV調(diào)度系統(tǒng)中的AGV小車采用的是磁條導航方式,并在磁條上布置若干個RFID定位點。磁條導航方式和電磁導航方式的工作原理是相似的,差別在于磁條導航方式的導引線是磁條,并且電磁傳感器自帶激勵線圈[3]。無線射頻識別技術(Radio Frequency Identification,簡稱RFID)是一種非接觸式的自動識別技術,它通過射頻信號自動識別目標對象并獲取相關數(shù)據(jù),識別工作無須人工干預,可工作于各種惡劣環(huán)境[4]。
作為一款功能強大的通用的繪圖平臺軟件,AutoCAD被廣泛使用于機械、電子、航天、建筑等領域,成為行業(yè)中被使用最為多的計算機輔助設計軟件之一[5]。正是因為AutoCAD具有繪制二維平面圖的諸多優(yōu)點,所以本文選擇用AutoCAD來設計倉庫中的地圖。
正如上文所述,AGV倉儲物流系統(tǒng)中,包含有大量的貨架、待命區(qū)、充電區(qū)、上貨區(qū)和引導定位點。為了形象表示,在AutoCAD中將“引導定位點”畫成圓形,將“貨架”、“待命區(qū)”、“充電區(qū)”和“上貨區(qū)”畫成矩形;這些定位點的種類不同,其RFID號碼也不同,即它們具有不同的屬性。為了能夠快速完成地圖的繪制,通過在AutoCAD中定義“屬性塊”來繪制上述定位點。在AutoCAD中,若將圖形中每部分對象都定義成圖塊,需要時直接插入,這樣就可以避免重復性工作,同時還可提高繪圖的效率和精確度[6]。
綜上,在AutoCAD中,定義2種屬性塊來表示上述定位點,即定義屬性塊“圓”表示引導定位點,包含的屬性有“種類”、“序號”;定義屬性塊“矩形”表示貨架、待命區(qū)、充電區(qū)和上貨區(qū),包含的屬性有“種類”、“地址”、“序號”?!胺N類”表示該定位點是哪一種類型,地址是貨架專有的,表示是第幾個貨架?!靶蛱枴北硎驹摱ㄎ稽c上的RFID號碼是多少,每個定位點上的RFID號碼是唯一的。2種屬性塊的具體信息如表1所示。
表1 2種屬性塊的具體信息
在AutoCAD中,屬性塊“圓”的定義如圖1所示,屬性塊“矩形”的定義如圖2所示。
圖1 屬性塊“圓”的定義
圖2 屬性塊“矩形”的定義
定義完上述2種屬性塊后,接下來就可以根據(jù)倉庫的實際情況,來規(guī)劃整個地圖了,只需要將上述2種屬性塊,修改“種類”、“地址”、“序號”等屬性,并根據(jù)定位點的實際坐標,逐個地插入到地圖中,之后采用線段連接相鄰2個定位點即可完成整個地圖的繪制,非常方便和快捷。地圖上的定位點即是RFID點,線段則是2個RFID點之間的磁條。
在AutoCAD中繪制好地圖后,工人即可按照圖紙進行施工,例如,在路面上,貼上地圖中繪制的所有磁條等等。另外一方面,需要將該地圖導入到AGV調(diào)度系統(tǒng)中,AGV調(diào)度系統(tǒng)正是根據(jù)該地圖來調(diào)度AGV執(zhí)行任務的。為了能快速地將AutoCAD中繪制好地圖導入到AGV調(diào)度系統(tǒng)中,本文采用AutoCAD的二次開發(fā)方法,AutoCAD的二次開發(fā)方法包括VBA、AutoLisp 、VisualLisp和Objet ARX等4種[7],本文選擇使用VBA(Visual Basic for Applications)進行二次開發(fā),主要是因為 VBA具有簡單易學、良好的程序員基礎、速度快,以及與其他Windows應用程序交互好等優(yōu)點而得到了廣泛的應用[8]。
上文已經(jīng)在AutoCAD中繪制好了地圖,接下來將通過VBA腳本程序,導出地圖中所有的關鍵數(shù)據(jù)。地圖中只包含2種圖元,一種是屬性塊,另一種是連接2個相鄰屬性塊的線段,只要將這2種圖元的數(shù)據(jù)導出到文本文檔即可,導出它們的方法是類似的。
首先對于地圖中的每一個屬性塊,包含的關鍵數(shù)據(jù)包括:序號(唯一的RFID號碼)、X坐標、Y坐標、塊種類和貨架地址,只需要將這些數(shù)據(jù)從地圖中讀取即可。由于在定義屬性塊的時候,“種類”屬性使用的是文本類型,為了方便導出數(shù)據(jù),將其轉(zhuǎn)化為數(shù)值類型,具體對應關系,如表2所示。
表2 “種類”屬性轉(zhuǎn)換表
為了導出地圖中每一個屬性塊數(shù)據(jù),只需要在AutoCAD中,通過VBA中的For語句循環(huán)檢索圖形中的所有屬性塊,并將屬性塊的坐標、各個屬性值讀取出來,并保存到相應的數(shù)組中即可,相應的核心代碼如圖3所示。
圖3 讀取屬性塊的核心代碼
之后需要將該數(shù)組的內(nèi)容導出到文本文檔——RFID.txt中,其核心代碼如圖4示所示。
圖4 導出數(shù)據(jù)的核心代碼
其次對于地圖中連接2個相鄰屬性塊的線段,包含的關鍵數(shù)據(jù)包括:序號、起點序號、終點序號,同樣只需要將這些數(shù)據(jù)從地圖中讀取即可,采樣的方法和讀取屬性塊是類似的,也是通過For語句循環(huán)檢索圖形中的所有線段,并將每條線段的起點坐標和終點坐標讀取出來;由于地圖上每一個RFID點的坐標是唯一的,所以可以通過一個點的坐標來查找其相應的RFID號碼。讀取出每一條線段的起點序號和終點序號出來后,將其保存到相應的數(shù)組中。之后同樣將數(shù)據(jù)導出到文本文檔—RFIDLINE.txt。
調(diào)度系統(tǒng)采用的是瀏覽器/服務器架構(gòu)模式,該架構(gòu)是一種以HTTP為傳輸協(xié)議, 客戶端通過瀏覽器訪問Web服務器以及與之相連的后臺數(shù)據(jù)庫的體系結(jié)構(gòu)[9],用戶只需要通過瀏覽器即可訪問運行在服務器中的調(diào)度系統(tǒng)了。瀏覽器端采用JavaScript腳本繪制調(diào)度系統(tǒng)的地圖,服務器采用C#編程語言完成。
將包含地圖數(shù)據(jù)的文件,放在固定的文件夾中,運行在服務器中的調(diào)度系統(tǒng)將讀取這2個文本中的地圖數(shù)據(jù),并在內(nèi)存中生成倉庫地圖,以便完成調(diào)度AGV的任務。由于服務器中的調(diào)度系統(tǒng)是采用C#編程語言編寫的,所以只需要使用C#讀取文本文件中地圖的數(shù)據(jù)即可,也是通過For語句循環(huán)讀取文本文檔中的每一行的數(shù)據(jù),并保存到相應的數(shù)組中。讀取RFID.txt的核心代碼如圖5所示,讀取RFIDLINE.txt的代碼是類似的。讀取完這2個文檔中的數(shù)據(jù)后,服務器將擁有了整個地圖所有的數(shù)據(jù)。
圖5 C#讀取文本文檔的核心代碼
服務器讀取完地圖數(shù)據(jù)后,下一步的關鍵是如何將服務器中地圖的數(shù)據(jù)發(fā)送到瀏覽器端,以便在瀏覽器中繪制地圖;本文采用的方法是在瀏覽器中添加3個隱藏的文本控件,服務器向這3個文本控件發(fā)送2個文檔的地圖數(shù)據(jù)和多個AGV的坐標數(shù)據(jù)。瀏覽器獲得地圖數(shù)據(jù)后,即可繪制出整個地圖。由于地圖的數(shù)據(jù)是固定的,所以僅需發(fā)送一次數(shù)據(jù)即可,但由于AGV是一直處于工作狀態(tài),它們的坐標一直是變動的,所以AGV的坐標是需要周期性發(fā)送給瀏覽器的,從而可以在地圖上實時瀏覽AGV當前的位置。
瀏覽器獲取服務器中的地圖數(shù)據(jù)后,接下來將采用JavaScript腳本來繪制地圖,以供用戶查看。JavaScript作為一種編程/腳本語言,已經(jīng)被廣泛用于web開發(fā),以增加更多的動態(tài)功能和效果,改善最終用戶體驗[10]。在瀏覽器中繪制的地圖和在AutoCAD中繪制的地圖是相同的,同樣是將“引導定位點”畫成圓形,將“貨架”、“充電區(qū)”和“上貨區(qū)”畫成矩形;JavaScript腳本語法比較簡單,有了地圖的數(shù)據(jù)后,繪制地圖的本質(zhì)只是繪制多個圓形、矩形和線段,JavaScript有專門繪制它們的函數(shù),繪制圓形和矩形的核心代碼如圖6所示,繪制線段的代碼是類似的。
圖6 JavaScript繪制圓形和矩形的核心代碼
為了驗證該方法的可靠性和快速性,本文參照某公司的物流倉儲系統(tǒng),采用該方法繪制該倉庫的地圖。首先使用AutoCAD繪制倉庫中的地圖,該地圖包含有4個上貨區(qū),16個貨架,8個充電區(qū),4條物流線,如圖7所示。
圖7 物流倉儲地圖
該圖上部RFID號為14、27、40、55的4個矩形框是4個“上貨區(qū)”,中下部的4行4列共16個矩形框是16個“貨架”,最左邊和最右邊的矩形框是8個“充電區(qū)”,圓形點是“引導定位點”。圖中最短的線段的長度是1米,其他線段的長度是1米的整數(shù)倍;線段包含雙向線段和單向線段,單向線段表示AGV只能朝1個方向移動,包括向左、向右和向下單向線段。
接下來使用已經(jīng)編寫好的VBA腳本,導出地圖中的所有數(shù)據(jù),導出屬性塊的部分數(shù)據(jù)如圖8所示,導出的部分線段數(shù)據(jù)如圖9所示。
圖8 屬性塊的部分數(shù)據(jù)
圖9 線段的部分數(shù)據(jù)
之后將這2個地圖數(shù)據(jù)放入調(diào)度系統(tǒng)中相應的文件夾中,調(diào)度系統(tǒng)運行時,會自動讀取它們,生成調(diào)度地圖;同時調(diào)度系統(tǒng)會自動將這2個地圖的數(shù)據(jù)發(fā)送到瀏覽器端,從而在瀏覽器中繪制出整個地圖;在瀏覽器中顯示的地圖如圖10所示,地圖中的“引導定位點”使用圓形繪制,“貨架”、“充電區(qū)”和“上貨區(qū)”使用矩形繪制,4臺AGV也使用矩形繪制,為了使地圖中的各個圖形更易分辨,這些圖形都采用不同的顏色繪制。用戶可以在這個瀏覽器界面中實時觀察所有AGV當前的工作狀態(tài),掌控整個調(diào)度系統(tǒng)的運行情況。AutoCAD繪制地圖的時間,占據(jù)了整個過程時間的絕大部分,其他過程都是自動化完成的,通過實際測試,全過程只花了2個小時。
圖10 瀏覽器中的物流倉儲地圖
從圖10可以看出,瀏覽器顯示的地圖和在AutoCAD繪制的地圖完全相同,這證明了這種繪制方法的可行性;另一方面,整個過程只需要在AutoCAD中繪制好相應的地圖,再將地圖數(shù)據(jù)導入調(diào)度系統(tǒng)即可,說明這種方法操作簡單;此外,這種繪圖方法使調(diào)度系統(tǒng)和地圖完全解綁,每次修改地圖,調(diào)度系統(tǒng)都無需重新編碼,只需導入新的地圖數(shù)據(jù)即可;最后,繪制一張地圖的時間由原來的1個星期,縮減到現(xiàn)在的2個小時,說明了這種方法的快速性。