这个练习尝试使用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画面,点击启动按钮就按照设定的时序动作,点击停止就停下来,再次点击启动按钮,就重新开始红绿黄灯时序动作。