李強(qiáng)
摘 ? 要:針對(duì)機(jī)電專業(yè)的學(xué)生學(xué)習(xí)西門(mén)子功能編程語(yǔ)言比較困難,功能編程語(yǔ)言經(jīng)常用到子程序,從子程序的特點(diǎn),運(yùn)行方式,舉例應(yīng)用完整技術(shù)介紹了子功能編程,寫(xiě)程序時(shí)經(jīng)常用到子程序,它是架構(gòu)式的編程,學(xué)習(xí)西門(mén)子功能指令的重點(diǎn)和難點(diǎn)。本文研究分析了西門(mén)子編程語(yǔ)言《子程序的調(diào)用》,希望為廣大讀者提供參考。
關(guān)鍵詞:程序特點(diǎn) ?運(yùn)行方式 ?梯形圖
中圖分類號(hào):TP39 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A ? ? ? ? ? ? ? ? ? ? ? ?文章編號(hào):1674-098X(2019)02(a)-0148-02
1 ?子程序的特點(diǎn)
(1)子程序只有在主程序發(fā)出調(diào)用指令的時(shí)候才運(yùn)行,運(yùn)行完畢后,自動(dòng)返回主程序,所以不用每個(gè)掃描周期都執(zhí)行,這樣可以減少整個(gè)程序的運(yùn)行時(shí)間,對(duì)于一些初始化的程序,寫(xiě)在子程里比較合適。(2)S7-200 CPU可以寫(xiě)64個(gè)子程序(0-63) CPU226XM還可以寫(xiě)128個(gè)子程序(0-127)。(3)子程序可以嵌套使用(主程序中調(diào)用子程序,子程序再調(diào)用子程序),最大嵌套深度為8級(jí),但是中斷程序里不能嵌套子程序。(4)子程序默認(rèn)的名稱是SBR_n。(n子程序編號(hào))也可以修改。
2 ?子程序的運(yùn)行方式
(1)并列運(yùn)行,一個(gè)程序中有多個(gè)子程序,之間沒(méi)有嵌套的關(guān)系,是并列的,只要調(diào)用的條件滿足,這個(gè)子程序就能被運(yùn)行。(2)嵌套運(yùn)行,主程序調(diào)用子程序,子程序還可以再調(diào)用子程序,這種方式叫做嵌套,最多可以嵌套8層,這種情況下,各個(gè)子程序的運(yùn)行有先后之分。(3)在子程序中不能使用END(結(jié)束指令),每一個(gè)每一個(gè)子程序在編譯時(shí)編譯器自動(dòng)在子程序的最后加入無(wú)條件返回指令,當(dāng)用戶需要編程實(shí)現(xiàn)有條件返回時(shí),可以在子程序使用有條件返回RET指令。(4)帶參數(shù)調(diào)用子程序。在調(diào)用子程序時(shí)可以帶參數(shù)調(diào)用。參數(shù)在子程序的局部變量表中定義。每一個(gè)參數(shù)需要定義一個(gè)符號(hào)名(最多為23個(gè)字符),選擇變量類型和數(shù)據(jù)類型。在參數(shù)條用子程序時(shí)可以向子程序交接16個(gè)參數(shù)或從子程序交接16個(gè)參數(shù)。(5)子程序的局部變量表中的變量類型區(qū)定義交接參數(shù)和臨時(shí)參數(shù):IN、IN OUT、OUT和TEMP。
下面通過(guò)這個(gè)例子說(shuō)明主程序怎樣調(diào)用子程序:
有兩個(gè)電動(dòng)機(jī),分別接在Q0.0和Q0.1上,I0.0控制電動(dòng)機(jī)1(Q0.0)啟動(dòng),IO.1控制電動(dòng)機(jī)1(Q0.0)停止;I0.2控制電動(dòng)機(jī)2(QO.1)啟動(dòng),IO.3控制電動(dòng)機(jī)2(Q0.1)停止。
解:第一步:要求用局部変量,子程序調(diào)用來(lái)完成。先建立變量,選擇子程序,默認(rèn)的變量有IN,OUT等,定義“啟動(dòng)”。選擇變量類型是位元件BOOL,它自動(dòng)調(diào)用了變量L0.0,定義“停止”,同樣選擇位元件,它自動(dòng)調(diào)用了變量L0.1,定義“電動(dòng)機(jī)”,它用了IN和OUT,一個(gè)線圈和一個(gè)觸點(diǎn),同樣選擇位元件,它自動(dòng)調(diào)用了變量L0.2,主程序先接觸這個(gè)變量,然后再交給子程序,如狀態(tài)表1所示。
第二步:要求用局部変量,子程序調(diào)用來(lái)完成。分析:在子程序中建立局部変量,変量符號(hào)用“啟動(dòng)”、“停止”、“電動(dòng)機(jī)”命名。在子程序中寫(xiě)出込些局部変量之同的控制邏輯關(guān)系,在主程序中凋用這些変量,如圖1所示。
第三步:主程序啟動(dòng)SM0.0它就調(diào)用了子程序中L0.0,L0.1.L0.2啟動(dòng)、停止、電動(dòng)機(jī)三個(gè)之間的關(guān)系,IO.2接通。Q0.1電動(dòng)機(jī)啟動(dòng)有輸出并且自保持,Q0.1顯示“1”IO.3接通。Q0.1電動(dòng)機(jī)停止,Q0.1顯示“0”如圖2所示。同樣主程序啟動(dòng)SM0.0它就調(diào)用了子程序中L0.0,L0.1.L0.2啟動(dòng)、停止、電動(dòng)機(jī)三個(gè)之間的關(guān)系,IO.0接通,Q0.0電動(dòng)機(jī)啟動(dòng)有輸出并且自保持,Q0.1顯示“1”IO.1接通。Q0.1電動(dòng)機(jī)停止,Q0.1顯示“0”如圖3所示。
參考文獻(xiàn)
[1] 廖常初.S7-200PLC基礎(chǔ)教程[M].北京:機(jī)械工業(yè)出版社,2009.
[2] 王兆宇,王洪權(quán).西門(mén)子PLC電氣設(shè)計(jì)與編程自學(xué)寶典[M].北京:中國(guó)電力出版社,2015.
[3] 吳永平,奚茂龍.西門(mén)子PLC其他操作技術(shù)[M].北京:化學(xué)工業(yè)出版社,2017.