А_МУР писал(а):
Здравствуйте Уважаемые Коллеги!
Выкладываю файл функционального блока под СПК 107 (ОВЕН)
Попробовал перерисовать, по-моему, так будет понятнее.
Да, я тут сделал одно действие "найти рабочий насос", но основная суть не в этом.
Я отметил флажками те действия, при которых будет "возврат управления в ПЛК". По сути, здесь это получились "паузы" (как самостоятельные, так и в циклах ожидания).
Например: основная схема -- №1. Она ждёт пока появится команда на запуск. Если команды нет, то возвращаем управление, и выполняем перепроверку уже на следующей итерации цикла.
Если пришла команда на запуск, то запускаем параллельный процесс "запуск насоса".
Основная схема при этом запускает процесс, доходит до №9 проверки "пора ли выключать" и там возвращает управление.
Схема "запуск насоса" проходится по действиям 14-23 (выбирает насос, подаёт команду на его запуск) и засыпает на 10 секунд. Т.е. она возвращает управление в ПЛК, и продолжает выполнение (передвигается к выбору 26) только через 10 секунд.
Там оно проверяет "есть ли давление". Если давление есть (насос работает), то просто возвращаем управление. Если давления нет (насос сломался), то отрабатываем аварию, запускаем новый насос и возвращаем управление либо на 24-ом, либо на 19-ом шаге.
Как только на основной схеме 9. "Есть пуск?" продвинется дальше, произойдёт останов параллельной схемы 2 и потом выключение насосов действием 11.
С одной стороны выглядит более-менее, а с другой мне не нравятся 3 вещи:
1) Если рисовать "цикл ожидания" без "паузы в 0 сек", то визуально тяжело отличить "обычный цикл" и "цикл ожидания". А сама икона ожидания с 0 секундами захламляет схему. С другой стороны, она, конечно, явно подчёркивает место, где схема может вернуть управление.
2) Циклы ожидания ждут бесконечно долго.
2.1) Например, момент ~24, когда "появилось ли давление после запуска насоса". Сейчас это сделано "паузой в 10 секунд". Да, пауза хорошо обозначает суть, но вместе с тем, если во время этой паузы пропадёт команда на пуск насосов, то пауза не даст на это среагировать. Из-за этого я вынес обработку "останова" в 1-ую схему, которая просто на корню режет процесс запуска, и останавливает насосы. В результате, либо схема 1 должна останавливать вообще все насосы, либо как-то из 2-ой выяснять последний запущенный.
2.2) Если давление "пропадёт" кратковременно, то схема подумает, что это авария насоса. Более надёжным критерием было бы что-то в духе "давление отсутствует менее 5-и секунд из 10-и", и это "на паузах" по-моему, тяжело выразить.
3) По схеме непонятно является ли процесс "запуск насоса" (схема 2) единственным, или в системе может быть запущенно сразу несколько таких процессов, например, для каждого насоса. Вполне возможно, что понадобятся оба варианта, а из картинки это непонятно.