发布于 2012-08-19 22:13:04
74楼
不知道楼主做后采用了什么方案。我也过脉冲除尘的程序。可以发段大家讨论下。PS:这段程序已经在正常运行了。
核心思想是做个脉冲阀间歇运行的的子程序(2个定时器的闪烁程序),然后由停止的计时器来记录脉冲次数,用这个次数来驱动相应的脉冲阀。可能所的不明确,我发源文件给你看。驱动10个脉冲阀的,欢迎大家提意见!
主程序:
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 除尘器脉冲阀
LD SM0.0
LPS
AW= VW52, 10
MOVW 0, VW52
LPP
A M30.3
+I 1, VW52
Network 2
LD SM0.0
= L60.0
LD M12.0
LD M3.2
A Q0.0
OLD
= L63.7
LD L60.0
CALL SBR2, L63.7, VW4, VW6, M30.2, M30.3
Network 3
LD M30.2
LPS
AW= VW52, 0
= M2.0
LRD
AW= VW52, 1
= M2.1
LRD
AW= VW52, 2
= M2.2
LRD
AW= VW52, 3
= M2.3
LRD
AW= VW52, 4
= M2.4
LRD
AW= VW52, 5
= M2.5
LRD
AW= VW52, 6
= M2.6
LRD
AW= VW52, 7
= M2.7
LRD
AW= VW52, 8
= M3.0
LPP
AW= VW52, 9
= M3.1
Network 4 // 网络标题
// 网络注释
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK PULSE:SBR2
TITLE=
VAR_INPUT
start:BOOL;
RuntimeSet:WORD;
StoptimeSet:WORD;
END_VAR
VAR_OUTPUT
run:BOOL;
pulse:BOOL;
END_VAR
BEGIN
Network 1 // 网络标题
// 网络注释
LD SM0.0
LPS
A L0.0
AN T102
TON T101, LW1
LRD
A T101
TON T102, LW3
LRD
A T101
= L5.0
LPP
A T102
= L5.1
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_INTERRUPT_BLOCK
子程序:
SUBROUTINE_BLOCK PULSE:SBR2
TITLE=
VAR_INPUT
start:BOOL;
RuntimeSet:WORD;
StoptimeSet:WORD;
END_VAR
VAR_OUTPUT
run:BOOL;
pulse:BOOL;
END_VAR
BEGIN
Network 1 // 网络标题
// 网络注释
LD SM0.0
LPS
A L0.0
AN T102
TON T101, LW1
LRD
A T101
TON T102, LW3
LRD
A T101
= L5.0
LPP
A T102
= L5.1
END_SUBROUTINE_BLOCK