AB的程序設計和西門子有點PLC不大一樣,在AB中沒有RS指令,所以主要用move指令來作步進。今天我們就用Move指令寫個AB的程序,和西門子比,有哪些不同。
控制任務
很簡單的一個狀態機。初始步為Step0,根據不同的條件分別轉移到不同的步。
具體程序
下面是tag變量表:
下面定義了一個關於步進的udt,StepNumber是當前的步號,根據StepNumber的步號來設置Step變量中對應的一個位,Reset設置StepNumber為0,
恢復到初始步。Re_Step是Step步中對應步的一個上升沿,Auto就是自動。
這里簡單解釋一下:
第0段中,如果site.Auto為0,也就是激活手動,那么程序就跳轉到第5段,2,3,4段程序就不激活,即使轉移條件滿足步也不會改變。
此時如果按下Reset按鈕,那么將回到Step0步。如果site.Auto為1,那么按Reset也不會起作用。此程序最關鍵的地方在第5段,第五段
第一行,就是復位程序。第二行是設置激活步的上升沿,僅存在一個掃描周期。第三行是先把所有步清零,在設置激活的步。
和我們前面寫的程序比,這個程序有以下優點:
- 每步激活前會清零所有步,然后再激活當前步,防止同時激活兩個步。
- 程序的先導條件改成觸點,以前我們是用比較指令。簡潔不少。
- 自動和復位寫的比前面優雅,同時為每步增加一個步上升沿。
和RS指令比,並行步寫起來會麻煩不少,需要定義兩個Grafcet變量。
下一篇我們用西門子TIA Portal來寫這個程序,看看是否可以寫的一樣優秀。