用S7-200編程的三個實例的解析之三
本文三例都是本人在網(wǎng)上回答網(wǎng)友的求助貼時編寫的,其中第三貼把和其他網(wǎng)友辯論編出的梯形圖是否正確的內(nèi)容也寫進來,供大家分析參考,有不對之處,望批評指正。
一、網(wǎng)友求助:“如何使用200統(tǒng)計流量 :我使用的一個流量計它能輸出脈沖信號,1000個脈沖為一個立方的,也可以輸出4-20毫安的電流信號,20毫安對應(yīng)每小時500立方,我現(xiàn)在的想用226的CPU來計算一個月該流量計的總流量,最好直接使用CPU模塊實現(xiàn),不建議再使用特殊模塊。謝謝了。”
回復(fù):
《 一》、使用4-20ma的電流信號求統(tǒng)計流量:
(一)、你可選用4-20ma電流輸入模塊,將電流信號接在模塊的電流輸入端,如沒有,可選用0-10V電壓輸入模塊,不過要多用一個500歐的精密電阻并接在電壓輸入端與地之間,再將電流輸入信號接在電壓輸入端,這樣4-20ma 電流流過500歐電阻時,就轉(zhuǎn)變?yōu)?-10V的電壓信號。”
(二)、求出瞬時流量的公式:
(1)、從模塊的參數(shù)可知:20ma(或10V)模塊對應(yīng)的轉(zhuǎn)換數(shù)字量設(shè)它為W20,你就可以求出4ma 對應(yīng)的數(shù)字量W4:
W4 =W 20 ×4 ÷20 = W 20÷5。
(2)、20毫安對應(yīng)每小時500立方,那么20毫安對應(yīng)每秒鐘為500 ÷3600=0.139立方,而“0.139立方”即為流量計輸出20ma時的瞬時流量,此時對應(yīng)的模塊的數(shù)字量為W 20。而流量計輸出4ma時對應(yīng)的瞬時流量=0,但模塊此時的數(shù)字量為W 20÷5,即瞬時流量N與對應(yīng)的數(shù)字量W的關(guān)系是一條不過0點的直線,可推導出瞬時流量N的公式:N = 0.139×(W - W 20÷5)÷(W 20- W 20÷5) 簡化為:
N = 1.39×(W -0.2× W 20)÷(8×W 20) ……(1)
(三)、PLC程序處理:采用時間中斷的方式進行瞬時流量的采集與累加:中斷為秒中斷:即每隔1秒從模塊讀取一次數(shù)據(jù),按上式(1)求出瞬時流量N,再把N值加在累積區(qū)(如VD100)中,即可。
《 二 》用脈沖計數(shù)方式求統(tǒng)計流量
我們知道:用 1秒時間對輸出脈沖進行計數(shù)采樣,其計數(shù)值即為瞬時流量,N秒內(nèi)的瞬時流量的累加值即為N秒內(nèi)的總流量。若求某段時間的總流量,很多人都是采用先求出瞬時流量,再對某段時間的瞬時流量進行累加的方法來求總流量,這種方法如用單片機或計算機可以,但用PLC進行定時計數(shù),由于掃描周期的影響,瞬時流量是測不準的。我認為:如果求瞬時流量不是為了閉環(huán)控制提供反饋信號而是為了進行累加求總流量的話,可不用求瞬時流量,直接對流量計的輸出脈沖進行連續(xù)計數(shù)就可以了。具體編程思路是這樣的:1、如輸出脈沖的最高頻率低于200HZ,可用普通輸入點做計數(shù)信號的輸入端,用它的前沿觸發(fā)內(nèi)部一雙字存儲器進行加一運算。如高于200HZ,就得選用帶啟動、復(fù)位控制的單相增計數(shù)方式的高速計數(shù)器進行計數(shù)。假設(shè)1000個脈沖為一個立方”,可知其一個脈沖為0.001立方的流量.。即累計的流量值的精度為0.001立方。如統(tǒng)計較長時間的總流量其精度不需要這么高,比如要求為0.1立方,此時的計數(shù)值應(yīng)除以100,其商才為累計流量。3、一般流量計輸出脈沖信號幅度為5V或12V,而PLC輸入端要求輸入信號的幅度為24V,故流量計的輸出脈沖信號必需先做電平轉(zhuǎn)換變成24V脈沖信號后,方可接入PLC的計數(shù)輸入端,這樣就得做一塊電路板。如果流量精度為0.1立方,可在電路板上的電平轉(zhuǎn)換線路前再增加一塊4518(雙十進制計數(shù)器)集成塊,來構(gòu)成二位十進制計數(shù)器,先對流量計輸出脈沖進行計數(shù),其輸出的脈沖相當對流量計輸出脈沖進行除以100的運算處理,再對它進行24V電平轉(zhuǎn)換,去PLC計數(shù)口,這樣進入PLC計數(shù)端的脈沖頻率一定低于200HZ,就不需要用高速計數(shù)器計數(shù),可大大的簡化編程程序。見下圖:
程序說明:按下啟動開關(guān)I2.1,讀取此時的日期時間存入VB10(年)、VB11(月)、VB12(日)、VB13(時)中,I2.1的后沿使V2.0=1,V2.0的前沿使計數(shù)器VD100清0,V2.0=1時泵啟動,流量計計量開始。如運行中斷電,VD100、V2.0 及VB10、VB11等均具有斷電保持原數(shù)據(jù)、狀態(tài)的功能,所以復(fù)電后,不用按啟動開關(guān),由于V2.0=1,PLC自動進行累計流量。如累計流量結(jié)束,按一下停止按鈕I2.2J就可:I2.2=1,立即將此時日期、時間出入VB20、VB21、VB22、VB23中,同時使V2.0=0,累計流量結(jié)束。
二、網(wǎng)友求助:“如何用程序?qū)崿F(xiàn)泵每五分鐘起一次,工作五分鐘后,再停五分鐘,循環(huán)工作。”
回復(fù):下圖是按著樓主要求用S7-200編寫的梯形圖,圖中用一個按鈕做電機運行與停車開關(guān)(I 0.0)
不管哪種PLC都有通電延時定時器,你都可以按這樣思路編程。
三、網(wǎng)友求助:“s7-200程序,一個輸入,輸出時四個輸出中的任意一路輸出,有什么簡單的方法?歡迎大家熱烈發(fā)帖。”
回復(fù):“s7-200程序,一個輸入,輸出時四個輸出中的任意一路輸出,有什么簡單的方法?歡迎大家熱烈發(fā)帖。”,
這確實是個不錯的帖子,我也沒用什么隨機函數(shù),憑著PLC由于掃描周期影響定時器的定時精度的考慮,用S7-200編寫了樓主提出的控制要求的梯形圖,并在S7-200上運行,證明程序符合樓主要求。梯形圖如下,有興趣的網(wǎng)友可以試用一下。
(原圖)
(后改圖)
***有網(wǎng)友提出異議:
1:
這個程序的輸出不具備隨機性,因此不能說符合樓主要求。簡單地說:如果某一時刻I0.0輸入ON,輸出為Q0.0,那么15ms后再次輸入,則輸出一定不是Q0.0了。這就不符合隨機性要求。隨機性的原則是:無論何時輸入I0.0,輸出Q0.0-Q0.3的機會相等。
2:
樓上的程序未必是真正意義上的隨機輸出。有限個輸出符合要求不意味著總能隨機輸出。還是用隨機數(shù)輸出的指令,讓plc給出在(0,1)范圍內(nèi)的偽隨機數(shù)RAND(x),用取整指令對4*RAND(x)+1取整,其結(jié)果一定是1,2,3,4中隨機的某一個,再讓此隨機結(jié)果分別與1,2,3,4比較,采用分支程序根據(jù)比較結(jié)果把程序執(zhí)行引向不同的輸出
我的答復(fù): 根據(jù)樓主要求:“一個輸入,輸出時四個輸出中的任意一路輸出,”就是說在輸入信號=1時,Q0.0-Q0.3 四個輸出端中必須有一路輸出=1,且不是有規(guī)律出現(xiàn),我是按這個原則編程的。11樓你說“15ms后再次輸入,則輸出一定不是Q0.0了”你對T32的用意理解錯了,這里用T32構(gòu)成振蕩器,是在輸入信號I0.0 =1的后沿起的300MS內(nèi),對MB0計數(shù)用的,300MS后MB0計數(shù)停止,由于這種定時計數(shù)不穩(wěn)定性,使MB0每次計數(shù)結(jié)果不相等,但MB0的低二位(即M0.0與M0.1二位值)的狀態(tài)只有四種:00、01、10、11,按梯形圖四路輸出支路的M0.0、M0.1的組合,不管計數(shù)值為多少,總有且只有一路為串聯(lián)通道狀態(tài),當下一個輸入信號到來時間內(nèi)(即I0.0=1)使M2.0=1,這樣四路輸出中總有且只有一路輸出=1,當輸入信號結(jié)束后的300MS內(nèi)MB0又計數(shù),計數(shù)停止,M0.0與M0.1的狀態(tài)是隨意的,但只能在0-3之間變化,也就是說總有一路M0.0與M0.1串聯(lián)處于通道狀態(tài)的。我認為本梯形圖符合樓主要求。從統(tǒng)計學觀點來看,多次的輸入,其四路出現(xiàn)導通的概率應(yīng)該是相等的。
****網(wǎng)友再提出異議: 你還是沒有理解“隨機性”。就你的程序,再舉個特殊點的例子來說明我在11樓的觀點:如果某一時刻I0.0輸入時,輸出為Q0.0,5ms時I0.0斷開,10ms時再次輸入I0.0,那么按照你的程序,輸出是確定的:不是Q0.0就是Q0.1,而不可能是Q0.2或Q0.3,因為這期間T32最多翻轉(zhuǎn)一次。這就談不上隨機性了。
再回復(fù): 15樓網(wǎng)友:你說的問題我明白,但樓主要求用S7-200編程,PLC通常內(nèi)部存儲器計數(shù)頻率很低,所以才用15ms定時器搭成振蕩器,如果想要是輸入信號寬度為幾ms,可用高速計數(shù)器計數(shù),這樣就得用外輸入計數(shù)脈沖來代替T32,而且最高為20KHz。如你再要求輸入脈寬為幾微秒,PLC根本不能勝任,就得用計算機編程了,而計算機也有最高頻率限制,所以不能把問題太絕對化。(將T32的定時時間改為 1ms,程序仍能正常工作,這樣幾毫秒輸入脈寬就能正常運行)
****網(wǎng)友再提出異議: 不是我要求脈寬為幾微秒,只是舉個例子而已。無論T32的定時時間是15ms還是1ms,性質(zhì)是不變的:即不能保證任意時刻I0.0輸入時Q0.0-Q0.3輸出的概率相等。
再回復(fù):17樓網(wǎng)友說:“不是我要求脈寬為幾微秒,只是舉個例子而已。無論T32的定時時間是15ms還是1ms,性質(zhì)是不變的:即不能保證任意時刻I0.0輸入時Q0.0-Q0.3輸出的概率相等。”對此結(jié)論我不理解,如果你的依據(jù)來源于15樓你說的“如果某一時刻I0.0輸入時,輸出為Q0.0,5ms時I0.0斷開,10ms時再次輸入I0.0,那么按照你的程序,輸出是確定的:不是Q0.0就是Q0.1,而不可能是Q0.2或Q0.3,因為這期間T32最多翻轉(zhuǎn)一次。這就談不上隨機性了。”。如果是這樣說明你對程序沒有看細,就以你說的輸入條件,第一次輸入,MB1可能計數(shù)為0或1,當?shù)诙屋斎霑r,MB1的計數(shù)值不是仍為0或1而是0、1或2,為什么?MB1計數(shù)是累加計數(shù)的而不是從0計數(shù),怎么會不可能出現(xiàn)Q0.2或Q0.3為輸出呢?我們還是以樓主的求助內(nèi)容來討論問題吧:樓主說“s7-200程序,一個輸入,輸出時四個輸出中的任意一路輸出,有什么簡單的方法?”。1、用S7-200編程,就限制了輸入信號的脈寬不能小于5ms(普通輸入口對信號的前后沿滯后時間為幾毫秒,用其做計數(shù)輸入口只能計200HZ以下的脈沖頻率),2、輸入信號的寬度是隨意的,即使脈寬相同,由于掃描周期的影響,再加上MB1為累加計數(shù),故使MB1的每次計數(shù)值波動性大,即MB1最低二位數(shù)(M1.0、M1.1)的狀態(tài)為不固定的。從統(tǒng)計學觀點來看,多次的輸入,其四路各自出現(xiàn)導通的概率應(yīng)該是相等的。這和拋錢看正反面的概率是一樣的。3、真正意義上的隨機數(shù)(或者隨機事件)在某次產(chǎn)生過程中是按照實驗過程中表現(xiàn)的分布概率隨機產(chǎn)生的,其結(jié)果是不可預(yù)測的,是不可見的。而計算機中的隨機函數(shù)是按照一定算法模擬產(chǎn)生的,其結(jié)果是確定的,是可見的。我們可以這樣認為這個可預(yù)見的結(jié)果其出現(xiàn)的概率是100%。所以用計算機隨機函數(shù)所產(chǎn)生的“隨機數(shù)”并不隨機,是偽隨機數(shù)。
我是本著上述二個原則編寫的程序,通過上機運行,多次輸入,且輸入脈寬長短變化,其四路輸出是隨機的,所以我仍堅持我編寫的梯形圖符合樓主要求。
***網(wǎng)友再提出異議:
1、10樓的程序是否改過了,我記得原來有兩個定時器。
2、對于“如果是這樣說明你對程序沒有看細,就以你說的輸入條件,第一次輸入,MB1可能計數(shù)為0或1,當?shù)诙屋斎霑r,MB1的計數(shù)值不是仍為0或1而是1或2,為什么?MB1計數(shù)是累加計數(shù)的而不是從0計數(shù),怎么會不可能出現(xiàn)Q0.2或Q0.3為輸出呢?”的回復(fù):(針對先前的程序)
假定某一時刻I0.0輸入時,Q0.0輸出,說明MB0此時=0。再過10ms,I0.0再次輸入并持續(xù)5ms,此時段內(nèi)T32可能翻轉(zhuǎn),也可能不翻轉(zhuǎn),但翻轉(zhuǎn)最多一次。故MB0或者是0,或者是1,而不可能是2或者3.
3、針對現(xiàn)在改過的程序:Q的輸出與I0.0的持續(xù)時間有關(guān),是可以人為控制的。因此也不是隨機的。
再回復(fù): 最終定下的梯形圖如下,望有條件有興趣的網(wǎng)友在S7-200 PLC上運行試驗,看看能否符合樓主的要求。
梯形圖是做過改動,只是簡化程序,縮短二次輸入的間隔時間,原程序是I 0.0 驅(qū)動斷電延時定時器T100,用I 0.0 由1變0起到T100由1變0止的間隔時間對MB0進行計數(shù),這是考慮手動按鈕做輸入,其二次輸入的最小間隔時間在幾百毫秒以上才選用這種控制方式的。考慮到你在5樓提出“如果某一時刻I0.0輸入時,輸出為Q0.0,5ms時I0.0斷開,10ms時再次輸入I0.0,”,即二個輸入信號間隔10ms,由于此時T100還沒有變0,會使第二次輸入失效,故將“原用I 0.0 由1變0起到T100由1變0的間隔時間對MB0進行計數(shù)”的計數(shù)方式改為“在I0.0=1的時間對MB1進行計數(shù),I0.0 的后沿將MB1的計數(shù)結(jié)果送入MB0”,這樣就可縮短二次輸入信號的間隔時間,而且也簡化了程序。但“一個輸入,輸出時四個輸出中的任意一路輸出”的設(shè)計思路并沒變。現(xiàn)在要論証一下你在21樓說的話“假定某一時刻I0.0輸入時,Q0.0輸出,說明MB0此時=0。再過10ms,I0.0再次輸入并持續(xù)5ms,此時段內(nèi)T32可能翻轉(zhuǎn),也可能不翻轉(zhuǎn),但翻轉(zhuǎn)最多一次。故MB0或者是0,或者是1,而不可能是2或者3.”,
前面我講過幾次,MB0 或MB1是累加計數(shù),不是清0后計數(shù),假設(shè)在輸入時間內(nèi),MB1最多計一個數(shù),MB1從0開始,第一次計數(shù)值為0或1,第二次為0或1或2,第三次為0或1或2或3,第四次為0或1或2或3(或4時即為0)。。。。怎么“不可能是2或者3”呢?多次輸入,使MB1的最低二位出現(xiàn)0、1、2、3的幾率相等,這就是我編程的依據(jù),如你有充足的理論依據(jù)能駁倒我的編程思路我歡迎,如還像前面的說法,我認為就此停止吧。