Функции для управления временем выполнения OB

По просьбе наших посетителей, данный материал перенесен с сайта plc4good.org.ua, в связи с полной его потерей. Всё возражения принимаются через форму обратной связи.

plc4good.org.ua/view_post.php?id=227

time delay

Функции могут пригодится для для тестирования ПО и, связанной с ним, аппаратной части, с разными временами цикла контроллера, также можно динамически менять время цикла во время выполнения программы, для проверки самых жестких вариантов выполнения.

Для использования в проект также необходимо добавить библиотечную функцию, 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: cycle

VAR_INPUT
    time_to_sleep   : TIME,                                // Time delay
END_VAR

VAR_TEMP
start_time      : DATE_AND_TIME,                        
    current_time    : DATE_AND_TIME,                        
    end_time        : DATE_AND_TIME,
retval          : INT,
END_VAR

retval:=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 time

UNTIL  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: cycle

VAR_INPUT
OB_start_time   : DATE_AND_TIME,                        // Date and time when OB started (OBxx_DATE_TIME)
time_OB         : TIME ,                                // Time OB continue
END_VAR

VAR_TEMP
    OB_start_time_tmp:DATE_AND_TIME,
    current_time    : DATE_AND_TIME,
end_time        : DATE_AND_TIME,
retval          : INT,
END_VAR

OB_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 time

UNTIL  GT_DT(DT1:=current_time, DT2:=end_time) END_REPEAT// out condition

END_FUNCTION

0 0 голоса

Оцените статью!

guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии