АБАК ПЛК
Руководство по настройке и программированию
×

Функциональные блоки для вычисления скользящего среднего

 
Функциональные блоки этой подгруппы предназначены для вычисления скользящего среднего. Подгруппа включает блоки для работы со следующими типами данных: целочисленными знаковыми числами (LINT), числами с плавающей точкой двойной точности (LREAL), числа формата времени (LTIME).
К этим блокам относятся:
  • avrgLint – вычисляет скользящее среднее для переменных знакового целочисленного типа размерностью до LINT.
  • avrgLreal – вычисляет скользящее среднее для переменных с плавающей точкой двойной точности размерностью до LREAL.
  • avrgLtime – вычисляет скользящее среднее для переменных временного типа размерностью до LTIME.
Все функциональные блоки данной подгруппы имеют идентичные по названию, но различные по типу данных входы и выходы.
Входы:
  • Val – (LINT, LREAL, LTIME) – актуальная точка на момент вызова экземпляра.
  • numPoints – (USINT) – количество точек, определяющее ширину окна скользящего среднего. Значение не должно превышать 100. В противном случае при вызове блок не будет выполнять вычисления.
  • Reset – (BOOL) – сигнал сброса внутренней статистики и повторной инициализации. Сигнал должен быть установлен извне однократно. Сброс внутренних переменных происходит в блоке сразу после его инициализации. Для однократной установки рекомендуется установить следующий сигнал в кодe, выполняемого однократно по условию/событию пользователя:
{ЭкземпляраБлока}.reset := TRUE;
Выходы:
  • avrgVal – (LINT, LREAL, LTIME) – выходное значение, представляющее собой скользящее среднее по заданному окну.
 
Принцип работы блоков
Входным параметром «numPoints» задается ширина окна для вычисления скользящего среднего.
Входная переменная «Val» содержит значение параметра, которое помещается в очередь. Длина очереди равна ширине окна скользящего среднего.
Работа блока состоит из двух частей.
Первая часть работает до тех пор, пока количество полученных отсчетов входного сигнала не достигнет значения, заданного параметром «numPoints». На данном этапе происходит суммирование значений на входе при каждом вызове экземпляра блока. Среднее значение получается делением данной суммы на количество набранных значений.
Вторая часть работает после заполнения окна скользящего среднего до заданной ширины. На данном этапе происходит удаление самого первого поступившего значения из очереди с вычетом его значения из общей суммы, и добавление в очередь значения со входа блока на момент вызова. Выходное значение вычисляется как отношение обновленной общей суммы к ширине окна «numPoints».
При инициализации входом «Reset» происходит сброс всех внутренних накопителей. Работа блока возобновляется начиная с первой части блока.
Онлайн помощь создана в Dr.Explain