TIA使用SCL写FB做交通信号灯控制练习

这个练习尝试使用SCL编程,按照第一个交通信号灯的要求写控制程序。因为我是初学者,所以做出来的东西可能不是最简洁最优的,只是当学习体验做一个记录而已。

在前面的程序基础上新建一个FB,使用SCL编程方式,先建立变量如下:

 

写下面的SCL程序,其中TON这样的功能块通过从右边的指令集找到,鼠标拖拽到需要放置的位置,系统会自动要求配置北京数据块。

IF #stopbtn=1 THEN
  #CurrentState := 4;
END_IF;
IF #startbrn = 1 THEN
  #CurrentState := 1;
END_IF;
(*红灯控制*)
IF #CurrentState = 1 THEN
  #RedLight_in := 1;
  #RedLight := 1;
ELSE
  #RedLight_in := 0;
  #RedLight := 0;
END_IF;
"RedLight_TON3".TON(IN:=#RedLight_in,
PT:=#RedLightDuration);
IF "RedLight_TON3".Q THEN
  #CurrentState := 2;
END_IF;

(*绿灯控制*)
IF #CurrentState = 2 THEN
  #GreenLight_in := 1;
  #GreenLight := 1;
ELSE
  #GreenLight_in := 0;
  #GreenLight := 0;
END_IF;

"GreenLight_TON3".TON(IN:=#GreenLight_in,
PT:=#GreenLightDuration);
IF "GreenLight_TON3".Q THEN
  #CurrentState := 3;
END_IF;

IF #CurrentState = 3 THEN
  #yellowLight_in := 1;
  #YellowLight := 1;
ELSE
  #yellowLight_in := 0;
  #YellowLight := 0;
END_IF;
"YellowLight_TON3".TON(IN:=#yellowLight_in,
PT:=#YellowLightDuration);
IF "YellowLight_TON3".Q THEN
#CurrentState := 1;
END_IF;

IF #CurrentState = 4 THEN
  #RedLight := 0;
  #GreenLight := 0;
  #YellowLight := 0;
END_IF;

在OB1调用这个功能块,由于练习选用的CPU比较低端前面的例子把Q点用了,这里使用M点做测试。

在前面wincc程序上变量管理中加上启动和停止按钮的变量,关联M1.4和M1.5,画面上放置两个按钮,按下时M1.4和M1.5为1,弹起时M1.4和M1.5为0.

运行WINCC画面,点击启动按钮就按照设定的时序动作,点击停止就停下来,再次点击启动按钮,就重新开始红绿黄灯时序动作。

 

posted @ 2024-11-26 20:05  来自金沙江的小鱼  阅读(79)  评论(0)    收藏  举报