发布于 2012-07-27 14:03:56
39楼
PLC 被拿走了,无法测试斑竹的程序了,试不了了。
我的 思路:
1, vW0 定义为执行程序时的步标志(从1开始),
2, VW2-VW2n 用来存放用户程序执行的步顺序(1到n,0表示不执行)。(最大值N为步长,当用户安排的步顺序中含有K个0时,步长=N-K)。
3, 当VW0=VWx 的时候,执行VWx 对应的程序(要是程序动作多,可以用子程序),程序结束时,VW0+1=VW0
当VW0>步长时,返回 1 给VW0
4,返回,重新执行第3步,
这样,程序做起来就很简单了,既可以满足芳大侠提出的 基本要求(用户可以随意编排顺序),也可以满足芳侠提出的两点扩展要求;还可以多一个扩展的要求,即,可以随意取消中间任何步骤,被取消的步骤不会占用户的动作时间。
以下 是我写的一部分程序(不考虑0,考虑0的话程序会比较长),程序可以转换成梯形图的。
主程序 网络1
LD SM0.0
LPS
AW= VW0, VW2
CALL SBR_0:SBR0, Q0.0
LRD
AW= VW0, VW4
CALL SBR_0:SBR0, Q0.1
LRD
AW= VW0, VW6
CALL SBR_0:SBR0, Q0.2
LRD
AW= VW0, VW8
CALL SBR_0:SBR0, Q0.3
LPP
AW= VW0, VW10
CALL SBR_0:SBR0, Q0.4
子程序
网络1
LD SM0.0
LPS
AN T37
= #B_OUT:L0.0
LPP
AN T37
TON T37, +10
网络2
LD T37
ED
+I +1, VW0
AW= VW0, 6 // 没有0 的时候,这里的就是常数“6”了,有0 的时候,要用变量(=N-K+1)
MOVW +1, VW0
这部分程序没有考虑0的情况。
有0 的时候,只需用指针方法找出VW0-VW2n中的最大值+1给上面的程序(N-K+1)的位置中的变量,就可以了。
这个程序也是我邮箱中的程序,程序密码:LONG (大写的)。邮箱中的程序还是以前好几天写的了,当时没用指针,只是用最死板的方法,来判断的又1个为0 的情况。
这个方法很土,也很简单。
不过,我想,应该很实用。
特别是对象我这样的新手。
成功的叫经验,失败的叫经历