說實話,好幾年沒用過PLC了;今看到一個以前的試驗程序,看起來蠻“拗口”的,參見附圖1。程序原用GX Developer編制,FX2N;現移植為用臺達WPLSoft 2.12編制,ES2。
該段程序的要求是:實現Y1~Y5的順序移位,并可任意取消某位或某幾位;也就是,若取消Y2,則Y1接通之后,滿足條件后Y1斷開、Y3接通,而不是Y2接通。
這可能是,當時為編制某程序而作的準備,應當是程序中要求有類似的功能(原程序未保留)。比如,五個加工工位,每次僅允許一個加工,若某工位未準備好,則跳過該工位。
該程序的方法,似不太順暢——要實現該功能,還可以如何編制程序呢?
此主題相關圖片如下,點擊圖片看大圖:
重新閱讀該段程序后,得出其編程思路是:若取消某位,則移位到該位為1時,再使之移一位。
為便于描述,用梯形圖左母線旁的步序號為“行號”(行塊號)。
附,對附圖1程序的解讀:
0行:接通一次X0,T0延時1秒接通,即使X0信號抖動,也不會多次給出信號;這是防外部觸點抖動的另一種思路。T0接通一次,M31~M36左移一位。
8行:給出移位的初始信號M10。
10行:當M31接通后,復位復位M10。
14行:移位指令,實現M31~M36的每次一位移位;此處M1無作用。
25行:下一個循環時,使M31置位,即M31與M36同時接通。
27行:復位M31,此時M32已接通,仍是實現M31與M36同時接通。
33~53行:產生D10的移位信號。
58行:D10賦初值。
64行:實現D10的移位。
75~114行:若取消某位,則該位被移除。
比如,取消Y2(使Y1接通直接轉到Y3接通),則這時使X2接通;
設先有Y1接通(M31等接通),此時來一個移位信號后,有M32接通,執行38行、產生M62信號(M62脈沖接通),于64行D10移一位;這時D10的各位為 0000 0000 0000 0100;
由于M62接通、又X2接通,故執行到88行時,D10再移一位,結果為 0000 0000 0000 1000;執行后續程序,使M93接通,Y3接通。
127行:若為取消第5位,則將D10賦初值。
138行:當D10移位至b6位以上接通時,則D10賦初值。
148行:將D10的值,送至K2M90(M90~M105),以達控制目的。
154~166行:實現Y1~Y5的控制目的。
169行:程序結束。
該程序僅是給出一種思路,不是實用程序;程序移植后(并將138行與127行指令位置作了交換),也未進行試驗。
比如,粗看起來,當取消某位,D10進行“額外”的移位后,則M31~M36并沒有進行相應的移位;可能的方法,是將D10的內容,再返回到M31~M36。