Детектор массива

Детектор массива — компонент. Компонент “Детектор превышения порогов” предназначен для определения факта превышения пороговых значений, рассчитанных за некоторое время в прошлом, а также расчёта характеристик превышения.

Внешний вид компонента

Режим проектировщика Режим оператора
Детектор массива - Режим проектировщика Не имеет

Параметры:

Входные

  • Данные — входной массив очередных данных в виде массивов.
  • Пороги — входной массив пороговых значений.
  • Вкл/Выкл — служит для включения/выключения компонента.
  • Сброс — сброс текущих пороговых значений и начала расчёта новых.

Выходные

  • Порог — осуществляет вывод пороговых значений в виде массива.
  • Превышение — предназначен для вывода флага о наличии превышения порогов.
  • Событие — служит для вывода флага о наличии или отсутствии события.
  • Полосы — предназначен для вывода количества полос, в которых есть превышение пороговых значений.
  • Энергия — осуществляет вывод энергии сигнала в полосах, где наблюдается превышение.
  • Среднее — предназначен для вывода среднего арифметического значения энергии с момента превышения порога до выдачи сообщения о наличии события.
  • Обнаружение — служит для вывода текущего состояния компонента: накопление и расчёт пороговых значений или слежение за текущими значениями по порогам.

Настраиваемые свойства:

Общие свойства (окружение)

Частные свойства (в скобках значение, установленное по умолчанию):

  • ArrayNumbers (100) — установка количества входных массивов используемое для расчёта порогов.
  • Coefficient (2.000000) — установка типа усреднения при расчёте пороговых значений: максимум или среднее арифметическое.
  • ThresholdType (Максимальный) — установка коэффициента влияния дисперсии для расчёта пороговых значений.
  • WaitNumber (40) — установка количества превышений необходимых для уверенного определения события.
  • ResetNumber (6) — установка количества массивов без превышений необходимых для сброса события.
  • MinExcess (72692592) — установка количества превышений в полосах для выдачи импульса с контакта “Превышение” (в процентах).

Алгоритм работы компонента

Контакт “Вкл/Выкл” должен включать и выключать работу компонента. Когда компонент выключен, они игнорирует все входные данные кроме сигналов на себя и сигнала на контакт “Сброс”. Выходные контакты при выключенном компоненте тоже должны “молчать”. Текущее состояние внутренних переменных должно оставаться неизменным до включения компонента.

Контакт “Сброс” должен обнулить текущее значение порога, обнулить счётчик массивов. Контакт “Обнаружение” должен выдать единичный импульс FALSE.

Контакт “Данные” должен принимать входные массивы. Размер входных массивов должен определяться размером первого входящего массива. Следующие массивы должны иметь такой же размер или быть преобразованы (обрезаны или дополнены нулями).

Во время работы компонент может находиться в двух состояниях: накопление и обнаружение. Во время работы компонента в режиме накопления из всех входящих массивов должен вычисляться один расчётный массив согласно типу усреднения — либо как максимальное в полосах, либо как среднее арифметическое. Вне зависимости от типа усреднения, компонент должен считать дисперсию распределения значений в полосах. Массив пороговых значений должен непрерывно рассчитываться по формуле:

для типа усреднения “максимум”

ПОРОГ[i] = МАКСИМУМ[i] + КОЭФФИЦИЕНТСКО[i]

для типа усреднения “среднее”

ПОРОГ[i] = СРЕДНЕЕ[i] + КОЭФФИЦИЕНТСКО[i]

Контакт “Порог” должен постоянно выдавать вновь рассчитанный массив пороговых значений. Контакт “Событие” должен постоянно выдавать “FALSE”. Контакты “Полосы” и “Энергия” должны постоянно выдавать число “0”.

После накопления определённого количества массивов, указанного в свойстве компонента, компонент должен перейти в состояние обнаружения, а контакт “Обнаружение” должен выдать единичный импульс TRUE.

