Добрый день!
Выпала свободная минутка и реализовал алгоритм управления, соответствующий Вашему запросу.
В приложении к посту алгоритм работы блока и проект, в котором он реализован.
Проект состоит из 2х блоков:
Функциональный блок Pump, предназначен для управления насосом и подсчета времени наработки насоса. Нужен для работы программы управления насосами.
Программа PumpControl_PRG предназначена для управления насосами в соответствии с Вашим алгоритмом.
и перечисления PUMP_CONTROL_ERRORS содержащего все возможные ошибки, которые могут возникнуть в процессе работы программы
Общее время наработки насосов хранится в энергонезависимой памяти.
Все, что Вам нужно:
1) Перенести в Ваш проект ФБ, программу и перечисление.
Сделать это можно как при помощи импорта\экспорта, так и при помощи простого копирования;
2) В Вашей основной программе вызывать программу PumpControl_PRG, предварительно передавая ей на входы состояния насосов и настройк, а так же подключить выходы программы к выходам ПЛК;
3) Тщательно протестировать программу на соответствие требуемому алгоритму работы.
Если возникнут вопросы\пожелания - пишите, помогу.
UPD: 12.10.2017 12:20
Устранил ошибку, при которой система не восстанавливалась после срабатывания ошибки PUMP_TOO_FEW_PUMPS.
UPD: 12.10.2017 16:40
Добавил описание внутренним переменным.
Устранил ошибку при которой насос мог отключиться т.к. проработал дольше времени, заданного оператором,
а в следующем цикле снова включиться т.к. у него минимальное время наработки. Что привело бы к ненужным "дерганиям" выхода ПЛК.
Описание в архиве.