AstraRegul
Релиз 2024.08.31.00
×

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