Во время работы в режиме обнаружения компонент должен каждый пришедший массив сравнивать с массивом пороговых значений. Если все элементы пришедшего массива не превышают пороговых значений, то с выхода “Превышение” должен быть выдан импульс FALSE, а с выходов “Полосы” и “Энергия” должно быть выдано число “0”. Если хоть в одном элементе было обнаружено превышение порога, то с контакта “Превышение” должен быть выдан импульс TRUE, с контакта “Полосы” должно быть выдано количество полос, в которых наблюдается превышение, с контакта “Энергия” должно быть выдано “энергетическое” значение превышения. “Энергетическое” значение вычисляется как отношение суммы квадратов значений пришедшего массива к сумме квадратов значений порогового массива, вычисленное только по полосам, в которых наблюдается превышение.

По состоянию контакта “Превышение” должно рассчитываться значение контакта “Событие”. Если на контакте “Превышение” появляется импульс TRUE, то компонент должен включить счётчик и считать входные массивы. Если счётчик превысит значение свойства “Время ожидания появления события”, то с выхода “Событие” необходимо подать импульс TRUE. Как только на контакте “Превышение” появится импульс FALSE и продлится в течении времени определённого свойством “Время прерывания события”, то с выхода “Событие” необходимо подать импульс FALSE.

После запуска счётчика, компонент должен суммировать значения энергии для входных массивов, которые превышают значение порогов в заданном числе полос. После выдачи импульса с контакта “Событие” компонент должен усреднить накопленное значение энергии и выдать его с контакта “Среднее”.

Изменение свойств во время работы компонента, то есть когда он включен, не допускается, кроме коэффициента превышения дисперсии. При изменении коэффициента превышения дисперсии массив пороговых значений немедленно пересчитывается и выдаётся на выход. Остальные свойства запоминаются и применяются только после очередного включения компонента.

Если на вход “Пороги” придёт массив с ненулевыми значениям, то компонент должен автоматически применить этот массив в качестве порогового для своей дальнейшей работы.Если в это время компонент находился в состоянии накопления, то он должен немедленно переключиться в состояние обнаружения. Изменение коэффициента влияния дисперсии не должно никак влиять на работу компонента. Если на вход “Пороги” придёт массив с нулевыми элементами, то компонент должен сбросить свой текущий массив порогов и перейти в режим накопления. Положительный импульс на входе “Сброс” также должен переводить компонент в режим накопления, вне зависимости от того сколько пороговых массивов было подано на вход компонента.

Алгоритм работы методов

  1. Метод должен сохранить значения последнего пришедшего массива и текущего порогового массива в файл DTU/
  2. Метод должен задавать число — счётчик числа массивов, которые придя на вход будут проигнорированы и никак на работу компонента не должны повлиять. Сброс компонента должен обнулить счётчик. При вызове метода с ненулевым значением с выхода “Обнаружение” должен быть отправлен импульс FALSE, сигнализирующий о том, что компонент не обрабатывает входные данные. При достижении 0 счётчиком с выхода “Обнаружение” должен быть отправлен импульс TRUE, сигнализирующий о начале обработки входных данных компонентом.

Примечание

Ско — средне-квадратичное отклонение рассчитывается через дисперсию по формуле:

Детектор массива - формула

Дисперсия случайной величины

ПримечаниеПример определения события:

Детектор массива - график

Программирование

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

Параметры:

Входные

  • Данные —значения входного массива, на который осуществляется ввод очередных данных в виде массивов.

Настраиваемые свойства:

Общие свойства (окружение)

Частные свойства (в скобках значение, установленное по умолчанию):

  • LONG ArrayNumbers — установка и чтение количества массивов необходимых для вычисления порога (число).
  • FLOAT Coefficient — установка и чтение коэффициента влияния дисперсии на пороговые значения (число).
  • BSTR ThresholdType — установка и чтение типа вычисления порогового значения: Максимальный; Средний (строка).
  • LONG WaitNumber — установка и чтение количества превышений необходимых для уверенного определения события (число).
  • LONG ResetNumber — установка и чтение количества массивов без превышений необходимых для сброса события (число).
  • LONG MinExcess — установка и чтение минимального количества превышений в полосах для выдачи импульса с контакта “Превышение” (в процентах) (число).

Методы:

  • void SaveArraysToFile(BSTR FileName) — сохранить текущие массивы в файл.
  • LONG SetToleranceNumber(LONG number) — задать количество пропускаемых входных массивов.

Пример

Проект в SCADA ZETView

Детектор массива - Пример

Данный компонент используется для создания различных проектов, в том числе таких как внешний модуль АЦП.

Результат работы проекта
Детектор массива - Результат работы проекта