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

2.1.3 子程序

1.子程序及其調(diào)用

什么是子程序?子程序是相對于主程序而言的獨立的程序段,子程序完成的是各自獨立的程序功能。它和中斷服務(wù)程序一樣,存放在副程序區(qū)。因此,PLC掃描時,執(zhí)行子程序是有條件地的。僅當(dāng)條件成立時,PLC才由主程序區(qū)轉(zhuǎn)移到副程序區(qū)去執(zhí)行相應(yīng)的子程序段,這個過程一般稱為子程序調(diào)用或呼叫子程序。

那么在什么情況下會用到子程序呢?有兩種情況使編寫子程序成為必要。一是在一些用戶程序中,有一些程序功能會在程序中反復(fù)執(zhí)行,如某些標(biāo)定變換程序、報警程序、通信程序中的校驗碼程序等。這時,可將這些程序段編寫成子程序,在需要時對其進(jìn)行調(diào)用,避免了在主程序中反復(fù)重寫這些程序段。這樣可使主程序簡單清晰,程序容量減少,掃描時間也相應(yīng)縮短。另一種情況是當(dāng)系統(tǒng)規(guī)模很大且控制要求復(fù)雜時,如果將全部控制任務(wù)放在主程序中,主程序?qū)浅?fù)雜,既難以調(diào)試,也難以閱讀。這時,使用子程序可以將程序分成容易管理的小塊,使程序結(jié)構(gòu)簡單,易于閱讀、調(diào)試、查錯和維護(hù)。三菱FX系列PLC的功能指令實際上就是一個個子程序,在梯形圖中應(yīng)用功能指令時,實質(zhì)上就是調(diào)用相應(yīng)的子程序完成功能指令的操作功能。

在上文講解程序流程時,曾經(jīng)講到當(dāng)程序執(zhí)行由主程序轉(zhuǎn)移到子程序時,會在主程序區(qū)保存斷點,斷點保存是由PLC自動完成的。子程序調(diào)用指令必須指出程序轉(zhuǎn)移地址,且當(dāng)PLC執(zhí)行相應(yīng)的子程序段后還必須返回到主程序區(qū),因此,子程序里必須要有返回指令。所以,子程序的結(jié)構(gòu)應(yīng)如圖2-5所示。子程序入口標(biāo)志因PLC不同而不同,但子程序調(diào)用指令和子程序返回指令在子程序調(diào)用時應(yīng)成對出現(xiàn),所有品牌的PLC都必須遵循這一原則。

圖2-5 子程序的結(jié)構(gòu)

一般來說,子程序調(diào)用都是有驅(qū)動條件的,僅當(dāng)驅(qū)動條件成立時才調(diào)用子程序。如果想無條件調(diào)用子程序,可以使用特殊繼電器來驅(qū)動子程序調(diào)用指令,例如,用三菱FX的M8000的常開觸點作為驅(qū)動條件。

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

2.子程序嵌套

子程序嵌套是指在子程序中應(yīng)用子程序調(diào)用指令去調(diào)用其他子程序。這時,其調(diào)用過程和主程序調(diào)用子程序一樣。圖2-6所示為三次調(diào)用子程序的程序掃描執(zhí)行過程。

圖2-6 三次調(diào)用子程序的程序掃描執(zhí)行過程

PLC對子程序嵌套應(yīng)用的層次是有限制的,也就是在子程序內(nèi)對子程調(diào)用指令的使用次數(shù)是有限制的。三菱FX系列PLC最多只能使用4次子程序調(diào)用指令,其主程序最多有5層嵌套,西門子S-200 PLC最多為8層嵌套。

3.子程序編寫

子程序是按照所完成的獨立功能來編寫的,但它完成后必須把相關(guān)控制數(shù)據(jù)通過軟元件傳送給主程序,而子程序本身也在使用軟元件。由于三菱FX系列PLC的軟元件是所有程序共享的,所以這就存在著一個軟元件沖突問題(主要體現(xiàn)在數(shù)據(jù)寄存器D的地址沖突),當(dāng)主程序和子程序都使用某一地址的D寄存器時,如果它的含義在主程序和子程序中不同,就會出現(xiàn)混亂。因此,當(dāng)程序復(fù)雜,子程序較多時,必須對所用軟元件進(jìn)行統(tǒng)一分配,以避免發(fā)生混亂。同時,相同功能的子程序在不同控制系統(tǒng)中移植時,必須要檢查子程序與新的主程序軟元件有無地址沖突,如果有,則必須對子程序軟元件進(jìn)行修改或?qū)χ鞒绦蜍浽M(jìn)行修改。

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

關(guān)于子程序編寫的進(jìn)一步說明將在子程序調(diào)用指令中講解。

主站蜘蛛池模板: 柘城县| 丽水市| 万盛区| 连山| 社会| 隆化县| 霍邱县| 常山县| 商城县| 喀喇沁旗| 滨州市| 衡东县| 新蔡县| 余姚市| 山阴县| 芒康县| 沐川县| 青田县| 晋江市| 永登县| 合川市| 泊头市| 铜川市| 财经| 衡东县| 石河子市| 虞城县| 昌江| 连城县| 女性| 渝北区| 景谷| 永和县| 金塔县| 稷山县| 崇信县| 法库县| 临海市| 庆元县| 奉化市| 景德镇市|