попробуй это....
Код:
Блок не содержит энергонезависимых переменных (т.е. сам не является энергонезависимым), поэтому переключение между насосами происходит не по наименьшей наработке, а просто через равные промежутки времени.
Блок подходит для управления как тремя, так и двумя насосами, а также максимально просто расширяется до любого необходимого числа насосов, т.к. сам алгоритм переключения привязан не к конкретному числу, а к переменной N.
При возникновении аварии насос блокируется до принудительного сброса аварии.
Входы:
EN (BOOL) - запуск управлением насосами. По умолчанию = TRUE.
SW (BOOL) - принудительное переключение на следующий насос. Происходит по фронту сигнала.
PT (TIME) - период переключения насосов.
ET0 (TIME) - начальное время счета таймера. Необходимо для реализации энергонезависимого таймера.
MAIN (BYTE) - номер запускаемого после включения ПЛК насоса. По умолчанию = 1. Также может служить для энергонезависимой работы.
ALx (BOOL) - аварийный сигнал с насоса №x. Стоит таймер с задержкой активации в 0,5 секунды.
RSx (BOOL) - сигнал сброса аварии с насоса №x.
Выходы:
Px (BOOL) - запуск насоса №x.
ERRx (BOOL) - насос №x в аварийном состоянии. Либо имеется текущая авария, либо не сброшена старая.
CUR (BYTE) - номер текущего работающего насоса. Может использоваться для организации энергонезависимой работы.
ET (TIME) - отсчитанное на текущий момент таймером время.
энергонезависимая работа
Всё необходимое для такой работы реализовано в алгоритме. Для работы необходимо лишь задать пару RETAIN-переменных, либо в программе, где объявлен функциональный блок "PUMPS" (например в PLC_PRG), либо в области глобальных переменных, либо даже в области конфигурации Modbus (Slave). Это переменные i (номер текущего насоса) и et0 (время отсчитанное таймером):
Их необходимо привязать ко входам MAIN и ET0, и выходам CUR и ET соответственно (см. скриншот в начале поста). Таким образом, во время работы блока каждый цикл в наши энергонезависимые переменные будут записываться актуальные значения, и они сохраняться даже после пропадания питания. А в момент подачи питания в самом первом цикле они будут считаны функциональным блоком и работа возобновиться с работающего на момент сброса питания насоса и таймер будет считать с того же места, на котором остановился.
два насоса
Для работы только с двумя насосами необходимо просто-напросто оставить вход AL3 пустым. Функциональный блок при этом будет "думать", что третий насос находится всё время в аварии.