新聞中心

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

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

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

        可編程序控制器(簡稱plc)是一種工業自動控制中使用的計算裝置。它廣泛應用于鋼鐵、石油、化工、電力、建材、機械制造、汽車、輕紡、交通運輸、航天、環保及文化娛樂等各個行業。小到家用設備,大到航天器材,都有plc的應用。

        典型的plc由一個專用的cpu,一個和一組輸入輸出端口構成,如圖1所示。它通過輸入端口接收來自傳感器的信號,并通過輸出端口發出控制信號驅動同它連接的外部設備。中安放控制程序,系統的活動由控制程序所驅動。

        plc系統每隔一定的時間間隔(比如5毫秒)從輸入端口讀入信號,執行計算,然后向輸出端口發送輸出信號。每一“輸入-計算-輸出”周期稱為一個掃描周期。plc程序在每個掃描周期中重復執行一遍。plc的簡單應用有洗衣機控制,電梯控制。復雜的應用有自動機床控制,自動化工程控制。

        plc程序設計具有不尋常的軟件編程模式。設計中需要考慮多個并行線程,它們之間的交互作用,以及在時間域上的行為。在plc的五種主要的編程語言當中,源自繼電器控制系統的梯形圖語言采用了一種簡單的方式巧妙地處理了并行程序設計問題,然而,由于plc編程問題的固有復雜性,以及測試手段的缺乏,許多plc程序中依然存在大量的錯誤。

        為了解決這一問題,靈芯實驗室正在開發plc測試系統,為plc程序的調試提供解決方案。在這一系統的試用過程中,在兩本plc入門教科書的6個簡單程序例子中發現其中的4個程序里面至少包含8個錯誤。

        ●一個搶答器程序在兩個參賽者同時按下搶答按鈕時,只有其中一個人的警報器能夠發出警報;

        ●一個噴泉程序中,噴水組在幾個指定時間上沒有按要求停止噴水,或開始噴水;

        ●一個交通燈控制程序中,綠燈閃爍控制不正常;系統啟動的時候,一個方向綠燈亮,另一個方向的紅燈卻不亮;強通結束之后,交通燈沒有立即恢復正常運行;

        ●在另一個交通燈程序中,按下停止按鈕之后,所有的燈熄滅,但兩個方向人行道上卻亮紅燈。

        我們認為這一發現是不同尋常的。雖然每個程序員和教師都會犯編程錯誤,但是我們還從未在任何一本程序設計的教科書中發現如此高比例的程序錯。這一現象初步證實了plc程序 錯誤的廣泛性和嚴重性。

        本文將逐一分析上述每一個程序的錯誤,指出錯誤原因。其中大部分程序,我們給出糾正了錯誤的新程序。期望這一分析能夠幫助plc程序員和教師提高plc程序設計的正確性。plc程序的執行原理以及梯形圖的語義將在例子的介紹中同時給予解釋。我們相信,通過分析錯誤來學習是掌握遍程技巧的好方法。

        圖1 plc構造原理圖

        2 搶答器程序

        題目:搶答器程序

        來源:plc應用技術開發與實踐

        編程平臺:西門子公司 s7-200

        問題描述:

        (1)主持人控制開始按鈕;

        (2)3個搶答者每人控制自己的搶答按鈕;

        (3)開始按鈕按下之后所有警報器斷電;

        (4)之后每個搶答按鈕按下將使自己的警報器得電,并鎖住其他搶答者輸入信號的有效性。

        變量分配:

        i0.0 主持人按鈕;

        i0.1,i0.2,i0.3 分別為三個搶答者按鈕;

        q0.0,q0.1,q0.2 分別為對應于搶答者的警報器輸出;

        原書給出的搶答器梯形圖程序(見圖2)。

        圖2 搶答器梯形圖程序

        plc程序語義:

        上述梯形圖程序的語義可以用比較簡短的方式表達出來:

        q0.0 := (i0.1 or q0.0) and ~i0.0 and ~q0.1 and ~q0.2;

        q0.1 := (i0.2 or q0.1) and ~i0.0 and ~q0.0 and ~q0.2;

        q0.2 := (i0.3 or q0.2) and ~i0.0 and ~q0.0 and ~q0.1;

        其中~i0.0表示i0.0的邏輯非。

        plc的程序周期性地重復執行,每個周期時間很短。在一個周期中,plc將讀入輸入值(這里是i0.1,i0.2和i0.3),經過對上述程序的計算之后,把輸出變量(這里是q0.0,q0.1和q0.2)的值送到外部。注意上述程序在每個周期中都重復執行。在每個周期中,程序的執行由上往下由左至右。

        當一個搶答按鈕按下之后(比如i0.1=1),對應的輸出(q0.0)馬上變成1。在下一周期中,即使該按鈕方開(i0.1=0)程序的輸出依然會保持為0,原因是程序依靠自反饋作用(or q0.0)。同時,由于在另外兩個程序段中含有~q0.1,因此它們的輸出都無法變成1,直到主持人按鈕i0.0把q0.0重新置0為止。

        ●程序問題

        如果兩個搶答者在同一時刻按下按鈕,在程序中處于前面的搶答者的警報器輸出正常,另一個搶答者的警報器沒有輸出。

        ●程序分析

        本問題分成三個程序段,它們本應并行執行方能達到公平的效果。但plc的cpu只能順序執行程序,因此在程序中位置處于前面的搶答者的輸出產生之后,后面的程序輸出就被立即阻斷。因此兩個按鈕同時按下時,只有其中的一個得到響應。

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



        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 界首市| 洛浦县| 武清区| 洞口县| 德保县| 静宁县| 昭平县| 台江县| 邯郸县| 东山县| 许昌市| 昌邑市| 永德县| 西昌市| 盐亭县| 田阳县| 康定县| 咸宁市| 广丰县| 利辛县| 沙河市| 微博| 英吉沙县| 视频| 延川县| 资兴市| 香港| 衡阳市| 太仆寺旗| 修文县| 江西省| 玉屏| 郎溪县| 丹寨县| 刚察县| 阳曲县| 嘉荫县| 海伦市| 枞阳县| 邹城市| 乐平市|