По просьбе наших посетителей, данный материал перенесен с сайта plc4good.org.ua, в связи с полной его потерей. Всё возражения принимаются через форму обратной связи.
plc4good.org.ua/view_post.php?id=227
Функции могут пригодится для для тестирования ПО и, связанной с ним, аппаратной части, с разными временами цикла контроллера, также можно динамически менять время цикла во время выполнения программы, для проверки самых жестких вариантов выполнения.
Для использования в проект также необходимо добавить библиотечную функцию, FC14 GT_DT,
расположенную в SiemensStep7S7libsstdlib30
Вариант 1: задержка цикла OB на заданное количество времени.
FUNCTION FC111: VOID
TITLE = ‘Set time delay’
//
// Constant time delay
//
VERSION: ‘1.0’
AUTHOR: dda
NAME: t_const
FAMILY: cycleVAR_INPUT
time_to_sleep : TIME, // Time delay
END_VARVAR_TEMP
start_time : DATE_AND_TIME,
current_time : DATE_AND_TIME,
end_time : DATE_AND_TIME,
retval : INT,
END_VARretval:=READ_CLK(CDT := start_time), // Start time
end_time:=AD_DT_TM(T :=start_time,D :=time_to_sleep), // Finish time
REPEAT
retval:=READ_CLK(CDT := current_time), // Current timeUNTIL GT_DT(DT1:=current_time, DT2:=end_time) END_REPEAT, // out condition
END_FUNCTION
Вариант 2: обработка организационного блок OB за заданное время (функция должна вызываться в конце OB, обычное время выполнения OB должно быть меньше заданного).
FUNCTION FC112: VOID
TITLE = ‘Set time OB cycle’
//
// Constant OB cycle
//
VERSION: ‘1.0’
AUTHOR: dda
NAME: ob_const
FAMILY: cycleVAR_INPUT
OB_start_time : DATE_AND_TIME, // Date and time when OB started (OBxx_DATE_TIME)
time_OB : TIME , // Time OB continue
END_VARVAR_TEMP
OB_start_time_tmp:DATE_AND_TIME,
current_time : DATE_AND_TIME,
end_time : DATE_AND_TIME,
retval : INT,
END_VAROB_start_time_tmp:=OB_start_time,
end_time:=AD_DT_TM(T :=OB_start_time_tmp,D :=time_OB ), // Finish time
REPEAT
retval:=READ_CLK(CDT := current_time), // Current timeUNTIL GT_DT(DT1:=current_time, DT2:=end_time) END_REPEAT, // out condition
END_FUNCTION
Оцените статью!