5.3.3.1.3. DELAY | ЗАПАЗДЫВАНИЕ
Алгоритм позволяет передавать на выход OUT значение входа IN с запаздыванием на заданное время.
Реализация транспортного запаздывания в алгоритме осуществлена с использованием циклического буфера для запоминания предыдущих отчетов запаздывающего сигнала.
В данном подходе предполагается хранение истории изменения запаздывающей переменной с глубиной, равной времени запаздывания. Размер буфера вычисляется делением времени запаздывания на время цикла задачи ПЛК:
BUFFERSIZE = REAL_TO_UINT (DELAY/CYCLETIME),
где CYCLETIME – время цикла задачи ПЛК.
|
Максимальный размер буфера равен 200. Отсюда следует ограничение на задаваемую величину DELAY:
DELAY <= 200∙CYCLETYME
|
Если значение DELAY задано некорректно, выход ERROR устанавливается в TRUE. Если значение DELAY задано меньше времени цикла, то значение входа IN транслируется на выход OUT.
Если значение DELAY задано корректно, то алгоритм работает по следующему принципу:
если буфер BUFFER еще не заполнен, в текущую ячейку записывается значение входного сигнала, а на выход выдается «начальное» значение звена запаздывания:
OUT = IN_1
BUFFER [CNT] = IN,
где CNT - количество элементов в буфере;
|
если буфер BUFFER заполнен, из текущей ячейки считывается значение и выдается на выход блока, после чего в эту же ячейку записывается значение входного сигнала.
OUT = BUFFER [N]
BUFFER [N] = IN,
где N - текущий индекс в массиве-буфере.
|
Текущий индекс N в массиве-буфере вычисляется по формуле:
N = (N+1) MOD CNT
|