SCL编写的程序,FOR语句好像没执行

已锁定

0安0

  • 帖子

    208
  • 精华

    2
  • 被关注

    4

论坛等级:游侠

注册时间:2008-01-03

普通 普通 如何晋级?

SCL编写的程序,FOR语句好像没执行

687

0

2011-03-17 18:22:19

FUNCTION_BLOCK FB22

// Block Parameters
VAR_INPUT
// Input Parameters
Remote:BOOL ;
Run1:BOOL ;
Run2:BOOL ;
Run3:BOOL ;
Run4:BOOL ;
Run5:BOOL ;
Fault1:BOOL ;
Fault2:BOOL ;
Fault3:BOOL ;
Fault4:BOOL ;
Fault5:BOOL ;
Pulse:TIMER ;
Pump1_time:REAL ;
Pump2_time:REAL ;
Pump3_time:REAL ;
Pump4_time:REAL ;
Pump5_time:REAL ;
PV_L:REAL ;
Spare:REAL ;


END_VAR

VAR_IN_OUT
// I/O Parameters
END_VAR

VAR_OUTPUT
// Output Parameters
L_alarm:BOOL ;
H_alarm:BOOL ;
AUTO_ON1:BOOL ;
AUTO_OFF1:BOOL ;
AUTO_ON2:BOOL ;
AUTO_OFF2:BOOL ;
AUTO_ON3:BOOL ;
AUTO_OFF3:BOOL ;
AUTO_ON4:BOOL ;
AUTO_OFF4:BOOL ;

END_VAR

VAR_TEMP
// Temporary Variables

END_VAR
VAR
// Static Variables
L_set1:REAL ;//低位报警设定值
L_set2:REAL ;//开一台液位设定值
L_set3:REAL ;//开两台液位设定值
L_set4:REAL ;//开三台液位设定值
L_set5:REAL ;//高位报警设定值
L_Lset1:REAL ;//关两台液位
L_Lset2:REAL ;//关三台液位
L_Lset3:REAL ;//关四台液位
Count_pv:INT ; //实际开泵数量计数
Count_set:INT ; //根据液位判断应开泵数量
Time_least:REAL ; //未开机所有泵中运行时间最小的值
Time_large:REAL ; //开机所有泵中运行时间最大的值
Ca:INT ;//液位到达计数
Cb:INT ;//液位到达计数
Cc:INT ;//液位到达计数
Ce:INT ;//液位到达计数
Cf:INT ;//液位到达计数
Cg:INT ;//液位到达计数
Pump_time : ARRAY[1..5 ] OF REAL ;//存储运行时间
a:INT ; //数组应用
b:INT ;
END_VAR


Pump_time[1]:=Pump1_time;
Pump_time[2]:=Pump2_time;
Pump_time[3]:=Pump3_time;
Pump_time[4]:=Pump4_time;
Pump_time[5]:=Pump5_time;//时间传送
// Instruction Section
Count_pv:=0;
IF Run1=1 THEN Count_pv:=Count_pv+1; END_IF;
IF Run2=1 THEN Count_pv:=Count_pv+1;END_IF;
IF Run3=1 THEN Count_pv:=Count_pv+1;END_IF;
IF Run4=1 THEN Count_pv:=Count_pv+1;END_IF;//判断开机数量

IF Run1=0 THEN
Time_least:=Pump1_time;
ELSE IF Run2=0 THEN
Time_least:=Pump2_time;
ELSE IF Run3=0 THEN
Time_least:=Pump3_time;
ELSE IF run4=0 THEN
Time_least:=Pump4_time;
END_IF;
END_IF;
END_IF;
END_IF;
IF Run1=0 AND Time_least>Pump1_time THEN Time_least:=Pump1_time;END_IF;
IF Run2=0 AND Time_least>Pump2_time THEN Time_least:=Pump2_time;END_IF;
IF Run3=0 AND Time_least>Pump3_time THEN Time_least:=Pump3_time;END_IF;
IF Run4=0 AND Time_least>Pump4_time THEN Time_least:=Pump4_time;END_IF;//判断最小运行时间


IF Run1=1 THEN
Time_large:=Pump1_time;
ELSE IF Run2=1 THEN
Time_large:=Pump2_time;
ELSE IF Run3=1 THEN
Time_large:=Pump3_time;
ELSE IF run4=1 THEN
Time_large:=Pump4_time;
END_IF;
END_IF;
END_IF;
END_IF;
IF Run1=1 AND Time_largeIF Run2=1 AND Time_largeIF Run3=1 AND Time_largeIF Run4=1 AND Time_large
FB24.DB270(L_set1:=L_set1,L_set2:=L_set2,L_set3:=L_set3,L_set4:=L_set4,L_set5:=L_set5,L_Lset1:=L_Lset1,L_Lset2:=L_Lset2,L_Lset3:=L_Lset3,PV_L:=PV_L,Count_pv:=Count_pv);

Count_set:=DB270.Count_set ;
L_alarm:=DB270.L_alarm ;
H_alarm:=DB270.H_alarm ;


FOR a:= 1 TO 5 BY 1 DO // Statement Section
IF Count_pv IF a=1 AND Run1<>1 THEN AUTO_ON1:=1;AUTO_OFF1:=0;END_IF;
IF a=2 AND Run2<>1 THEN AUTO_ON2:=1;AUTO_OFF2:=0; END_IF;
IF a=3 AND Run3<>1 THEN AUTO_ON3:=1;AUTO_OFF3:=0; END_IF;
IF a=4 AND Run4<>1 THEN AUTO_ON4:=1;AUTO_OFF4:=0; END_IF;
END_IF ;
END_FOR ; //开机运行


FOR a:= 1 TO 5 BY 1 DO // Statement Section
IF Count_pv>Count_set AND Pump_time[a]>= Time_large THEN
IF a=1 AND Run1=1 THEN AUTO_ON1:=0;AUTO_OFF1:=1; END_IF;
IF a=2 AND Run1=1 THEN AUTO_ON2:=0;AUTO_OFF2:=1; END_IF;
IF a=3 AND Run1=1 THEN AUTO_ON3:=0;AUTO_OFF3:=1; END_IF;
IF a=4 AND Run1=1 THEN AUTO_ON4:=0;AUTO_OFF4:=1; END_IF;
END_IF ;
END_FOR ;






END_FUNCTION_BLOCK
上面是我的程序,但是在
FOR a:= 1 TO 5 BY 1 DO // Statement Section
IF Count_pv>Count_set AND Pump_time[a]>= Time_large THEN
IF a=1 AND Run1=1 THEN AUTO_ON1:=0;AUTO_OFF1:=1; END_IF;
IF a=2 AND Run1=1 THEN AUTO_ON2:=0;AUTO_OFF2:=1; END_IF;
IF a=3 AND Run1=1 THEN AUTO_ON3:=0;AUTO_OFF3:=1; END_IF;
IF a=4 AND Run1=1 THEN AUTO_ON4:=0;AUTO_OFF4:=1; END_IF;
END_IF ;
END_FOR ;
里面的IF语句条件满足时没有执行,这是什么原因造成的,a在监视中一直是6
SCL编写的程序,FOR语句好像没执行 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54776条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。