Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
FUNCTION "FC_On_Delay" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
input : Bool;
current_time : Time;
interval : Time;
END_VAR
VAR_IN_OUT
prev_input : Bool;
output : Bool;
start_time : Time;
END_VAR
BEGIN
IF #output <> #input THEN
IF #input THEN
IF #prev_input THEN
IF (#current_time - #start_time) > #interval THEN
#output := true;
END_IF;
ELSE
#start_time := #current_time;
END_IF;
ELSE
#output := false;
END_IF;
END_IF;
#prev_input := #input;
END_FUNCTIONTYPE "test_timer_t"
VERSION : 0.1
STRUCT
"timer" {InstructionName := 'IEC_TIMER'; LibVersion := '1.0'} : IEC_TIMER;
in : Bool;
pt : Time := T#10S;
q : Bool;
et : Time;
END_STRUCT;
END_TYPE
TYPE "test_ton_timer_t"
VERSION : 0.1
STRUCT
"timer" {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
in : Bool;
pt : Time := T#10S;
q : Bool;
et : Time;
END_STRUCT;
END_TYPE
TYPE "test_tof_timer_t"
VERSION : 0.1
STRUCT
"timer" {InstructionName := 'TOF_TIME'; LibVersion := '1.0'} : TOF_TIME;
in : Bool := true;
pt : Time := T#10S;
q : Bool;
et : Time;
END_STRUCT;
END_TYPE
DATA_BLOCK "DB_timers"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
NON_RETAIN
VAR
timers : Array[1..100] of "test_timer_t";
ton_timers : Array[1..100] of "test_ton_timer_t";
tof_timers : Array[1..100] of "test_tof_timer_t";
END_VAR
BEGIN
END_DATA_BLOCK
FUNCTION "FC_test_timers" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_TEMP
i : Int;
END_VAR
BEGIN
FOR #i := 1 TO 100 DO
"DB_timers".timers[#i].timer.TON(IN := "DB_timers".timers[#i].in,
PT := "DB_timers".timers[#i].pt,
Q => "DB_timers".timers[#i].q,
ET => "DB_timers".timers[#i].et);
"DB_timers".ton_timers[#i].timer(IN := "DB_timers".ton_timers[#i].in,
PT := "DB_timers".ton_timers[#i].pt,
Q => "DB_timers".ton_timers[#i].q,
ET => "DB_timers".ton_timers[#i].et);
"DB_timers".tof_timers[#i].timer(IN := "DB_timers".tof_timers[#i].in,
PT := "DB_timers".tof_timers[#i].pt,
Q => "DB_timers".tof_timers[#i].q,
ET => "DB_timers".tof_timers[#i].et);
END_FOR;
END_FUNCTION
Самописный таймер в виде функции для промышленного контроллера Simatic S7-1200