Объявление переменных:
PROGRAM PLC_PRG
VAR
on: BOOL; *светофор вкючен/отключен
TON_timer: TON;
byt: BOOL;
prbyt: BOOL;
green: BOOL; *зеленая лампа (выход)
red: BOOL; *красная лампа (выход)
yellow: BOOL; *желтая лампа (выход)
timer: BYTE;
go: BOOL;
tgreen: BYTE; *время горения зеленого сигнала в секундах (уставка)
tred: BYTE; *время горения красного сигнала в секундах (уставка)
sec: BYTE; *цифровое табло, сколько в секундах осталось до переключения светофора.
END_VAR
Сама программа:
IF tred=0 THEN tred:=15; tgreen:=10;END_IF; *это на случай если настройки светофора не заданы
TON_timer (IN:=TRUE ,PT:=t#0.5s);
IF TON_timer.q=TRUE THEN TON_timer (IN:= FALSE ); byt:=NOT byt;END_IF;
IF on=0 THEN green:=0;red:=0;
IF byt<>prbyt THEN yellow:=NOT yellow;END_IF;
ELSIF byt<>prbyt THEN
IF timer=0 THEN
IF go=0 THEN go:=1; green:=1; red:=0;yellow:=0; timer:=tgreen*2;
ELSE go:=0; green:=0; yellow:=0; red:=1; timer:=tred*2; END_IF;
ELSIF timer>0 THEN timer:=timer-1;IF timer<7 THEN
IF go=1 THEN green:= NOT green; ELSE yellow:=1;END_IF;
END_IF;
END_IF;
END_IF;
sec:=timer/2;
prbyt:=byt;
Полноценный светофор на ST, полностью повторяет все фазы уличного светофора. Проект для плк150. При желании легко добавляется второй светофор для организации реверсивного движения.