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