发布于 2015-04-06 23:35:56
6楼
楼主,先给你提几点意见吧,工作不是很细心呀(呵呵,年轻人吗,常有的事,有什么大惊小怪的),不过要想从事工控,以后还是要仔细哦,否则,工作中出了差错,问题就大了。
1) 变量申明中错误就不少,有“dianji”还有“diangji”;
2) 对于系统提供的功能学习不彻底,SFB4,在SCL中必须有有2个输入和2个输出,在S7按F1键就可以看到帮助;
3) 逻辑考虑不充分
a) 电机启动,一般要用按键的上升沿信号启动;
b) 如果 电机1没有运行到20秒,按了停止按键怎样处理,反之也然;因为,此时2个电机无法交替启动了,是2个电机都停,还是某个电机停,另一个继续运行?考虑不周;
c)程序中大量的逻辑错误,没有仔细检查程序。
d)电机1和电机2的计时要分别计时;
f) 计时器一般要用输出来控制。
我根据你的大致要求帮你写了个程序,供你参考,希望你有所收获:
OB1:
CALL FB 1 , DB1
dianji1_start:=M0.0
dianji1_stop :=M0.1
dianji2_start:=M1.0
dianji2_stop :=M1.1
dianji1_out :=M2.0
dianji2_out :=M2.1
FB1:
FUNCTION_BLOCK FB1
VAR_INPUT
dianji1_start:BOOL;
dianji1_stop:BOOL;
dianji2_start:BOOL;
dianji2_stop:BOOL;
END_VAR
VAR_OUTPUT
dianji1_out:BOOL;
dianji2_out:BOOL;
END_VAR
VAR
// Static Variables
dianji1_start_auxFP:BOOL; //电机1启动上升沿辅助形参
dianji1_start_FP:BOOL; //电机1启动上升沿形参
dianji2_start_auxFP:BOOL; //电机2启动上升沿辅助形参
dianji2_start_FP:BOOL;//电机2启动上升沿形参
dianji1_timeout:BOOL;//电机1运行时间到
dianji2_timeout:BOOL;//电机2运行时间到
dianji1_timer:TIME;//电机1运行时间给定值
dianji2_timer:TIME;//电机2运行时间给定值
dianji1_time:TIME;//电机1运行时间
dianji2_time:TIME;//电机1运行时间
END_VAR
// Statement Section
//电机1启动上升沿
IF dianji1_start THEN
dianji1_start_FP:= dianji1_start AND NOT dianji1_start_auxFP;
END_IF;
dianji1_start_auxFP:=dianji1_start;
//电机2启动上升沿
IF dianji2_start THEN
dianji2_start_FP:= dianji2_start AND NOT dianji2_start_auxFP;
END_IF;
dianji2_start_auxFP:=dianji2_start;
//控制逻辑
IF dianji1_start_FP THEN
dianji1_out:=true;
dianji2_out:=false;
ELSIF dianji2_start_FP THEN
dianji2_out:=true;
dianji1_out:=false;
ELSIF dianji1_timeout THEN
dianji2_out:=true;
dianji1_out:=false;
ELSIF dianji2_timeout THEN
dianji1_out:=true;
dianji2_out:=false;
ELSIF dianji1_stop OR dianji2_stop THEN
dianji1_out:=false;
dianji2_out:=false;
END_IF;
//计时器
dianji1_timer:=T#20S;
TON.DB3 (IN := dianji1_out // IN: BOOL
,PT := dianji1_timer // IN: TIME
);
dianji1_timeout:= DB3.Q; // OUT: BOOL
dianji1_time:= DB3.ET; // OUT: TIME
dianji2_timer:=T#20S;
TON.DB4 (IN := dianji2_out // IN: BOOL
,PT := dianji2_timer // IN: TIME
);
dianji2_timeout:= DB4.Q; // OUT: BOOL
dianji2_time:= DB4.ET; // OUT: TIME
;
END_FUNCTION_BLOCK
期待你下一次发帖时不会出现不必要的疏忽了哦,哈哈!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。