正在利用指针来编一部分程序,要求按时间顺序依次动作28组阀门,第一组阀门执行完成后全部复位,开始执行第二组阀门,28组阀门全部执行完成后再重新从第一组开始循环,每组有三个阀门,在默认状态下所有阀门都是复位状态,开始动作其中一组阀门,F1.F2.F3,首先F1F2先置位,经过一定时间后F3置位,一定时间后F3复位,一定时间后F2复位,一定时间后F1复位,然后再执行一遍,第一组阀门执行完毕,开始执行第二组,程序中没有用到定时器,在ob35中做了一个脉冲计数,来计算时间,如下程序中,没有按照设想一组一组顺序执行,而是所有阀门同时执行,不知道错在哪,劳烦指点一下。谢谢各位了。
OPN "xin_QH"
L P#0.0
LAR1
L P#32.0
LAR2
L 2
net1: T MW 22
A(
L DBW [AR2,P#0.0]
L 0
==I
)
S Q [AR1,P#0.0]
S Q [AR1,P#0.1]
A(
L DBW [AR2,P#0.0]
L MW 42
==I
)
S Q [AR1,P#0.2]
A(
L DBW [AR2,P#0.0]
L MW 44
==I
)
R Q [AR1,P#0.2]
A(
L DBW [AR2,P#0.0]
L MW 46
==I
)
R Q [AR1,P#0.1]
A(
L DBW [AR2,P#0.0]
L MW 48
==I
)
R Q [AR1,P#0.0]
A(
L DBW [AR2,P#0.0]
L MW 50
==I
)
A(
L DBW [AR2,P#0.0]
L MW 52
==I
)
S Q [AR1,P#0.0]
S Q [AR1,P#0.1]
A(
L DBW [AR2,P#0.0]
L MW 54
==I
)
S Q [AR1,P#0.2]
A(
L DBW [AR2,P#0.0]
L MW 56
==I
)
R Q [AR1,P#0.2]
A(
L DBW [AR2,P#0.0]
L MW 58
==I
)
R Q [AR1,P#0.1]
A(
L DBW [AR2,P#0.0]
L MW 60
==I
)
R Q [AR1,P#0.0]
+AR1 P#0.3
+AR2 P#2.0
L MW 22
LOOP net1
JU net2
net2: NOP 0
f005: NOP 0
程序中mw存储器中是不同阶段累计时间计数,是固定的,在HMI中设定的。
问题补充:
搞混了DBW才是脉冲计数,MW中就是设定值,与DBW中进行比较,循环设置值应该是28,不是2,2是自己刚才测试的。DBW中的计数值在进行完一组阀门后就清零。
最佳答案
你搞错了,loop和计时执行后面的程序根本不是一回事,loop是在在一个扫描周期内多次循环知道满足跳出条件,实际你要的应该是多个扫描周期后执行开后面的阀。这根本用不到指针操作。
你可以编一个程序块:在默认状态下所有阀门都是复位状态,开始动作其中一组阀门,F1.F2.F3,首先F1F2先置位,经过一定时间后F3置位,一定时间后F3复位,一定时间后F2复位,一定时间后F1复位,然后再执行一遍。
这个块包含启动结束标志位,如果启动为1则开始执行你的程序最后置位结束标志位。然后多次调用这个块,启动标志就是前一个块的结束;再最后一次调用的结束标志为1后,复位所有的结束标志位,置位第一次调用的启动标志。
提问者对于答案的评价:
谢谢两位的回答,如何设置一个块的启动和完成标志?
最佳答案作者回复:
启动标志是输入信号呀!是外部给的,完成标志是输出信号。你用一个形参start,程序中判断start为1则启动,外部给start赋值,连接上一个功能块的完成标志位。第一个功能块手动自动,最后一个功能块完成后复位所有完成位,置位第一个功能块的启动位,这样就实现了循环。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc232034.html