一組PLC程序的邏輯錯誤分析
可編程序控制器(簡(jiǎn)稱(chēng)plc)是一種工業(yè)自動(dòng)控制中使用的計算裝置。它廣泛應用于鋼鐵、石油、化工、電力、建材、機械制造、汽車(chē)、輕紡、交通運輸、航天、環(huán)保及文化娛樂(lè )等各個(gè)行業(yè)。小到家用設備,大到航天器材,都有plc的應用。
典型的plc由一個(gè)專(zhuān)用的cpu,一個(gè)存儲器和一組輸入輸出端口構成,如圖1所示。它通過(guò)輸入端口接收來(lái)自傳感器的信號,并通過(guò)輸出端口發(fā)出控制信號驅動(dòng)同它連接的外部設備。存儲器中安放控制程序,系統的活動(dòng)由控制程序所驅動(dòng)。
plc系統每隔一定的時(shí)間間隔(比如5毫秒)從輸入端口讀入信號,執行計算,然后向輸出端口發(fā)送輸出信號。每一“輸入-計算-輸出”周期稱(chēng)為一個(gè)掃描周期。plc程序在每個(gè)掃描周期中重復執行一遍。plc的簡(jiǎn)單應用有洗衣機控制,電梯控制。復雜的應用有自動(dòng)機床控制,自動(dòng)化工程控制。
plc程序設計具有不尋常的軟件編程模式。設計中需要考慮多個(gè)并行線(xiàn)程,它們之間的交互作用,以及在時(shí)間域上的行為。在plc的五種主要的編程語(yǔ)言當中,源自繼電器控制系統的梯形圖語(yǔ)言采用了一種簡(jiǎn)單的方式巧妙地處理了并行程序設計問(wèn)題,然而,由于plc編程問(wèn)題的固有復雜性,以及測試手段的缺乏,許多plc程序中依然存在大量的錯誤。
為了解決這一問(wèn)題,靈芯實(shí)驗室正在開(kāi)發(fā)plc測試系統,為plc程序的調試提供解決方案。在這一系統的試用過(guò)程中,在兩本plc入門(mén)教科書(shū)的6個(gè)簡(jiǎn)單程序例子中發(fā)現其中的4個(gè)程序里面至少包含8個(gè)錯誤。
●一個(gè)搶答器程序在兩個(gè)參賽者同時(shí)按下?lián)尨鸢粹o時(shí),只有其中一個(gè)人的警報器能夠發(fā)出警報;
●一個(gè)噴泉程序中,噴水組在幾個(gè)指定時(shí)間上沒(méi)有按要求停止噴水,或開(kāi)始噴水;
●一個(gè)交通燈控制程序中,綠燈閃爍控制不正常;系統啟動(dòng)的時(shí)候,一個(gè)方向綠燈亮,另一個(gè)方向的紅燈卻不亮;強通結束之后,交通燈沒(méi)有立即恢復正常運行;
●在另一個(gè)交通燈程序中,按下停止按鈕之后,所有的燈熄滅,但兩個(gè)方向人行道上卻亮紅燈。
我們認為這一發(fā)現是不同尋常的。雖然每個(gè)程序員和教師都會(huì )犯編程錯誤,但是我們還從未在任何一本程序設計的教科書(shū)中發(fā)現如此高比例的程序錯。這一現象初步證實(shí)了plc程序 錯誤的廣泛性和嚴重性。
本文將逐一分析上述每一個(gè)程序的錯誤,指出錯誤原因。其中大部分程序,我們給出糾正了錯誤的新程序。期望這一分析能夠幫助plc程序員和教師提高plc程序設計的正確性。plc程序的執行原理以及梯形圖的語(yǔ)義將在例子的介紹中同時(shí)給予解釋。我們相信,通過(guò)分析錯誤來(lái)學(xué)習是掌握遍程技巧的好方法。
圖1 plc構造原理圖
2 搶答器程序
題目:搶答器程序
來(lái)源:plc應用技術(shù)開(kāi)發(fā)與實(shí)踐
編程平臺:西門(mén)子公司 s7-200
問(wèn)題描述:
(1)主持人控制開(kāi)始按鈕;
(2)3個(gè)搶答者每人控制自己的搶答按鈕;
(3)開(kāi)始按鈕按下之后所有警報器斷電;
(4)之后每個(gè)搶答按鈕按下將使自己的警報器得電,并鎖住其他搶答者輸入信號的有效性。
變量分配:
i0.0 主持人按鈕;
i0.1,i0.2,i0.3 分別為三個(gè)搶答者按鈕;
q0.0,q0.1,q0.2 分別為對應于搶答者的警報器輸出;
原書(shū)給出的搶答器梯形圖程序(見(jiàn)圖2)。
圖2 搶答器梯形圖程序
plc程序語(yǔ)義:
上述梯形圖程序的語(yǔ)義可以用比較簡(jiǎn)短的方式表達出來(lái):
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的程序周期性地重復執行,每個(gè)周期時(shí)間很短。在一個(gè)周期中,plc將讀入輸入值(這里是i0.1,i0.2和i0.3),經(jīng)過(guò)對上述程序的計算之后,把輸出變量(這里是q0.0,q0.1和q0.2)的值送到外部。注意上述程序在每個(gè)周期中都重復執行。在每個(gè)周期中,程序的執行由上往下由左至右。
當一個(gè)搶答按鈕按下之后(比如i0.1=1),對應的輸出(q0.0)馬上變成1。在下一周期中,即使該按鈕方開(kāi)(i0.1=0)程序的輸出依然會(huì )保持為0,原因是程序依靠自反饋作用(or q0.0)。同時(shí),由于在另外兩個(gè)程序段中含有~q0.1,因此它們的輸出都無(wú)法變成1,直到主持人按鈕i0.0把q0.0重新置0為止。
●程序問(wèn)題
如果兩個(gè)搶答者在同一時(shí)刻按下按鈕,在程序中處于前面的搶答者的警報器輸出正常,另一個(gè)搶答者的警報器沒(méi)有輸出。
●程序分析
本問(wèn)題分成三個(gè)程序段,它們本應并行執行方能達到公平的效果。但plc的cpu只能順序執行程序,因此在程序中位置處于前面的搶答者的輸出產(chǎn)生之后,后面的程序輸出就被立即阻斷。因此兩個(gè)按鈕同時(shí)按下時(shí),只有其中的一個(gè)得到響應。
西門(mén)子plc相關(guān)文章:西門(mén)子plc視頻教程
評論