子程序塊在Logix5000中的應用
對于A-B PLC編程,Logix5000一直以其技術成熟、結構簡單、穩定可靠和應用廣泛而著稱,但也存在一些缺點,如v16.0版本以前無法實現子程序塊的調用。面對大量相似的設備,不得不重復性的工作降低了工作效率。為了提高效率,也有人在編寫程序時使程序編寫標準化、模塊化,但都因為無法實現參數賦值,而只能逐條修改,雖然提高了些工作效率,但其塊功能問題依然未能解決。
當前,汽車的普及及檔次的不斷提高對現代化的汽車廠的要求越來越高,而PLC程序無疑成為對其直接影響的最主要、最直接、最直觀的要素,也是廣大用戶對于PLC程序設計提出的最強烈的要求。現代化汽車廠要求PLC程序必須具有調試時間短、性能穩定、修改方便、維護便捷、程序短小精悍以及通用性強等特點。自Logix5000 v16.0版本后,A-B公司增加了ADD ON功能,從而解決了子程序塊的調用問題。
系統建立
1.任務的建立
首先應先新建任務。點擊菜單FILE下的NEW(或快捷鍵NEW),彈出對話框:根據所選PLC類型選擇Type,在Revision中選擇下拉菜單16;在Name中給程序起名(本例中程序名稱為TEST);在Chassis Type中選擇所選的機架,本例選擇的為10槽機架;在Solt中選擇控制器所在機架的位置,默認為0槽。點擊OK,出現圖1所示信息(請注意圖中藍色部分),則本PLC程序創立完成。

圖1 新文件創建完成
2.I/O模塊配置
接下來要配置I/O模塊。在圖1所示信息中,右鍵點擊圖中藍色部分,在新彈出的對話框中選擇New Module,于是出現新對話框。選擇相應的I/O模塊,例如可選擇一個以太網模塊、兩個IB16輸入模塊、兩個OB16E輸出模塊以及一個Profibus模塊(本例中名稱為Sst1),得到圖2所示信息,則I/O模塊配置完成。

圖2 I/O模塊配置完成
建立數據類型
在創建子程序前,應先創建數據結構(如圖3所示)。右鍵單擊Data Types下的User-Dfines(圖中藍色部分),選擇New Data Type。在彈出的對話窗口中,在Name中給所定義的數據類型起名,在Members下定義本類數據類型所包含的參數。這里所定義的數據類型即是在子程序中所調用的形參。Members下的Name為參數的名稱,Data Type為參數的類型,Style為參數選擇進制,Description內加入文字說明。

圖3 創建數據結構
如圖4所示,本案例中參數名稱Name為UD_FLDP,數據類型為現場IP67輸入模塊,其中參數為所有進入IP67輸入模塊的信號。點擊Apply,點擊OK,則本條數據結構建立完成。同時,本數據結構也可以作為其他數據類型的一個參數,而被其他數據結構所調用。如此,可以根據需要建立不同名稱、不同類型的數據類型以方便程序應用。

圖4 數據結構詳解
建立子程序
1.工藝流程
在編寫子程序前應首先明確工藝流程。以汽車工廠焊裝車間機械化輸送系統為例,焊裝車間機械化輸送系統多為滑橇輸送,以普通輥床為主,輔以旋轉輥床、升降輥床、移行機和升降機等,其輸送方式為連續輸送,即下一工位出現空位時,本工位即向下一工位輸送。普通輥床直接輸送,旋轉輥床則需要經自身旋轉后接件或送件,移行機需要經過平移后接件或送件,升降機則需要經過上升及下降過程接件或送件等。
圖5所示為普通輥床的輸送方式,輸送方向為從輥床GN132向輥床GN133輸送。圖中綠色靶型圖形為輥床上開關,本例中普通輥床各設兩個現場檢測開關,分別為從左向右到位開關與超程開關。當輥床GN132有車,即輥床GN132到位或超程開關任何一個檢測到高電平,即認為本輥床有車(或為不帶車空滑橇)占位。如果此時其下一輥床GN133處無車,即輥床GN133到位及超程開關未檢測到任何一個高電平,即認為本輥床無車(或為不帶車空滑橇)空位。此時,輥床GN132向輥床GN133輸送。當車身(或為不帶車空滑橇)完全脫離輥床GN132后(此時輥床GN132到位及超程開關未檢測到任何一個高電平,即為空位),輥床GN132停止運行。當車身(或為不帶車空滑橇)完全進入輥床GN133后(此時輥床GN133到位或超程開關檢測到任何一個高電平),輥床GN133停止運行。以上為輥床GN133完成一次進車過程。同理,當輥床GN133占位,而輥床GN134空位時,輥床GN133向輥床GN134上輸送,當輥床GN133空位停止而輥床GN134輸送到位后,輥床GN133完成一次出車過程。此時,普通輥床完成其全部動作過程。

圖5 普通輥床的輸送方式
2.子程序建立
打開RSLogix 5000,在左側任務欄中右鍵單擊Add-On Instructions,選擇New Add-On Instruction,然后在新彈出的對話窗口中給所要建立的子程序起名字。本例中子程序名為RollerBed_GN,說明為“普通滾床程序塊”。點擊確定,在彈出的對話框中多了幾個選擇,但此時的Parameters中僅有兩條,而Local Tags下面為空,沒有任何Tag。
在Parameters中建立Name為BedThis的參數,其中Usage選擇InOut,在Data Type中選擇UD_INPUT(在前面已建立的數據類型),將Req與Vis選項選中,點擊應用并確定(見圖6)。

圖6 在Parameters中建立數據
同理,建立Name為BedBefor與BedAfter的參數,分別為BedThis輥床的前一輥床和后一輥床。點擊應用并確定后,在RollerBed_GN下出現Logic(見圖7)。雙擊Logic,進入子程序編輯框。新建一條程序,點擊RUNG,加入一個常開點(Examine On),雙擊常閉點的“ ?”,選擇下拉菜單下的BedThis.SXFLDP.SxArrive_ss。同理,按照前面工藝流程繼續完善程序,完成后的程序如圖8所示,子程序建立完畢。

圖7 在RollerBed_GN下出現Logic

圖8 子程序建立完畢
子程序的調用
子程序建立完成后,我們觀察到在Add-On Instruction下多了條分支RollerBed_GN,即為我們所建立之子程序,可以被復調用。在選中RUNG條件下,鍵入RollerBed_GN,則出現圖9所示對話框,此處的普通輥床程序塊即為前面所建立的程序塊,其數據結構即為前面所建立的模式。右鍵單擊RollerBed_GN后的“?”,在下拉列表中選擇New Tag,如以GN133為例,新Tag名稱為GN133ADDON。由于GN133前一工位為GN132,后一工位為GN134,則在BedThis中填入GN133,BedBefor中填入GN132,BedAfter中填入GN134。