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