我想编写一个泵轮换的程序,结果看了别人的一个泵轮换的程序看了N天都没看懂,下面是程序代码:
OPN DB 101
L P#6.5
T DB101.DBD 20
LAR1 P#6.0
LAR2 P#0.0
L 6 // 循环次数(风机台数)
M001: T MB 10
A M [AR1,P#0.0] // 判断M6.n,第n+1台风机的运行状态
JCN M002 // 非0时跳转
TAR1
T DBD [AR2,P#0.0] // M6.n=1时,将地址6.n存入数据块定义的数据
+AR2 P#4.0
M002: +AR1 P#0.1
L MB 10
LOOP M001
LAR1 DB101.DBD 0 // 第1台运行的风机台号
L 5
M003: T MB 11
TAR1
T DB101.DBD 24
L DB101.DBD 20
==D // 当前地址是M6.5,则转为M6.0,下一步
JC S001
JU S005
S001: LAR1 P#6.0
TAR1
T DB101.DBD 16
JU S006
S005: +AR1 P#0.1
TAR1
T DB101.DBD 16
S006: L DB101.DBD 4 // 与第2台运行的风机的台号相同,则下一步
==D
JC M004
A M 20.1
AN M [AR1,P#0.0]
A M [AR1,P#1.0]
JCN M004
S M [AR1,P#0.0] // 将下一台参与排序的风机置“1”
TAR1
T DB101.DBD 8 // 切换后第1台运行的风机的台号
LAR1 DB101.DBD 0
R M [AR1,P#0.0]
JU S007
M004: L MB 11
LOOP M003
S007: LAR1 DB101.DBD 4 // 第2台运行的风机台号
L 5
M005: T MB 12
TAR1
T DB101.DBD 24
L DB101.DBD 20
==D // 当前地址是M6.5,则转为M6.0,下一步
JC S002
JU S004
S002: LAR1 P#6.0
TAR1
T DB101.DBD 16
JU S003
S004: +AR1 P#0.1
T DB101.DBD 16
S003: L DB101.DBD 0 // 与第1台运行的风机的台号相同,则下一步
==D
JC M007
L DB101.DBD 16
L DB101.DBD 8 // 与切换后第1台运行的风机的台号相同,则下一步
==D
JC M007
A M 20.1
AN M [AR1,P#0.0]
A M [AR1,P#1.0]
JCN M007
S M [AR1,P#0.0] // 将下一台参与排序的风机置“1”
LAR1 DB101.DBD 4
R M [AR1,P#0.0]
JU m010
M007: L MB 12
LOOP M005
m010: BEU
谁能对这段程序指点一二吗?特别是如果能够在变量表里验证泵能够轮换就最好。这段程序实在是让我花了很长时间,也实在是没有搞明白。
问题补充:
对于西门子的指针我还是明白的,但是我不能做到用仿真PLC验证这段程序,即6台电机轮换
最佳答案
仿真测试了一下这段程序,这段程序本身貌似没有轮换功能。
置位M20.1
MB6的状态跟随MB7变化。M7.0-5不能同时超过两个点置位,否则M6.0-5会跳变.
将下面一段程序加到你的程序前面,置位M20.1并将M20.0作为切换按钮,每按一次,可以简单的轮换。
AN M 20.0
JC TURN
L MB 7
SRW 1
T MB 7
R M 20.0
L 0
<>I
JC TURN
L 32
T MB 7
TURN: NOP 0
提问者对于答案的评价:
谢谢回答,虽然问题依然没有解决 OB1调用这个块的程序是:
OPN DB 101
AN M 20.1
L S5T#5S
SD T 1
A T 1 // 轮换时间
= M 20.1
UC FB 100 // 时间轮换功能块
我的邮箱是zenchang@163.com
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc250247.html