93329737
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 23 個
工控威望: 188 點(diǎn)
下載積分: 524 分
在線時間: 18(小時)
注冊時間: 2009-04-14
最后登錄: 2024-08-27
查看93329737的 主題 / 回貼
樓主  發(fā)表于: 2010-11-10 14:54
    用S7-200編程的三個實(shí)例的解析之三

         本文三例都是本人在網(wǎng)上回答網(wǎng)友的求助貼時編寫的,其中第三貼把和其他網(wǎng)友辯論編出的梯形圖是否正確的內(nèi)容也寫進(jìn)來,供大家分析參考,有不對之處,望批評指正。

         一、網(wǎng)友求助:“如何使用200統(tǒng)計(jì)流量 :我使用的一個流量計(jì)它能輸出脈沖信號,1000個脈沖為一個立方的,也可以輸出4-20毫安的電流信號,20毫安對應(yīng)每小時500立方,我現(xiàn)在的想用226的CPU來計(jì)算一個月該流量計(jì)的總流量,最好直接使用CPU模塊實(shí)現(xiàn),不建議再使用特殊模塊。謝謝了!
        回復(fù):
                        《 一》、使用4-20ma的電流信號求統(tǒng)計(jì)流量:
       (一)、你可選用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立方”即為流量計(jì)輸出20ma時的瞬時流量,此時對應(yīng)的模塊的數(shù)字量為W 20。而流量計(jì)輸出4ma時對應(yīng)的瞬時流量=0,但模塊此時的數(shù)字量為W 20÷5,即瞬時流量N與對應(yīng)的數(shù)字量W的關(guān)系是一條不過0點(diǎn)的直線,可推導(dǎo)出瞬時流量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程序處理:采用時間中斷的方式進(jìn)行瞬時流量的采集與累加:中斷為秒中斷:即每隔1秒從模塊讀取一次數(shù)據(jù),按上式(1)求出瞬時流量N,再把N值加在累積區(qū)(如VD100)中,即可。
                                   《 二 》用脈沖計(jì)數(shù)方式求統(tǒng)計(jì)流量
        我們知道:用 1秒時間對輸出脈沖進(jìn)行計(jì)數(shù)采樣,其計(jì)數(shù)值即為瞬時流量,N秒內(nèi)的瞬時流量的累加值即為N秒內(nèi)的總流量。若求某段時間的總流量,很多人都是采用先求出瞬時流量,再對某段時間的瞬時流量進(jìn)行累加的方法來求總流量,這種方法如用單片機(jī)或計(jì)算機(jī)可以,但用PLC進(jìn)行定時計(jì)數(shù),由于掃描周期的影響,瞬時流量是測不準(zhǔn)的。我認(rèn)為:如果求瞬時流量不是為了閉環(huán)控制提供反饋信號而是為了進(jìn)行累加求總流量的話,可不用求瞬時流量,直接對流量計(jì)的輸出脈沖進(jìn)行連續(xù)計(jì)數(shù)就可以了。具體編程思路是這樣的:1、如輸出脈沖的最高頻率低于200HZ,可用普通輸入點(diǎn)做計(jì)數(shù)信號的輸入端,用它的前沿觸發(fā)內(nèi)部一雙字存儲器進(jìn)行加一運(yùn)算。如高于200HZ,就得選用帶啟動、復(fù)位控制的單相增計(jì)數(shù)方式的高速計(jì)數(shù)器進(jìn)行計(jì)數(shù)。假設(shè)1000個脈沖為一個立方”,可知其一個脈沖為0.001立方的流量.。即累計(jì)的流量值的精度為0.001立方。如統(tǒng)計(jì)較長時間的總流量其精度不需要這么高,比如要求為0.1立方,此時的計(jì)數(shù)值應(yīng)除以100,其商才為累計(jì)流量。3、一般流量計(jì)輸出脈沖信號幅度為5V或12V,而PLC輸入端要求輸入信號的幅度為24V,故流量計(jì)的輸出脈沖信號必需先做電平轉(zhuǎn)換變成24V脈沖信號后,方可接入PLC的計(jì)數(shù)輸入端,這樣就得做一塊電路板。如果流量精度為0.1立方,可在電路板上的電平轉(zhuǎn)換線路前再增加一塊4518(雙十進(jìn)制計(jì)數(shù)器)集成塊,來構(gòu)成二位十進(jìn)制計(jì)數(shù)器,先對流量計(jì)輸出脈沖進(jìn)行計(jì)數(shù),其輸出的脈沖相當(dāng)對流量計(jì)輸出脈沖進(jìn)行除以100的運(yùn)算處理,再對它進(jìn)行24V電平轉(zhuǎn)換,去PLC計(jì)數(shù)口,這樣進(jìn)入PLC計(jì)數(shù)端的脈沖頻率一定低于200HZ,就不需要用高速計(jì)數(shù)器計(jì)數(shù),可大大的簡化編程程序。見下圖:


              程序說明:按下啟動開關(guān)I2.1,讀取此時的日期時間存入VB10(年)、VB11(月)、VB12(日)、VB13(時)中,I2.1的后沿使V2.0=1,V2.0的前沿使計(jì)數(shù)器VD100清0,V2.0=1時泵啟動,流量計(jì)計(jì)量開始。如運(yùn)行中斷電,VD100、V2.0 及VB10、VB11等均具有斷電保持原數(shù)據(jù)、狀態(tài)的功能,所以復(fù)電后,不用按啟動開關(guān),由于V2.0=1,PLC自動進(jìn)行累計(jì)流量。如累計(jì)流量結(jié)束,按一下停止按鈕I2.2J就可:I2.2=1,立即將此時日期、時間出入VB20、VB21、VB22、VB23中,同時使V2.0=0,累計(jì)流量結(jié)束。

              二、網(wǎng)友求助:“如何用程序?qū)崿F(xiàn)泵每五分鐘起一次,工作五分鐘后,再停五分鐘,循環(huán)工作。”
        回復(fù):下圖是按著樓主要求用S7-200編寫的梯形圖,圖中用一個按鈕做電機(jī)運(yùn)行與停車開關(guān)(I 0.0)



        不管哪種PLC都有通電延時定時器,你都可以按這樣思路編程。  

                三、網(wǎng)友求助:“s7-200程序,一個輸入,輸出時四個輸出中的任意一路輸出,有什么簡單的方法?歡迎大家熱烈發(fā)帖。”
        回復(fù):“s7-200程序,一個輸入,輸出時四個輸出中的任意一路輸出,有什么簡單的方法?歡迎大家熱烈發(fā)帖!保
