袁佳溢,路林吉
可編程邏輯控制器即是我們熟悉的PLC, PLC的廣泛應用取代了傳統的繼電器,接觸器等搭建的硬件電路。PLC 程序設計中,最常用的編程語言就是梯形圖。但隨著工業自動化生產的發展,從編程構思到寫梯形圖程序的工作量越來越大,編程人員的工作量很大,嚴重影響工作效率。
本文提出一種解決方案,梯形圖生成軟件,即編程人員只要根據規則給出系統的流程圖,硬件的地址表輸入到該軟件,梯形圖就能自動生成。在這個轉換的過程中, 用樹的數據結構來表示梯形圖中各個模塊之間的邏輯關系, 并對其進行深度遍歷。根據這些邏輯關系,并將模塊的內容轉化成對應的PLC符號, 即可生成對應的梯形圖。
在PLC梯形圖自動生成系統中,首先需要創建一張PLC輸入/輸出地址表。每一個PLC的輸入/輸出點都有對應的簡潔的文字說明。在流程圖中即以文字說明來代表對應的PLC輸入輸出點。流程圖作為整個PLC梯形圖自動生成系統的重要輸入信息,它是由一系列的模塊組成。
這些模塊是將整個工藝流程分成若干步簡單的動作,而每步動作就是流程圖中的一個模塊。對該模塊的描述要用到輸入/輸出地址表中對于的輸入/輸出點的說明,如此一來,就能根據模塊的文字描述將模塊的內容轉化為對應的PLC符號和地址。在將整個流程分解成若干動作模塊,又將這些模塊的描述定義好以后,還要將這些模塊通過計算機較容易識別和處理的數據結構將這些模塊組合起來才能構成流程圖。
在此選擇用樹形結構來組織所有的動作模塊從而構成流程圖,樹是一種方便插入和查找的數據結構,比較適合流程圖的要求。然而計算機讀取流程圖時只是逐個讀取動作模塊,并無法識別模塊間的邏輯關系。所以要設計算法幫助計算機識別各個動作模塊之間的關系,還原成樹形數據結構儲存。
隨后還要對流程圖進行深度遍歷,方法是從樹的樹根出發,在訪問了任意一個與最靠左的且未被訪問的子節點V1之后,再從該節點V1出發,訪問V1最靠左的且未被訪問的子節點V2,然后再從V2出發進行如上所述訪問,直到該結點沒有子節點為止。然后退回到尚有相鄰結點未被訪問過的節點,再從該節點出發,重復上述搜索過程,直到所有被訪問過的頂點的鄰接點都被訪問過為止。樹的這種遍歷過程就稱為樹的深度優先遍歷。動作模塊通過深度遍歷后產生的先后順序和實際梯形圖的執行順序是一致的。根據深度遍歷的結果,將動作模塊逐個轉化為對應的梯形圖符號即可自動產生梯形圖程序。
對一個“機器人汽車焊接生產線演示”進行模擬。本實例的PLC是西門子S7-300系列。首先將建立一張I/O硬件地址表,表1所示:

表1 I/O硬件地址表
隨后,根據實際的工作流程,編織一張流程圖,該實例的流程圖,如圖1所示:圖1中各節點的描述都采用了和IO地址表中的描述一

圖1 輸入流程圖
致,并且明確了是輸入還是輸出。如果有延時還注明了延時時間。常閉表示模塊的電氣梯形圖符號是常閉形式。并且每個節點的左上角都有一個編號,根據這個標號就可以將輸入的節點構造成樹形結構。流程圖結構如下:
隨后對該樹形結構進行深度遍歷,程序如下:


程序運行后,遍歷的順序是(節點編號):0.1,1.1.0.1,1.2.0.1,1.3.0.1,1.4.0.1,1.5.0.1,1.6.0.1,1.7.0.1,2.1.1.1,3.1.2.1,3.2.2.1,3.3.2.1,4.1.3.1,4.2.3.2,4.3.3.3,5.1.4.1,6.1.5.1。
將節點的遍歷順序,結合剛才的節點關系對應表就可以將流程圖以一種類似于梯形圖的格式表示出來。深度遍歷順序中相鄰的兩個節點如果是父子關系,則這兩個節點是串聯排列,如果是右鄰兄弟節點,則兩個節點是并聯。于是輸入到計算機的流程圖被處理成,如圖2所示:

圖2 經深度遍歷轉換后的流程圖
將每個模塊對應的梯形圖符號一一替換掉模塊,替換規則如下:如果模塊是輸出,則用符號“”替換,如果模塊為方形且是輸入,則用“”替換,如果模塊是菱形且是輸入,則用“”替換,如果模塊寫有計時,則用定時器替換。產生的梯形圖程序,如圖3所示:

圖3 由算法生成的梯形圖
本文介紹的邏輯可編程控制器的梯形圖程序自動生成系統, 采用了圖形化的輸入方式,將工程技術人員的設計思想通過流程圖的方式輸入計算機,經過算法將輸入的流程圖轉化成樹形結構儲存,再通過深度遍歷算法將其轉化成類似梯形圖的結構。最后用梯形圖符號替換掉各個動作模塊,生成PLC梯形圖程序。該系統大大節約了輸入梯形圖程序的時間,可以使工程技術人員將精力放在程序的設計和優化上,從而提高了編程的效率和效果。
[1]嚴蔚敏, 吳偉民. 數據結構[ M ]. 北京: 清華大學出版社,1997: 118-158.
[2]圖解西門子S7-300/400PLC編程技術 .[M]中國電力出版社,2010.
[3]深入淺出西門子S7 300PLC .[M]北京航空航天大學出版社,2004.
[4]孫睿,朱勁,滕建忠. 基于塊生長觀點的PLC指令表向梯形圖轉化算法[J]電腦知識與技術, 2008, (33) .