说实话,好几年没用过plc了;今看到一个以前的试验程序,看起来蛮“拗口”的,参见附图1。程序原用GX Developer编制,FX2N;现移植为用台达WPLSoft 2.12编制,ES2。 该段程序的要求是:实现Y1~Y5的顺序移位,并可任意取消某位或某几位;也就是,若取消Y2,则Y1接通之后,满足条件后Y1断开、Y3接通,而不是Y2接通。 这可能是,当时为编制某程序而作的准备,应当是程序中要求有类似的功能(原程序未保留)。比如,五个加工工位,每次仅允许一个加工,若某工位未准备好,则跳过该工位。 该程序的方法,似不太顺畅——要实现该功能,还可以如何编制程序呢? 700)this.width=700"> 重新阅读该段程序后,得出其编程思路是:若取消某位,则移位到该位为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。 |