MetaKit Руководство по компонентам

Cascade — рабочие и резервные агрегаты

Cascade управляет группой насосов, котлов или другого однотипного оборудования: выбирает, кому работать, а кому оставаться в резерве. Если одного агрегата не хватает, он добавляет следующий. Если работающий агрегат вышел из строя, выбирает исправный резервный.

Чтобы оборудование изнашивалось равномернее, каскад учитывает наработку и может периодически менять рабочий агрегат.

Состав и связи

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

Для каждого участника нужен CascadeUnit — отдельный или уже встроенный в готовый узел. Cascade выбирает агрегат; его пуск и защиты выполняет компонент оборудования.

Первое подключение

Заполняйте пример в таблице «Параметры» (Params) добавленного компонента. Как добавить компонент и где искать настройки.

В группе K3 два насоса: K31 и K32. Один должен работать, второй — ждать в резерве. При аварии рабочего насоса нужно включить резервный.

У каждого насоса уже должны быть Engine и CascadeUnit. Engine управляет двигателем, а CascadeUnit передаёт его состояние каскаду и возвращает команду пуска. Подключение одного насоса показано в описании CascadeUnit.

1. Укажите насосы группы

Добавьте Cascade и заполните параметры. bGroupDemand — команда включения всей группы: TRUE — насосы нужны, FALSE — остановить автоматическую работу группы.

Параметр Значение для примера
CasId K3
CasComment Группа циркуляционных насосов
CasParent CabinetController_Inst
CasEn bGroupDemand
CasPV 0.0
CasPVErr false
CasUnitId1 K31
CasUnitId2 K32
CasUnitId3 — CasUnitId16 Пусто

Места 3–16 оставьте пустыми, удалив _ID_, если оно там есть. Первый насос получит команду out_Unit1_bCmd, второй — out_Unit2_bCmd.

2. Задайте один рабочий насос

Минимальное и максимальное количество установите равными 1. Тогда каскад будет выбирать один насос независимо от давления.

Настройка Значение для примера Назначение
Conf.K3_Cascade_iWorkCount 1 Один обязательный рабочий насос
Conf.K3_Cascade_iMaxWorkCount 1 Не более одного подключённого насоса
Conf.K3_Cascade_fSP 0.0 В этом примере измерение не используется
Conf.K3_Cascade_fHys 0.0 В этом примере измерение не используется
Conf.K3_Cascade_diConnectionDelay 5 Задержка обычного подключения, с
Conf.K3_Cascade_diDisconnectionDelay 5 Задержка обычного отключения, с
Conf.K3_Cascade_bPowerControlEnable false Выбор без проверки мощности
Conf.K3_Cascade_diSwitchPeriod 24 Проверка необходимости чередования через 24 ч

3. Как будет работать группа

После включения bGroupDemand каскад выберет исправный доступный насос с меньшей наработкой. Первый пуск выполняется сразу, без ожидания задержки подключения. Второй насос останется в резерве.

Если рабочий насос станет недоступен или сообщит об аварии, его команда пуска выключится. При наличии готового резерва каскад включит другой насос.

При bGroupDemand = FALSE обе автоматические команды пуска выключаются. Вручную насосами по-прежнему управляют через Engine.

Подробное подключение насосов

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

Что CascadeUnit получает от каждого насоса

Параметр CascadeUnit Насос K31 Насос K32
CasUnitId K31 K32
CasUnitComment Насос 1 Насос 2
CasUnitParent CabinetController_Inst CabinetController_Inst
CasUnitEn K31_Engine_Inst.out_bEnableAutoControl K32_Engine_Inst.out_bEnableAutoControl
CasUnitMode K31_Engine_Inst.out_iMode = ENGINEMODEAUTO K32_Engine_Inst.out_iMode = ENGINEMODEAUTO
CasUnitState K31_Engine_Inst.out_iState K32_Engine_Inst.out_iState
CasUnitStateBool K31_Engine_Inst.out_bState K32_Engine_Inst.out_bState
CasUnitFault K31_Engine_Inst.out_bFault K32_Engine_Inst.out_bFault
CasUnitWorktime K31_Engine_Inst.out_diWorktime K32_Engine_Inst.out_diWorktime
CasUnitPower 0.0 0.0
CasUnitStartCmd K3_Cascade_Inst.out_Unit1_bCmd K3_Cascade_Inst.out_Unit2_bCmd

CasUnitEn получает от Engine разрешение автоматической работы. Поэтому каскад не выберет насос, который переведён в ручной режим или заблокирован. CasUnitMode отдельно сообщает о режиме для отображения; одним этим полем готовность насоса не задаётся.

Как команда доходит до двигателя

Параметр Engine Насос K31 Насос K32
EngParent K31_CascadeUnit_Inst K32_CascadeUnit_Inst
EngStartCmd K31_CascadeUnit_Inst.out_bStart K32_CascadeUnit_Inst.out_bStart
EngStopCmd NOT K31_CascadeUnit_Inst.out_bStart NOT K32_CascadeUnit_Inst.out_bStart

