回复:循环启动电机(我初学PLC,用SCL来编写)

老学童

  • 帖子

    789
  • 精华

    32
  • 被关注

    67

论坛等级:奇侠

注册时间:2011-06-22

白金 白金 如何晋级?

发布于 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

期待你下一次发帖时不会出现不必要的疏忽了哦,哈哈!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54804条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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