发表于:2011/3/24 7:54:27
#0楼
说实话,好几年没用过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。
有兴趣者,可给出另外的方法。
(莫其麟,于20110323)
此贴来自中华工控网工控博客。
原文件地址:http://blog.gkong.com/more.asp?id=134888&Name=mqlin
[此贴子已经被作者于2011/3/27 10:15:47编辑过]