Остальные подключения двигателя описаны в руководстве Engine. Команда от Cascade приходит в CascadeUnit, затем в Engine. Обратно Engine передаёт состояние и аварию.

Указать насос в списке Cascade недостаточно: нужно также подключить его команду пуска, как показано в таблицах.

Подключение дополнительных агрегатов по измерению

Чтобы менять число насосов по давлению, задайте минимум 1, максимум 2 и подключите измерение:

Параметр или настройка Значение для примера
CasPV PT101_SensFilter_Inst.out_fY
CasPVErr PT101_Sensor_Inst.out_bError
Conf.K3_Cascade_iWorkCount 1
Conf.K3_Cascade_iMaxWorkCount 2
Conf.K3_Cascade_fSP 4.5
Conf.K3_Cascade_fHys 0.2

Sensor PT101 должен показывать давление в барах. Если оно упало ниже 4,3 бар и не восстановилось за время задержки, каскад добавит второй насос. Если давление поднялось выше 4,7 бар и сохраняется выше этой границы в течение задержки отключения, один насос будет отключён. Между этими границами число насосов не меняется, пока оно находится в заданных пределах.

Правила изменения количества

Состояние группы Действие
Подключено меньше минимума Добавить агрегат независимо от измерения
Подключено меньше максимума и CasPV < fSP − fHys Добавить агрегат
Подключено больше максимума Отключить агрегат независимо от измерения
Подключено больше минимума и CasPV > fSP + fHys Отключить агрегат
Количество в пределах, измерение равно границе Измерение не создаёт нового запроса

При обычном изменении нагрузки насосы включаются и выключаются по одному, с заданной задержкой. Минимум и максимум относятся к числу команд пуска. Если исправных доступных насосов не хватает, обеспечить минимум не получится.

Этот компонент добавляет агрегат при снижении измерения. Например, так можно добавлять насос при падении давления. Если в вашем процессе агрегат нужно добавлять при росте измерения, напрямую такая схема не подойдёт: для CasPV потребуется другой расчёт в программе.

Задавайте 0 ≤ iWorkCount ≤ iMaxWorkCount ≤ количество участников, гистерезис — неотрицательный. Для постоянного количества достаточно сделать минимум равным максимуму и оставить CasPV, fSP, fHys равными нулю.

Выбор агрегата и чередование

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

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

Через время diSwitchPeriod каскад сравнивает наработку включённых агрегатов с резервными. Замена имеет смысл, если готовый резерв работал меньше:

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

Период задаётся в часах. Значение 0 или отрицательное отключает периодическое чередование. Выход CasParent.out_bWorktimeReset начинает отсчёт чередования заново.

При замене прежний агрегат получает останов сразу. Каскад не ждёт, пока резервный подтвердит успешный пуск.

Дополнительный контроль мощности

По умолчанию контроль мощности выключен. Если включить bPowerControlEnable, каскад дополнительно проверяет мощность текущего основного агрегата, которому выдана команда:

Действие Дополнительное условие
Подключение следующего агрегата Мощность основного не ниже fPowerHiLimit
Отключение основного агрегата Мощность основного не выше fPowerLoLimit

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

Укажите в CasUnitPower, по какой величине оценивать нагрузку. Например, можно передавать частоту ПЧ в герцах. Тогда и нижний, и верхний пороги задаются в герцах. У всех агрегатов должна использоваться одна и та же шкала.

Для первого пуска ждать задержку и достижения мощности не требуется. Так же быстро каскад добавляет замену после аварии или потери готовности работающего основного агрегата. Периодическая замена по наработке тоже выполняется без проверки мощности.

Отключение группы и ошибки

Если выключить CasEn или включить ошибку измерения CasPVErr, каскад выключит все свои команды пуска и сбросит отсчёт времени. После восстановления разрешения он снова выберет и включит нужные агрегаты.

При ошибке датчика каскад прекращает автоматическую работу всей группы — даже поддержание минимального числа агрегатов. Если датчик в этой группе не используется, оставьте CasPVErr = false.

Если неисправен только один агрегат, снимается его команда. Пока он не готов, каскад его не выбирает. Сбрасывать аварию нужно в компоненте самого оборудования; отдельного сброса аварий у Cascade нет.

От родителя Cascade получает только команду начать отсчёт чередования заново. Группа включается через CasEn. Состояние каждого насоса — его режим, питание и авария — поступает через CascadeUnit.

Подключено и работает — разные показатели

У группы есть два разных счётчика. out_iConnectedCount показывает, скольким агрегатам дана команда пуска. out_iWorkingCount — сколько агрегатов уже подтвердили работу. Например, команда насосу уже выдана, но он ещё разгоняется: первый счётчик его учёл, второй ещё нет. Успешный запуск проверяет Engine.

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

Основной агрегат может быть выбран заранее, даже пока группа выключена. Поэтому признак «Основной» сам по себе не означает, что насос получил команду пуска.

Параметры компонента — Params

