官术网_书友最值得收藏!

2.3 子程序調用

2.3.1 子程序調用指令CALL,SRET

1.指令格式

FNC 01:CALL 【P】    子程序調用    程序步:3

FNC 02:SRET       子程序返回    程序步:1

CALL指令可用軟元件如表2-5所示。

表2-5 CALL指令可用軟元件

指令梯形圖如圖2-26、圖2-27所示。

圖2-26 CALL指令梯形圖

圖2-27 SRET指令梯形圖

CALL指令操作數內容及取值如表2-6所示。

表2-6 CALL指令操作數內容及取值

注:由于P63為CJ(FNC 00)專用(END跳轉),所以不可以作為CALL(FNC 01)指令的指針使用。

解讀(CALL):當驅動條件成立時,調用程序入口地址標號為Pn的子程序,即轉移到標號為Pn的子程序去執行。

解讀(SRET):在子程序中,執行到子程序返回指令SRET時,立即返回到主程序調用指令的下一行繼續往下執行。

2.指令應用

1)指令執行流程

調用子程序也是一種程序轉移操作,和CJ指令不同是,CJ指令是在主程序區中進行轉移,而調用子程序則是轉移到副程序區進行操作,CJ指令轉移后不產生斷點,無須再回到CJ指令的下一行程序,而調用子程序在完成子程序的運行后,還必須回到調用子程序指令,并從下一行繼續往下運行。而它們的相同之處是程序轉移入口地址都用分支標號P來表示調用子程序的程序流程圖,如圖2-28所示。

圖2-28 調用子程序程序流程圖

調用子程序指令可以嵌套使用。三菱FX系列PLC在子程序內的調用子程序指令CALL最多允許使用四次,也就是說一個用戶程序最多允許進行五層嵌套。圖2-29表示了一個二次調用子程序的流程圖。

圖2-29 二次調用子程序流程圖

2)指針P的使用

指針P的標號不能重復使用,也不能與CJ指令共用同一個標號,但一個標號可以供多個調用子程序指令調用。需要注意的是不可以使用指針P63。

子程序必須放在副程序區,在主程序結束指令FEND后面,子程序必須以子程序返回指令SRET結束。

3)脈沖執行型

調用子程序指令CALL有連續執行型和脈沖執行型兩種方式。當為連續執行型CALL時,在每個掃描周期都會被執行。而當為脈沖執行型CALLP時,僅在驅動條件的上升沿出現時執行一次,用CALLP指令也可以執行程序初始化,且比CJ指令還要方便,如圖2-30所示。

圖2-30 CALLP指令應用

4)子程序調用

子程序可以在主程序中調用,也可以在中斷服務程序中調用,還可以在其他子程序中調用,其調用執行過程都是相同的。

3.子程序內軟元件使用

1)定時器T的使用

由于一般的定時器只能在線圈被驅動時計時,因此,如果用于僅在某種條件下才驅動線圈的子程序中,則不能進行計時。因此,FX系列PLC規定了在子程序里使用專用的子程序用定時器T192~T199,該定時器在線圈被驅動時或是執行END指令時進行計時,如果達到設定值,在線圈被驅動或執行END指令時相應觸點動作。

在子程序內使用1ms定時器(T246~T249)時,到達設定值后,輸出觸點會在最初驅動線圈指令時(執行子程序時)動作,請務必注意。

2)軟元件狀態

子程序在調用時,其中各軟元件的狀態受程序執行的控制。但當調用結束后,其軟元件會保持最后一次調用時的狀態不變。如果這些軟元件狀態沒有受到其他程序的控制,就會長期保持不變,哪怕是驅動條件發生了改變,軟元件的狀態也不會改變。

如果在程序中對定時器、計數器執行RST指令,定時器和計數器的復位狀態也會保持。因此,對這些軟元件編程時,可以在子程序結束后的主程序中復位,或是在子程序中進行復位。

主站蜘蛛池模板: 山阳县| 江永县| 石门县| 神池县| 伊川县| 全南县| 南漳县| 松江区| 满洲里市| 库尔勒市| 驻马店市| 宝应县| 佛坪县| 万年县| 青龙| 丹阳市| 都昌县| 合川市| 德惠市| 祥云县| 正定县| 麻城市| 凤阳县| 彩票| 长汀县| 内江市| SHOW| 新余市| 砀山县| 团风县| 剑川县| 喜德县| 通江县| 库车县| 阿坝| 环江| 肥乡县| 栾川县| 汝阳县| 天台县| 稷山县|