說(shuō)實(shí)話(huà),好幾年沒(méi)用過(guò)PLC了;今看到一個(gè)以前的試驗程序,看起來(lái)蠻“拗口”的,參見(jiàn)附圖1。程序原用GX Developer編制,FX2N;現移植為用臺達WPLSoft 2.12編制,ES2。
該段程序的要求是:實(shí)現Y1~Y5的順序移位,并可任意取消某位或某幾位;也就是,若取消Y2,則Y1接通之后,滿(mǎn)足條件后Y1斷開(kāi)、Y3接通,而不是Y2接通。
這可能是,當時(shí)為編制某程序而作的準備,應當是程序中要求有類(lèi)似的功能(原程序未保留)。比如,五個(gè)加工工位,每次僅允許一個(gè)加工,若某工位未準備好,則跳過(guò)該工位。
該程序的方法,似不太順暢——要實(shí)現該功能,還可以如何編制程序呢?

此主題相關(guān)圖片如下,點(diǎn)擊圖片看大圖:

重新閱讀該段程序后,得出其編程思路是:若取消某位,則移位到該位為1時(shí),再使之移一位。
為便于描述,用梯形圖左母線(xiàn)旁的步序號為“行號”(行塊號)。
附,對附圖1程序的解讀:
0行:接通一次X0,T0延時(shí)1秒接通,即使X0信號抖動(dòng),也不會(huì )多次給出信號;這是防外部觸點(diǎn)抖動(dòng)的另一種思路。T0接通一次,M31~M36左移一位。
8行:給出移位的初始信號M10。
10行:當M31接通后,復位復位M10。
14行:移位指令,實(shí)現M31~M36的每次一位移位;此處M1無(wú)作用。
25行:下一個(gè)循環(huán)時(shí),使M31置位,即M31與M36同時(shí)接通。
27行:復位M31,此時(shí)M32已接通,仍是實(shí)現M31與M36同時(shí)接通。
33~53行:產(chǎn)生D10的移位信號。
58行:D10賦初值。
64行:實(shí)現D10的移位。
75~114行:若取消某位,則該位被移除。
比如,取消Y2(使Y1接通直接轉到Y3接通),則這時(shí)使X2接通;
設先有Y1接通(M31等接通),此時(shí)來(lái)一個(gè)移位信號后,有M32接通,執行38行、產(chǎn)生M62信號(M62脈沖接通),于64行D10移一位;這時(shí)D10的各位為 0000 0000 0000 0100;
由于M62接通、又X2接通,故執行到88行時(shí),D10再移一位,結果為 0000 0000 0000 1000;執行后續程序,使M93接通,Y3接通。
127行:若為取消第5位,則將D10賦初值。
138行:當D10移位至b6位以上接通時(shí),則D10賦初值。
148行:將D10的值,送至K2M90(M90~M105),以達控制目的。
154~166行:實(shí)現Y1~Y5的控制目的。
169行:程序結束。
該程序僅是給出一種思路,不是實(shí)用程序;程序移植后(并將138行與127行指令位置作了交換),也未進(jìn)行試驗。
比如,粗看起來(lái),當取消某位,D10進(jìn)行“額外”的移位后,則M31~M36并沒(méi)有進(jìn)行相應的移位;可能的方法,是將D10的內容,再返回到M31~M36。