Параметр По умолчанию Назначение
$Cas Каскад Название группы параметров
CasId _ID_ ID группы. Для K3 создаётся экземпляр K3_Cascade_Inst
CasComment Комментарий Название группы оборудования
CasParent CabinetController_Inst Родитель, предоставляющий out_bWorktimeReset для сброса периода чередования
CasEn true Общее разрешение работы каскада
CasPV 0.0 Измерение процесса или вычисляемое выражение REAL
CasPVErr false Ошибка измерения: TRUE запрещает работу каскада
CasConf Пусто ID набора настроек. Если пусто, используется CasId
CasConfComment Пусто Название набора настроек. Если пусто, комментарий составляется из CasComment и $Cas

Участники

Параметр По умолчанию Назначение
CasUnitId1 _ID_ ID участника на месте 1; команда out_Unit1_bCmd
CasUnitId2 _ID_ ID участника на месте 2; команда out_Unit2_bCmd
CasUnitId3 _ID_ ID участника на месте 3; команда out_Unit3_bCmd
CasUnitId4 _ID_ ID участника на месте 4; команда out_Unit4_bCmd
CasUnitId5 — CasUnitId16 Пусто ID участников на местах 5–16; команды с соответствующим номером

Каждый указанный ID должен соответствовать существующему экземпляру <ID>_CascadeUnit_Inst. Например, CasUnitId1 = K31 подключает K31_CascadeUnit_Inst. Пустое место не подключается. Один агрегат указывайте только на одном месте.

Настройки во время работы — Conf

Полные имена приведены для CasId = K3 и пустого CasConf. В таблице указаны начальные значения компонента; значения примера задаются отдельно.

Настройка Тип Начальное значение Назначение
Conf.K3_Cascade_iWorkCount INT 1 Минимальное число подключённых агрегатов
Conf.K3_Cascade_iMaxWorkCount INT 1 Максимальное число подключённых агрегатов
Conf.K3_Cascade_fSP REAL 0.0 Уставка изменения состава, в единицах CasPV
Conf.K3_Cascade_fHys REAL 0.0 Отклонение от уставки до каждой границы изменения состава, в единицах CasPV
Conf.K3_Cascade_diConnectionDelay DINT 1 Выдержка обычного подключения, с
Conf.K3_Cascade_diDisconnectionDelay DINT 1 Выдержка обычного отключения, с
Conf.K3_Cascade_bPowerControlEnable BOOL false Дополнительная проверка мощности основного агрегата при изменении количества
Conf.K3_Cascade_fPowerLoLimit REAL 0.0 Нижний порог мощности для отключения; в единицах CasUnitPower
Conf.K3_Cascade_fPowerHiLimit REAL 0.0 Верхний порог мощности для подключения; в единицах CasUnitPower
Conf.K3_Cascade_diSwitchPeriod DINT 36 Период чередования по наработке, ч; неположительное значение отключает чередование

Нулевые или отрицательные задержки подключения и отключения означают отсутствие соответствующей выдержки.

При одинаковом CasConf несколько групп используют общий набор всех перечисленных настроек. Например, при CasConf = PumpGroup минимум называется Conf.PumpGroup_Cascade_iWorkCount, уставка — Conf.PumpGroup_Cascade_fSP. Состав, состояния и таймеры каждой группы остаются собственными.

Выходы компонента

Команды участникам

Результат для примера Тип Назначение
K3_Cascade_Inst.out_Unit1_bCmd BOOL Запрос работы насоса K31, указанного в CasUnitId1
K3_Cascade_Inst.out_Unit2_bCmd BOOL Запрос работы насоса K32, указанного в CasUnitId2
K3_Cascade_Inst.out_Unit1_bMaster BOOL Насос K31 выбран основным
K3_Cascade_Inst.out_Unit2_bMaster BOOL Насос K32 выбран основным

Для каждого места от 1 до 16 имеются отдельные out_UnitN_bCmd и out_UnitN_bMaster; N заменяется номером места. Например, команда последнего места — K3_Cascade_Inst.out_Unit16_bCmd.

Состояние группы

Результат для примера Тип Назначение
K3_Cascade_Inst.out_iReadyCount INT Число доступных исправных участников, включая уже подключённых
K3_Cascade_Inst.out_iConnectedCount INT Число участников, которым выдана команда работы
K3_Cascade_Inst.out_iWorkingCount INT Число участников с сигналом фактической работы
K3_Cascade_Inst.out_iMinWorkTime INT Индекс свободного готового участника с наименьшей наработкой, исключая основного
K3_Cascade_Inst.out_iMaxWorkTime INT Индекс подключённого готового участника с наибольшей наработкой, исключая основного
K3_Cascade_Inst.out_iCurMaster INT Индекс текущего основного участника

Индексы начинаются с 0: значение 0 соответствует CasUnitId1, значение 1 — CasUnitId2, значение 15 — CasUnitId16. Значение −1 означает, что подходящего участника нет. Поля out_iMinWorkTime и out_iMaxWorkTime содержат именно индексы, а не часы наработки.