新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一組PLC程序的邏輯錯誤分析

        一組PLC程序的邏輯錯誤分析

        作者: 時間:2014-01-13 來源:網絡 收藏


        plc的編程模式來源于繼電器電路控制系統,在那些系統中,上述三個程序段對于三個并行運行的電路,但是轉到cpu中之后,這些程序就不得不順序執(zhí)行。并行模型與順序執(zhí)行的沖突是許多程序錯誤的原因。在作者先前的論文中就對這一問題進行了分析[1]。

        在順序執(zhí)行的機器上面實現plc并行語義是可能的。但是依然需要小心各種陷阱。下面的第一次嘗試存在一個錯誤,再后面一個程序改正了這個錯誤,通過了程序測試。

        ●程序修正嘗試

        克服上面問題的一個自然的想法是使用中間變量保存每個程序段的輸出。這一思路導致下面的程序實現(見圖3):



        圖3 程序修正嘗試程序實現圖

        使用這一程序時,如果兩個搶答者的按鈕同時按下,對應的兩個警報器會同時響。但是,在下一周期,兩個警報器的輸出又會同時恢復到0。原因是每一個搶答輸入都會導致另一個搶答無效,兩個搶答輸入就會同時導致對方無效。

        ●最終程序

        下面的程序克服了上述問題,并且通過了基本的測試檢查(見圖4)。

        它同前面程序不同之處在于把q0.0等變量的管轄范圍放寬了,因此一旦q0.0為1,只要主持人按鈕不按下,它的值就能繼續(xù)保持下去。

        圖4 基本測試檢查結果

        3 噴泉程序

        題目:plc在噴泉中的應用

        來源:plc應用技術開發(fā)與實踐

        編程平臺:三菱公司fx2n系列

        問題描述

        (1)噴泉有a,b,c 3組噴頭;

        (2)按動開始按鈕后,a組先噴,10秒后停,然后b組和c組同時噴;

        (3)b和c噴10秒后b停,再10秒后c停;

        (4)a,b又噴,5秒后,c也噴,持續(xù)10秒后全部停;

        (5)再5秒后重返上述(2)到(4)步;

        (6)按動停止按鈕后,a,b,c 3組噴頭全部停。

        輸入輸出變量分配:

        x0001:開始按鈕

        x0002:結束按鈕

        y0001:a組噴頭

        y0002:b組噴頭

        y0003:c組噴頭

        內部繼電器:m0—m5

        定時器分配(見圖5):

        t0:a組噴10秒; 0—10

        t1:b,c組噴10秒; 10—20

        t2:c組噴10秒; 20—30

        t3:a,b組噴5秒;30—35

        t4:a,b,c組噴10秒; 35—45

        t5:a,b,c組停噴5秒; 45—50

        同前一程序相比,這一程序中增加了t0,t1等定時器。定時器用t標識,它的上方是定時器變量名,下方是預定的定時延遲。本例使用的是ton類型定時器,這種定時器只要輸入端由0轉1計時就開始,在計時過程中,輸入端必須始終保持為1,一旦定時器到時,它所對應的變量就立即由0轉1。在計時過程中,如果輸入端轉0,則計時停止,定時器到時之后,只要輸入端繼續(xù)為1,那么計時器變量也繼續(xù)保持為1,一旦輸入變0,計時變量也轉為0。本例中的定時器按十分之一秒為單位計時。

        這個程序含有三個錯誤,它的某些噴頭在預定停止的時刻沒有停止,在預定開始的時刻沒有開始。

        程序錯誤(1):按照要求程序開始后20秒,c組噴發(fā)應該停止,但該程序卻沒有停止c的噴發(fā)。

        原因分析

        c的噴發(fā)受到m1,m2和m3的控制,它們分別控制c組的第一,第二和第三次噴發(fā)。在第二次噴發(fā)結束之后,m2為0,噴發(fā)本應停止,但調試中發(fā)現c的輸出(y0002)繼續(xù)為1,單步調試發(fā)現, 此時m1為1,由此造成c組輸出繼續(xù)。分析發(fā)現,產生m1的梯形圖有錯。應該使用m1來產生反饋,但程序中用了b組的輸出變量y0001。 該變量恰好在c組第二次噴發(fā)之后重新置1,因此造成了c組繼續(xù)噴發(fā)。將此處改成m1之后這一錯誤即可消除。

        程序錯誤(2):程序開始后50秒,a組噴發(fā)應該重新開始,但實際運行中并未開始。

        原因分析:

        這是一個定時時間寫錯的簡單錯誤。定時器t4設定的時間應為5秒(50),但梯形圖中錯寫成100(該書指令表程序中也是寫50,梯形圖中是一個失誤)。

        程序錯誤(3):在糾正了上面兩個錯誤之后,程序依然無法通過測試。50秒之后,c組不應該開始噴發(fā),但實際運行中噴發(fā)。

        原因分析:

        50秒之后,程序進入下一周期。此時程序該如何運行在原書中沒有清楚描述,這屬于描述不全。根據程序的具體實現,可以看出作者的意圖是在50秒之后把整個噴發(fā)過程重演一遍。基于這樣的理解,程序應該在50秒之后開始a組噴發(fā),但程序運行結果是,不但a組噴發(fā),而且c組也噴發(fā),后一行為不符合規(guī)定。

        出現這一現象的原因在于,m0的梯形圖中使用了y000來實現反饋。這一錯誤同第一個錯誤類似,只是這一方式在一個周期的運行中沒有問題,在第二周期中就會出現問題。在該圖中用m0取代y000就能消除這一錯誤。

        在消除了以上問題之后得到梯形圖如圖6所示。

        西門子plc相關文章:西門子plc視頻教程




        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 德昌县| 宁蒗| 东阿县| 仲巴县| 敦化市| 赣榆县| 文成县| 通州区| 浏阳市| 方正县| 廉江市| 秦皇岛市| 化州市| 大同县| 来凤县| 图木舒克市| 高密市| 浪卡子县| 营山县| 哈巴河县| 岐山县| 鲁甸县| 团风县| 宜春市| 金门县| 东宁县| 克东县| 芷江| 周至县| 株洲县| 绥滨县| 临高县| 辽阳市| 肥乡县| 延长县| 新沂市| 衡阳县| 凉山| 黎川县| 米易县| 任丘市|