S7-200PLC出現(xiàn)干擾時因?yàn)檫@樣的原因!
盧思敏
發(fā)布于2017-04-25 11:06
19
0
標(biāo)簽:S7-200PLC
馬上注冊,免費(fèi)學(xué)習(xí)超過100課時視頻教程,免費(fèi)下載海量學(xué)習(xí)資料
前幾天看到技成論壇中有學(xué)員發(fā)了個這樣的問題:
他在學(xué)習(xí)帶參數(shù)子程序的編寫,編寫了一個簡單的帶參數(shù)的子程序,但是發(fā)現(xiàn)在調(diào)用時,個子程序執(zhí)行后,第二個子程序也會有輸出,他不知道是為什么?程序很簡單,是我們編程程序經(jīng)常會用到的一個起保停電路。程序運(yùn)行結(jié)果如下圖所示程序中,I0.0接通后,Q0.0輸出為1,Q0.1不應(yīng)該為1的卻也為1了。(左側(cè)為主程序,右側(cè)為子程序)。
下面是我個人之見解,若有分享不當(dāng)之處,望大家指正,謝謝!
為什么會出現(xiàn)這個情況呢?
這主要是對于子程序中變量的類型應(yīng)用不正確造成的這種錯誤。子程序中有四種變量類型,分別為:
(1)輸入變量(IN):用于傳遞實(shí)際參數(shù)進(jìn)入子程序運(yùn)算
(2)輸入/輸出變量(IN/OUT):用于把實(shí)際參數(shù)的初始值傳遞到子程序中進(jìn)行運(yùn)算,運(yùn)算完后把結(jié)果放回到該實(shí)際參數(shù)中,因此這個變量的實(shí)際參數(shù)不能使用常數(shù)。
(3)輸出變量(OUT):該變量分配的實(shí)參用于存儲子程序中運(yùn)算完后的結(jié)果
(4) 臨時變量(TEMP):用于存儲子程序中運(yùn)算的中間結(jié)果。
在這四種變量中,對子程序輸出會有影響的主要是后面兩個變量,我們主要了解后面兩個變量的時候,就可以避免帶參數(shù)子程序在重復(fù)調(diào)用時會出現(xiàn)相互干擾的問題。
首先,我們看輸出變量(OUT)的使用,在上面這個朋友所發(fā)表的問題中,就是因?yàn)檩敵鲎兞康膯栴},所以才造成了這種情況的。
我們可以來分析這個程序,在這個程序中,“啟動”、“停止”這兩個明顯建立的是輸入變量(IN)的變量類型,而“輸出”這個建立的是輸出變量(OUT)類型。我們要分析他為什么會出現(xiàn)干擾,得從PLC的掃描過程,及實(shí)操與形參的對應(yīng)如下圖所示,箭頭方向表示數(shù)據(jù)傳遞方向。
眾所周知PLC的掃描是從上往下周期型掃描的,所以PLC在執(zhí)行程序的時候,會先執(zhí)行網(wǎng)絡(luò)1,然后在執(zhí)行網(wǎng)絡(luò)2的程序,所以當(dāng)執(zhí)行網(wǎng)絡(luò)1的程序的時候,會把實(shí)參的狀態(tài)傳遞到子程序的形參中,所以對于網(wǎng)絡(luò)1的程序來講,形式參數(shù):“#啟動:L0.0”=I0.0,“#停止:L0.1”=I0.1 而實(shí)參Q0.0=“#輸出:L0.2”
所以在執(zhí)行這個子程序時,當(dāng)I0.0=1,I0.1=0的時候,即按下啟動按鈕I0.0時,形參“#啟動:L0.0=1”, “#停止:L0.1=0”,執(zhí)行程序后 “#輸出:L0.2=1”因Q0.0= “#輸出:L0.2”,所以Q0.0=1.。
當(dāng)執(zhí)行網(wǎng)絡(luò)2時,形式參數(shù):“#啟動:L0.0”=I0.2,“#停止:L0.1”=I0.3 而實(shí)參Q0.1=“#輸出:L0.2”所以在執(zhí)行網(wǎng)絡(luò)2的程序時,當(dāng)I0.0=0,I0.1=1時,則:“#啟動:L0.0=0”,“#停止:L0.1=0”因“#輸出:L0.2”在上一個網(wǎng)絡(luò)的運(yùn)行結(jié)果為1,所以當(dāng)“#啟動:L0.0”與“#輸出:L0.2”進(jìn)行邏輯或運(yùn)算后,得到的結(jié)果為1,然后與“#停止:L0.1”的非做邏輯與運(yùn)算,所以“#輸出:L0.2”還是保持為1的結(jié)果。所以輸出Q0.1=“#輸出:L0.2”=1.
通過這樣的分析,前面調(diào)用子程序的輸出狀態(tài)或在下個子程序調(diào)用中會用到,因此大家就可以理解為什么按下I0.0這個啟動按鈕后,Q0.0 和Q0.1都會有輸出了。
若需要處理這個問題應(yīng)該如何處理呢?需要處理這個問題,很簡單,我們只需要把這個輸出的變量改成輸入/輸出的變量就可以了,因?yàn)檩斎?/span>/輸出變量,相對于輸出變量來講,他是需要把初始值給到我們的子程序?qū)?yīng)的形參去運(yùn)算,運(yùn)算完后在給出,還是以剛才的方法去分析,就算前一個網(wǎng)絡(luò)中,他的輸出結(jié)果“#輸出:L0.2=1”執(zhí)行到下一個網(wǎng)絡(luò)后,因?yàn)楦某奢斎?/span>/輸出,會把Q0.1的初始狀態(tài)0,給到“#輸出:L0.2”,所以開始運(yùn)算時是以“#啟動:L0.0”與“#輸出:L0.2”進(jìn)行邏輯或運(yùn)算,因兩個狀態(tài)都為0,所以運(yùn)算結(jié)果為0,然后跟“#停止:L0.1的非”做邏輯與運(yùn)算,輸出結(jié)果“#輸出:L0.2=0”因此Q0.1=“#輸出:L0.2”=0.所以當(dāng)你把這個變量改成輸入/輸出變量的時候就不會產(chǎn)生干擾了。
我們再來看另外的一個帶形式參數(shù)的子程序,程序如下圖所示:
(1)變量表:
(2)子程序
(3)主程序
大家可以分析下,這個程序,在運(yùn)行的過程中會不會出現(xiàn)干擾呢?
很明顯,你只需要掌握了前面我們所說的分析方法去分析,你會發(fā)現(xiàn)這個程序也是會相互干擾的,如下圖所示:
這個程序其實(shí)跟我們前面所提到的是一樣的意思,如何去改,大家應(yīng)該也知道。
若程序改成這樣后,大家覺得是否還是會出現(xiàn)干擾呢?
(1)變量表

(2)子程序

(3)主程序

在程序中,我們把原來開始計算的那個條件給去掉了,換成了SM0.0作為條件,大家可以自己分析下,這個程序會不會出現(xiàn)相互干擾的情況。
作者:技成培訓(xùn)網(wǎng)(曾鑫)
本文版權(quán)為技成所有,未經(jīng)同意,盜取必究!
推薦學(xué)習(xí)相關(guān)課程:
西門子S7-200 SMART PLC編程應(yīng)用入門
西門子S7-200從入門到精通
西門子S7-300中高級應(yīng)用技術(shù)
西門子S7-300使用指南