主程序与子程序不在同一程序模块中_深度解析S7200系列PLC带参数子程序用法
一、導讀
當控制要求相同或具有相同的算法時,(如對電機的控制,若需要對多臺電機進行控制,且每臺電機具有相同的控制方式)此時可考慮根據該控要求,編寫一個功能塊,然后重復調用該功能塊,然后賦予不同的實參來實現該控制,如同所示:
?
但往往有些人做完后發現一臺電機啟動后,其他的電機本來不該啟動的也跟隨著啟動了,這是什么原因呢?
本篇文章就是為大家分析為什么會出現這種情況,其實這主要還是對子程序中變量類型的使用不正確造成的,在S7-200系列的子程序中有四種變量類型,分別為IN(傳入)、IN/OUT(傳入/傳出)、OUT(傳出參數)、TEMP(臨時變量),下面就為大家詳細介紹下子程序中的這幾種變量類型的含義和在應用時應如何選擇。
二、變量類型IN
變量類型IN稱為輸入類型,是“只讀”變量,用于把外圍的數據或狀態傳入到子程序中進行運算,若把子程序看作成一個指令(如一個加法指令),那么輸入參數就相當于指令的IN的管腳。該變量建立后,在調用子程序時位于子程序的左側。由于是把數據傳入子程序中,所以該形式參數在賦實參時可使用常數、存儲器或指針。
變量建立時只需要建立符號名稱和選擇對應的數據類型即可,至于該變量的地址,系統會自動分配一個局部存儲器的地址,注意該地址不可修改,如下圖所示,第一個地址的符號命名為“Start_Motor”,選擇數據類型為“BOOL”后,系統自動給其分配了一個L0.1的局部存儲器地址。
三、變量類型OUT
變量類型OUT稱為輸出變量類型,是一個可寫的變量,主要用于把子程序運算完的結果傳遞出來,類似于指令中的OUT管腳(如一個加法指令)。該變量建立后,在調用子程序時位于子程序的右側。由于該變量類型用于存儲運行的結果,所以在使用時該變量類型的形參在賦實參時只能使用存儲器,不能使用常數或是指針。
由于輸出參數并不保留子程序最后一次執行時分配給它的數值,所以必須在每次調用子程序時將數值分配給輸出參數。注意:在電源上電時,SET和RESET指令只影響布爾量操作數的值,建立OUT的變量類型與建立IN的類型方法一樣,也會根據選擇的數據類型系統自動分配地址。
四、變量類型IN_OUT
變量類型IN_OUT稱為輸入輸出變量類型,是一個可讀可寫的變量即可讀取他的值傳遞給子程序內部的運算,也可把運算完的結果輸出放入到該變量中,比如說我們用到的自加1指令或是啟保停電路中用于輸出和自保持的變量就需要用到該變量。該變量建立后,在調用子程序時位于子程序的左側,由于該地址需要存儲子程序運算完的結果,所以在賦予實參時不允許使用常數和指針作。
五、變量類型TEMP
變量類型TEMP稱為臨時變量,該變量與前面所介紹的三種變量的最大區別就是不參與對子程序數據傳遞,即不把外圍的數據傳入到子程序,也不把子程序的運算結果傳遞出子程序,該變量主要用于子程序的內部暫存中間運算結果使用,所以該變量類型無需賦實參。
Temp變量在運算前一定需要有一個確定的值,若沒有確定值不能參與運算,否則會出現運算結果數據的混亂,如同下圖所示:
?
圖中有兩個臨時變量,分別為Temp1和Temp2.從程序中可發現,對于Temp1在用于后面的運算時,可知道他的值是由兩個輸入變量相加后的結果,它時一個確定的指。而對于Temp2這個臨時變量,在進行加法運算時,并不知道他的值時多少,所以它不是一個確定的值,那么在程序執行后,Result1可得到一個正確的結果,而Result2得不到一個正確的結果。六、如何選擇變量類型
下面以一個簡單的例子為例來說明如何選擇變量類型,如:假設有多臺空壓機,要求當壓力小于下限設定壓力時,啟動空壓機電機,當壓力高于上限壓力設定時,關閉空壓機電機。壓力通過壓力傳感器進行檢測。
分析:(1)由于空壓機的啟動方式是相同的,但上下限壓力設定以及傳感器的輸出信號和檢測范圍都不同,所以在編寫程序是,可考慮建立一個帶參數的功能塊,然后把這些參數作為實參賦值到該子程序的形參上。(2)當前壓力的計算,當前壓力的計算可使用西門子提供的模擬量轉換庫,也可自己根據公式編寫,這里我們自己編寫一個這個功能塊的程序。
模擬量采集換算的計算公式如所示,其中ISl和ISH分布表示的是轉換后的數字量范圍,OSH和OSl表示的是傳感器檢測范圍。
程序編寫時,必須全部轉換為同一數據類型進行使用,在該公式中不同變量的數據類型如下:
Ov:Real
? ? Osh/Osl:Real
Iv:INT
? ? Ish/Isl:INT
從這個公式中我們可以OSL和OSH,ISL和OISL以及IV都是我們需要從外圍給入到這個計算的子程序中,所以這些變量在建立的時候建立為IN的類型。
公式中的“OSH-OSL”、“IV-ISL”和“ISH-ISL”以及把整數的數據類型轉換為實數的數據類型等,這些計算結果都需要進行暫存,所以可建立TEMP的變量來存儲。
對于輸出結果OV,在這個公式中是一個輸出的結果,是一個可寫的變量,但后續還需要用于與設定的上下限值做比較,因此還需要去讀取他的值,那么該變量也是一個可讀的變量,所以建立時可建立為IN_OUT變量。
對于電機的運行標志位,在低壓下限設定值時啟動,高于上限設定值時停止,在兩個限制值之間時需要進行自保持,所以需要用到他的觸點進行自鎖,這也是一個可讀可寫的變量,同樣建為IN_OUT的變量類型。
對于空壓機電機的啟動信號,電機運行標志位為1就輸出,為0就斷開,程序中只需要用到該變量的輸出線圈即可,所以在建立時建立OUT類型的變量。
七、編寫帶參數的子程序
(1)程序編寫及變量表的建立,按照上述分析對該程序中需要用到的變量表進行建立,并對每個變量,分配好對應的數據類型,變量表的建立和變量數據類型的分配入下圖所示:
(2)限制值程序的編寫,對采集到的數值進行范圍的限制,保證該參加值的范圍是在采集值的上下限之間的數值。
(3)根據計算公式的要求進行計算程序的編寫,同時把不同的數據類型轉換為相同的數據類型做運算,然后根據計算的采集值的大小與設定的上下限制做比較實現對電機的啟停控制。
八、帶參數子程序的調用
多次調用帶參數的子程序,給其賦予不同的實參,這樣可是實現對多臺電機的啟停控制,如下圖所示,假設第一臺空壓機的上下限設置頻率為0.2MP和0.8MP,傳感器的檢測輸出信號為4到20mA,檢測范圍為0到1MP,第二臺電機的上下限設置頻率為0.5MP和1.2MP,傳感器的檢測輸出信號為0到10V,檢測范圍為0到1.5MP,程序的調用及實參的分配如下圖所示:
九、總結和注意事項
(1)變量類型的選擇,可根據在程序的應用中是對該變量需要執行寫的操作還是讀的操作來決定該變量的類型的選擇,另外對于臨時變量在子程序中不出現地址,所以在用于暫存中間結果的時候,可建立TEMP的變量類型
(2)由于該子程序的調用條件用SM 0.0去調用,所以當子程序在一個掃描周期內多次調用時,子程序中不能用到沿脈沖指令,因為在200系列的PLC中,沿的狀態時由系統自行存儲的,對此調用時九會出現混亂的情況
(3)定時器和計數器指令不存在對定時器或計數器地址的變量尋址,所以當子程序在一個掃描周期內多次調用時,子程序內部也不能使用定時器和計數器。作者:曾鑫
本文來自技成培訓網原創文章;未經許可,盜取必究!
總結
以上是生活随笔為你收集整理的主程序与子程序不在同一程序模块中_深度解析S7200系列PLC带参数子程序用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python列表下表_Python 列
- 下一篇: redis 启动_Redis介绍amp;