梁 晶,程志剛,王慶磊
(國核自儀系統工程有限公司,上海 201108)
隨著工業技術的發展,出現各種各樣清洗設備,超聲波清洗機是工業中較常見的一種。利用超聲波[1]在液體中傳播,使液體與清洗槽在超聲波頻率下一起振動,液體與清洗槽振動時有自己的固有頻率,這種振動頻率是聲波頻率,所以人們就聽到嗡嗡聲。超聲波清洗機的傳送方式通常有轉盤式、鏈條通過式、移栽槽式等。然而,超聲波槽式清洗機的控制需要多個槽來回往復式地清洗,不同的產品,清洗的槽位可能還不一樣,這就導致了程序復雜度較高,槽位越多,程序就越復雜,修改也越麻煩。如果使用隊列,就能滿足客戶不同產品隨意組合槽位、增加清洗位號的需要,并且接口可以根據需要適當開放出來,讓客戶自己根據產品工藝需求調整清洗順序。
隊列(queue)[2]是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊(push)要排在隊尾(rear),每次出隊(pop)的都是隊首(front)的人。隊列的操作主要有元素入隊列和元素出隊列。建立順序隊列結構[3]必須為其靜態分配或動態申請一片連續的存儲空間,并設置兩個指針進行管理。一個是隊頭指針front,它指向隊頭元素;另一個是隊尾指針rear,它指向下一個入隊元素的存儲位置,如圖1所示。

圖1 順序隊列操作示意圖
每次在隊尾插入一個元素時,rear 增1;每次在隊頭刪除一個元素時,front 增1。隨著插入和刪除操作的進行,隊列元素的個數不斷變化,隊列所占的存儲空間也在為隊列結構所分配的連續空間中移動。當front=rear 時[4-5],隊列中沒有任何元素,稱為空隊列。當rear 增加到指向分配的連續空間之外時,隊列無法再插入新元素,但這時往往還有大量可用空間未被占用,這些空間是已經出隊的隊列元素曾經占用過的存儲單元。
系統機構圖,如圖2所示。

圖2 系統機構圖
1)從圖2 中可以看出,系統由進料部、機械臂、清洗槽和出料部等組成。進料部和出料部的機構由其他部件組成,和本文隊列思想無關,不進行具體描述。主要介紹機械臂和超聲波清洗槽這兩大部分。機械臂由橫移伺服、升降伺服和機械掛鉤組成。超聲波清洗槽共由A 槽、B 槽、C 槽、D 槽、E 槽、F 槽六個槽位組成。各槽功能介紹如下:A 槽功能是超聲波預清洗;B 槽功能是超聲波清洗;C 槽功能是超聲波拋動清洗;D 槽功能是超聲波溢流漂洗;E 槽功能是超聲波溢流拋動漂洗;F 槽功能是超聲波溢流再次拋動漂洗。
2)機械臂在各個清洗槽移動的工作原理。機械臂到上料位取料,然后把料放入到A 槽,清洗一定時間后,機械臂把料從A 槽放到B 槽,然后機械臂再去上料位取一個新料放入A 槽清洗,同樣清洗一定時間后,機械臂把料從B 槽放入C 槽,同時把新料從A 槽放入B 槽,再去上料位取一個新料放入A 槽。依此下去,最后的邏輯是機械臂從F 槽取料然后去下料位放料,然后E 槽取料到F 槽放料,D 槽取料到E 槽放料,C 槽取料到D 槽放料,B 槽取料到C 槽放料,A 槽取料到B 槽放料,然后上料位取料到A 槽放料,按照此流程往復循環工作。
根據清洗工作原理,一般的程序設計思想是按機械臂的移動流程一步步設計程序,但是這樣的話程序開發工作量非常大,并且一旦客戶要稍微改下清洗的順序,又需要大量改動程序流程,這時使用隊列的思想就可以完美解決以上兩個難點。
首先給上料位、A 槽、B 槽、C 槽、D 槽、E 槽、F槽、下料位等分別做一個位置編號,相對應為1、2、3、4、5、6、7、8 共八個位置號。那么機械臂的移動流程就是7-8-6-7-5-6-4-5-3-4-2-3-1-2-結束,然后下一個循環。如圖3所示。

圖3 機械臂隊列流程
從圖3 隊列流程可以看出,隊列頭部的數據是機械臂即將要走的位置,例如先移動到7 號位置取料,7號位置走完,對隊列元素進行出隊操作,并且隊尾填充數字0 操作。這一步操作完成,排在頭部位置是數據8。如圖4所示。

圖4 機械臂隊列流程移動后
程序依此順序操作,每移動一步,隊列左移一個數據,隊尾就填充數據0,當程序檢索數據為0 時,就認為機械臂移動流程都已完成,此時對隊列重新填充數據7-8-6-7-5-6-4-5-3-4-2-3-1-2,這樣程序就形成了循環取料、放料的動作流程。
如上描述,當客戶更改清洗工藝或者換型時,只需要修改、增加或者刪減隊列中的元素即可完成工藝的變更或型號切換,操作簡單方便,也可以把這個動作流程順序接口做到觸摸屏界面上,開放給客戶輸入,并設置安全權限,提高設備的靈活性、操作的便捷性。
根據流程設計描述,進行清洗設備這一部分的程序開發,首先要定義機械臂的位置號,本文中機械臂共有8 個位置[2],因此,要對橫移伺服設定8 個絕對位置,程序要進行哪一個位置移動時,就隨時調用橫移伺服的絕對位置啟動信號。定義橫移伺服的絕對位置程序編寫如圖5所示。

圖5 橫移伺服1#絕對位置程序段
定義好橫移伺服的絕對位置后,需要把橫移伺服的隊列元素轉換為程序語言,每一個位置號[3]用4個Bit 位表示,4 個Bit 位最大可表示為二進制1111 即十進制數據15。本程序中最大位置號是8,因此足夠用。把本文隊列流程7-8-6-7-5-6-4-5-3-4-2-3-1-2 賦值給三菱PLC 的數據寄存器D1350/D1351/D1352/D1353(一個數據寄存器D 是由16 個Bit 位組成,要完成本文的流程步號,需要4 個寄存器D,寄存器編號1350—1353),程序編寫如圖6所示。

圖6 隊列流程轉為程序語言
因為是4 個Bit 位表示一個位置序列號,所以需要把寄存器D 再分解成軟元件位S,編號從S130 開始,總共4 個寄存器D,共占用64 個Bit,然后通過三菱PLC 左移指令SFTLP 進行4 個Bit 一起左移,即可得出想要移動的位置號。具體程序編寫如圖7所示。

圖7 左移位號并調用絕對定位
隊列常用于高級語言程序開發[9-10],在PLC 實際運用中較少使用,隨著目前社會工業自動化程度的提高,客戶需求復雜多變,結合實際情況,熟練運用隊列思想能夠使程序開發工作化繁為簡,游刃有余。本文將隊列這一思想簡單融入超聲波清洗設備的移栽程序段中,完美地克服了原有程序呆板且繁雜的缺點[11-12],大大提高了程序開發效率,思路簡單清晰,保證了程序運行的穩定性,也為后續的設備維護提供了保障。
舉一反三,類似于這種多位置多組合反復調用的情況,如小車的多位置往返移動、多層貨梯、呼叫器等,都可以靈活運用隊列,并結合其他指令,使隊列元素能夠進行左移、右移、刪除、插入等各種操作,提高實際應用價值。