子程序
在編程時經常會遇到相同的程序段需要多次執行的情況,如圖6-39所示,程序段A要執行兩次,編程時要寫兩段相同的程序段,這樣比較麻煩。解決這個問題的方法是將需要多次執行的程序段從主程序中分離出來,單獨寫成一個程序,這個程序稱為子程序,然后在主程序相應的位置進行子程序調用即可。
圖6-39 兩種程序結構
在編寫復雜的PLC程序時,可以將全部的控制功能劃分為幾個功能塊,每個功能塊的控制功能可用子程序來實現,這樣會使整個程序的結構清晰簡單,易于調試、查找錯誤和維護。
子程序指令
子程序指令有兩條:子程序調用指令(CALL)和子程序條件返回指令(CRET)。
1.指令說明
子程序指令說明如表6-56所示。
表6-56 子程序指令說明
子程序指令使用要點:CRET指令多用于子程序內部,該指令是否執行取決于它前面的條件,該指令執行的結果是結束當前的子程序返回調用程序。子程序允許嵌套使用,即在一個子程序內部可以調用另一個子程序,但子程序的嵌套深度最多為9級。當子程序在一個掃描周期內被多次調用時,在子程序中不能使用上升沿、下降沿、定時器和計數器指令。在子程序中不能使用END(結束)指令。
2.子程序的建立
編寫子程序要在編程軟件中進行,打開STEP7-Micro/WINSMART編程軟件,在程序編輯器上方有“MAIN(主程序)”“SBR_0(子程序)”“INT_0(中斷程序)”三個標簽,默認打開主程序編輯器。單擊“SBR_0”標簽即可切換到子程序編輯器,如圖6-40(a)所示,在下面的編緝器中可以編寫名稱為“SBR_0”的子程序。另外,在項目指令樹區域雙擊“程序塊”內的“SBR_0”,也可以在右邊切換到子程序編輯器。
如果需要編寫兩個或更多的子程序,可在“SBR_0”標簽上右擊,在彈出的快捷菜單中選擇“插入”→“子程序”,就會新建一個名稱為“SBR_1”的子程序(在程序編輯器上方多出一個“SBR_1”標簽),如圖6-40(b)所示。在項目指令樹區域的“程序塊”內也新增了一個“SBR_1”程序塊,選中“程序塊”內的“SBR_1”,再按鍵盤上的“Delete”鍵可將“SBR_1”程序塊刪除。
圖6-40 切換與建立子程序
3.子程序指令使用舉例
下面以主程序調用兩個子程序為例,來說明子程序指令的使用。先用圖6-40(b)所示的方法建立一個SBR_1子程序塊(可先不寫具體程序),這樣在項目指令樹區域的“調用子例程”指令包內新增了一個調用SBR_1子程序的指令,如圖6-41(a)所示。在編寫主程序時,雙擊該指令即可將其插入程序中;主程序編寫完成后,再編寫子程序。圖6-41(b)為編寫好的主程序(MAIN),圖6-41(c)、(d)分別為子程序0(SBR_0)和子程序1(SBR_1)。
圖6-41 子程序指令使用舉例
主、子程序執行的過程是:
當主程序(MAIN)中的I0.0觸點閉合時,調用SBR_0指令執行,轉入執行子程序SBR_0。在SBR_0程序中,如果I0.1觸點閉合,則將Q0.0線圈置位,然后又返回主程序,開始執行調用SBR_0指令的下一條指令(即程序段2)。當程序運行到程序段3時,如果I0.3觸點閉合,則調用子程序SBR_1指令執行,轉入執行SBR_1程序;如果I0.3觸點斷開,則執行程序段4的指令,不會執行SBR_1。若I0.3觸點閉合,轉入執行SBR_1后,如果SBR_1程序中的I0.5觸點處于閉合狀態,則條件返回指令執行,提前從SBR_1返回主程序,SBR_1中的程序段2的指令無法執行。
6.12.3 帶參數的子程序調用指令子程序調用指令可以帶參數,使用帶參數的子程序調用指令可以擴大子程序的使用范圍。在子程序調用時,如果存在數據傳遞,通常要求子程序調用指令帶有相應的參數。
1.參數的輸入
子程序調用指令默認是不帶參數的,也無法在指令梯形圖符號上直接輸入參數,使用子程序編輯器下方的變量表可給子程序調用指令設置參數。
子程序調用指令參數的設置方法是:打打開STEP 7-Micro/WIN SMART編程軟件,單擊程序編輯器上方的“SBR_0”標簽,切換到SBR_0子程序編輯器,在編輯器下方有一個空變量表,如圖6-42(a)所示;如果變量表被關閉,可執行菜單命令“視圖”→“組件”→“變量表”打開變量表,再按圖6-42(b)所示在變量表內填寫輸入、輸出參數的符號并選擇數據類型。輸入型參數要填寫在變量類型為IN的行內,輸入/輸出型參數要填寫在變量類型為IN_OUT類型的行內,輸出型參數要填寫在變量類型為OUT的行內,表中參數的地址LB0、LB1等是自動生成的。在變量表的左上角有“插入行”和“刪除行”兩個工具,可以對變量表進行插入行和刪除行操作。變量表填寫后,切換到主程序編輯器,在主程序中輸入子程序調用指令,該子程序調用指令自動按變量表生成輸入/輸出參數,如圖6-42(c)所示。
圖6-42 子程序調用指令參數的設置
2.指令參數說明
子程序調用指令最多可以設置16個參數,每個參數包括變量名(又稱符號)、變量類型、數據類型和注釋四部分,注釋部分不是必需的。
1)變量名
變量名在局部變量表中稱作符號,它需要直接輸入,變量名最多可用23個字符表示,并且第一個字符不能為數字。
2)變量類型
變量類型是根據參數傳遞方向來劃分的,它可分為四種類型:IN(傳入子程序)、IN_OUT(傳入和傳出子程序)、OUT(傳出子程序)和TEMP(暫變量)。參數的四種變量類型詳細說明如表6-57所示。
表6-57 參數的四種變量類型詳細說明
3)數據類型
參數的數據類型有布爾型(BOOL)、字節型(BYTE)、字型(WORD)、雙字型(DWORD)、整數型(INT)、雙整數型(DINT)、實數型(REAL)和字符型(STRING)。
指令使用注意事項
在使用帶參數子程序調用指令時,要注意以下事項。常數參數必須指明數據類型。例如,輸入一個無符號雙字常數12345時,該常數必須指定為DW#12345,如果遺漏常數的數據類型,該常數可能會當作不同的類型使用。輸入或輸出參數沒有自動數據類型轉換功能。例如,局部變量表明一個參數為實數型,而在調用時使用一個雙字,子程序中的值就是雙字。在帶參數調用的子程序指令中,參數必須按照一定順序排列,參數排列順序依次是:輸入、輸入/輸出、輸出和暫變量。如果用語句表編程,CALL指令的格式是:
CALL 子程序號,參數1,參數2,…,參數n
4.指令使用舉例
帶參數的子程序調用指令的使用如圖6-43所示,圖6-43(a)為主程序,圖6-43(b)為子程序及局部變量表,主、子程序可以實現Y=(X+20)×3÷8運算。
程序執行過程為:在主程序中,常ON觸點SM0.0處于閉合狀態,首先執行第一個帶參數子程序調用指令,轉入執行子程序,同時將VW0單元中的數據作為X值傳入子程序的LW0單元(局部變量存儲器)。在子程序中,ADD_I指令先將LW0中的值+20,結果存入LW10中;然后MUL_I指令將LW10中的值×3,結果存入LW12中;DIV_I指令再將LW12中的值÷8,結果存入LW2中;最后子程序結束返回主程序,同時子程序LW2中的數據作為Y值被傳入主程序的VW10單元中。子程序返回主程序后,接著執行主程序中的第二個帶參數子程序調用指令,又將VW2中的數據作為X值傳入子程序進行(X+20)×3÷8運算,運算結果作為Y值返回到VW20單元中。
圖6-43 帶參數的子程序調用指令的使用
審核編輯:湯梓紅
-
plc
+關注
關注
5016文章
13387瀏覽量
465400 -
指令
+關注
關注
1文章
611瀏覽量
35814 -
程序
+關注
關注
117文章
3795瀏覽量
81411 -
編輯器
+關注
關注
1文章
806瀏覽量
31291
原文標題:PLC子程序與子程序指令
文章出處:【微信號:中泰PLC自動化教學,微信公眾號:中泰PLC自動化教學】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論