這確實(shí)是個不錯的帖子,我也沒用什么隨機(jī)函數(shù),憑著PLC由于掃描周期影響定時器的定時精度的考慮,用S7-200編寫了樓主提出的控制要求的梯形圖,并在S7-200上運(yùn)行,證明程序符合樓主要求。梯形圖如下,有興趣的網(wǎng)友可以試用一下。
     (原圖)


     (后改圖)



          ***有網(wǎng)友提出異議:
1:
這個程序的輸出不具備隨機(jī)性,因此不能說符合樓主要求。簡單地說:如果某一時刻I0.0輸入ON,輸出為Q0.0,那么15ms后再次輸入,則輸出一定不是Q0.0了。這就不符合隨機(jī)性要求。隨機(jī)性的原則是:無論何時輸入I0.0,輸出Q0.0-Q0.3的機(jī)會相等。
2:
樓上的程序未必是真正意義上的隨機(jī)輸出。有限個輸出符合要求不意味著總能隨機(jī)輸出。還是用隨機(jī)數(shù)輸出的指令,讓plc給出在(0,1)范圍內(nèi)的偽隨機(jī)數(shù)RAND(x),用取整指令對4*RAND(x)+1取整,其結(jié)果一定是1,2,3,4中隨機(jī)的某一個,再讓此隨機(jī)結(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計(jì)數(shù)用的,300MS后MB0計(jì)數(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)下一個輸入信號到來時間內(nèi)(即I0.0=1)使M2.0=1,這樣四路輸出中總有且只有一路輸出=1,當(dāng)輸入信號結(jié)束后的300MS內(nèi)MB0又計(jì)數(shù),計(jì)數(shù)停止,M0.0與M0.1的狀態(tài)是隨意的,但只能在0-3之間變化,也就是說總有一路M0.0與M0.1串聯(lián)處于通道狀態(tài)的。我認(rèn)為本梯形圖符合樓主要求。從統(tǒng)計(jì)學(xué)觀點(diǎn)來看,多次的輸入,其四路出現(xiàn)導(dǎo)通的概率應(yīng)該是相等的。

            ****網(wǎng)友再提出異議: 你還是沒有理解“隨機(jī)性”。就你的程序,再舉個特殊點(diǎn)的例子來說明我在11樓的觀點(diǎn):如果某一時刻I0.0輸入時,輸出為Q0.0,5ms時I0.0斷開,10ms時再次輸入I0.0,那么按照你的程序,輸出是確定的:不是Q0.0就是Q0.1,而不可能是Q0.2或Q0.3,因?yàn)檫@期間T32最多翻轉(zhuǎn)一次。這就談不上隨機(jī)性了。
        再回復(fù): 15樓網(wǎng)友:你說的問題我明白,但樓主要求用S7-200編程,PLC通常內(nèi)部存儲器計(jì)數(shù)頻率很低,所以才用15ms定時器搭成振蕩器,如果想要是輸入信號寬度為幾ms,可用高速計(jì)數(shù)器計(jì)數(shù),這樣就得用外輸入計(jì)數(shù)脈沖來代替T32,而且最高為20KHz。如你再要求輸入脈寬為幾微秒,PLC根本不能勝任,就得用計(jì)算機(jī)編程了,而計(jì)算機(jī)也有最高頻率限制,所以不能把問題太絕對化。(將T32的定時時間改為 1ms,程序仍能正常工作,這樣幾毫秒輸入脈寬就能正常運(yùn)行)
         ****網(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,因?yàn)檫@期間T32最多翻轉(zhuǎn)一次。這就談不上隨機(jī)性了!。如果是這樣說明你對程序沒有看細(xì),就以你說的輸入條件,第一次輸入,MB1可能計(jì)數(shù)為0或1,當(dāng)?shù)诙屋斎霑r,MB1的計(jì)數(shù)值不是仍為0或1而是0、1或2,為什么?MB1計(jì)數(shù)是累加計(jì)數(shù)的而不是從0計(jì)數(shù),怎么會不可能出現(xiàn)Q0.2或Q0.3為輸出呢?我們還是以樓主的求助內(nèi)容來討論問題吧:樓主說“s7-200程序,一個輸入,輸出時四個輸出中的任意一路輸出,有什么簡單的方法?”。1、用S7-200編程,就限制了輸入信號的脈寬不能小于5ms(普通輸入口對信號的前后沿滯后時間為幾毫秒,用其做計(jì)數(shù)輸入口只能計(jì)200HZ以下的脈沖頻率),2、輸入信號的寬度是隨意的,即使脈寬相同,由于掃描周期的影響,再加上MB1為累加計(jì)數(shù),故使MB1的每次計(jì)數(shù)值波動性大,即MB1最低二位數(shù)(M1.0、M1.1)的狀態(tài)為不固定的。從統(tǒng)計(jì)學(xué)觀點(diǎn)來看,多次的輸入,其四路各自出現(xiàn)導(dǎo)通的概率應(yīng)該是相等的。這和拋錢看正反面的概率是一樣的。3、真正意義上的隨機(jī)數(shù)(或者隨機(jī)事件)在某次產(chǎn)生過程中是按照實(shí)驗(yàn)過程中表現(xiàn)的分布概率隨機(jī)產(chǎn)生的,其結(jié)果是不可預(yù)測的,是不可見的。而計(jì)算機(jī)中的隨機(jī)函數(shù)是按照一定算法模擬產(chǎn)生的,其結(jié)果是確定的,是可見的。我們可以這樣認(rèn)為這個可預(yù)見的結(jié)果其出現(xiàn)的概率是100%。所以用計(jì)算機(jī)隨機(jī)函數(shù)所產(chǎn)生的“隨機(jī)數(shù)”并不隨機(jī),是偽隨機(jī)數(shù)。
         我是本著上述二個原則編寫的程序,通過上機(jī)運(yùn)行,多次輸入,且輸入脈寬長短變化,其四路輸出是隨機(jī)的,所以我仍堅(jiān)持我編寫的梯形圖符合樓主要求。
       ***網(wǎng)友再提出異議:
       1、10樓的程序是否改過了,我記得原來有兩個定時器。
       2、對于“如果是這樣說明你對程序沒有看細(xì),就以你說的輸入條件,第一次輸入,MB1可能計(jì)數(shù)為0或1,當(dāng)?shù)诙屋斎霑r,MB1的計(jì)數(shù)值不是仍為0或1而是1或2,為什么?MB1計(jì)數(shù)是累加計(jì)數(shù)的而不是從0計(jì)數(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),是可以人為控制的。因此也不是隨機(jī)的。
      再回復(fù): 最終定下的梯形圖如下,望有條件有興趣的網(wǎng)友在S7-200 PLC上運(yùn)行試驗(yàn),看看能否符合樓主的要求。



         梯形圖是做過改動,只是簡化程序,縮短二次輸入的間隔時間,原程序是I 0.0 驅(qū)動斷電延時定時器T100,用I 0.0 由1變0起到T100由1變0止的間隔時間對MB0進(jìn)行計(jì)數(shù),這是考慮手動按鈕做輸入,其二次輸入的最小間隔時間在幾百毫秒以上才選用這種控制方式的。考慮到你在5樓提出“如果某一時刻I0.0輸入時,輸出為Q0.0,5ms時I0.0斷開,10ms時再次輸入I0.0,”,即二個輸入信號間隔10ms,由于此時T100還沒有變0,會使第二次輸入失效,故將“原用I 0.0 由1變0起到T100由1變0的間隔時間對MB0進(jìn)行計(jì)數(shù)”的計(jì)數(shù)方式改為“在I0.0=1的時間對MB1進(jìn)行計(jì)數(shù),I0.0 的后沿將MB1的計(jì)數(shù)結(jié)果送入MB0”,這樣就可縮短二次輸入信號的間隔時間,而且也簡化了程序。但“一個輸入,輸出時四個輸出中的任意一路輸出”的設(shè)計(jì)思路并沒變。現(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是累加計(jì)數(shù),不是清0后計(jì)數(shù),假設(shè)在輸入時間內(nèi),MB1最多計(jì)一個數(shù),MB1從0開始,第一次計(jì)數(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ù)能駁倒我的編程思路我歡迎,如還像前面的說法,我認(rèn)為就此停止吧。
dutian2328
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 25 個
工控威望: 108 點(diǎn)
下載積分: 560 分
在線時間: 5(小時)
注冊時間: 2010-08-23
最后登錄: 2014-04-02
查看dutian2328的 主題 / 回貼
1樓  發(fā)表于: 2010-11-14 21:13
圖沒有↑來