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

2.3 子程序調(diào)用

2.3.1 子程序調(diào)用指令CALL,SRET

1.指令格式

FNC 01:CALL 【P】    子程序調(diào)用    程序步:3

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

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

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

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

圖2-26 CALL指令梯形圖

圖2-27 SRET指令梯形圖

CALL指令操作數(shù)內(nèi)容及取值如表2-6所示。

表2-6 CALL指令操作數(shù)內(nèi)容及取值

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

解讀(CALL):當(dāng)驅(qū)動條件成立時,調(diào)用程序入口地址標(biāo)號為Pn的子程序,即轉(zhuǎn)移到標(biāo)號為Pn的子程序去執(zhí)行。

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

2.指令應(yīng)用

1)指令執(zhí)行流程

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

圖2-28 調(diào)用子程序程序流程圖

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

圖2-29 二次調(diào)用子程序流程圖

2)指針P的使用

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

子程序必須放在副程序區(qū),在主程序結(jié)束指令FEND后面,子程序必須以子程序返回指令SRET結(jié)束。

3)脈沖執(zhí)行型

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

圖2-30 CALLP指令應(yīng)用

4)子程序調(diào)用

子程序可以在主程序中調(diào)用,也可以在中斷服務(wù)程序中調(diào)用,還可以在其他子程序中調(diào)用,其調(diào)用執(zhí)行過程都是相同的。

3.子程序內(nèi)軟元件使用

1)定時器T的使用

由于一般的定時器只能在線圈被驅(qū)動時計時,因此,如果用于僅在某種條件下才驅(qū)動線圈的子程序中,則不能進(jìn)行計時。因此,F(xiàn)X系列PLC規(guī)定了在子程序里使用專用的子程序用定時器T192~T199,該定時器在線圈被驅(qū)動時或是執(zhí)行END指令時進(jìn)行計時,如果達(dá)到設(shè)定值,在線圈被驅(qū)動或執(zhí)行END指令時相應(yīng)觸點動作。

在子程序內(nèi)使用1ms定時器(T246~T249)時,到達(dá)設(shè)定值后,輸出觸點會在最初驅(qū)動線圈指令時(執(zhí)行子程序時)動作,請務(wù)必注意。

2)軟元件狀態(tài)

子程序在調(diào)用時,其中各軟元件的狀態(tài)受程序執(zhí)行的控制。但當(dāng)調(diào)用結(jié)束后,其軟元件會保持最后一次調(diào)用時的狀態(tài)不變。如果這些軟元件狀態(tài)沒有受到其他程序的控制,就會長期保持不變,哪怕是驅(qū)動條件發(fā)生了改變,軟元件的狀態(tài)也不會改變。

如果在程序中對定時器、計數(shù)器執(zhí)行RST指令,定時器和計數(shù)器的復(fù)位狀態(tài)也會保持。因此,對這些軟元件編程時,可以在子程序結(jié)束后的主程序中復(fù)位,或是在子程序中進(jìn)行復(fù)位。

主站蜘蛛池模板: 常山县| 沙雅县| 斗六市| 鹰潭市| 昭平县| 岳池县| 桐柏县| 垦利县| 晋州市| 饶河县| 平遥县| 德江县| 安顺市| 定襄县| 揭西县| 东海县| 岳阳县| 嵊州市| 怀仁县| 临澧县| 民乐县| 宁化县| 温宿县| 健康| 罗山县| 申扎县| 盐城市| 烟台市| 尉氏县| 南华县| 新竹县| 麻江县| 五常市| 浙江省| 建阳市| 望城县| 凤庆县| 平安县| 榆林市| 加查县| 布尔津县|