# Условный переход в независимой подпрограмме | Типовые задачи Предыдущий Следующий

## Общие сведения Наименование: DYN_IF_GOTO. Количество аргументов: 2 или 3. ## Примечание по входам/аргументам •порядок: «Условие», «Истинно», «Ложно»; •тип: «Условие» — логический, «Истинно» и «Ложно» — логические наименования алгоблоков подпрограммы; •признаки инверсии второго и третьего входа («Истинно», «Ложно») игнорируются; •третий аргумент («Ложно») можно не указывать — по умолчанию (если условие ложно) переход осуществляется на следующий алгоблок (без прекращения работы независимой подпрограммы на данном такте). ## Функционирование •если первый вход («Условие») равен логической единице, то данный алгоблок прекращает выполнение независимой подпрограммы, управление передается вызывающей подпрограмме, а на следующем такте вызываемая независимая подпрограмма продолжает работу со строки, логическое имя которой указано во втором аргументе («Истинно»); •если первый вход («Условие») равен логическому нулю, и у данного алгоблока указан третий аргумент («Ложно»), то данный алгоблок прекращает выполнение независимой подпрограммы, управление передается вызывающей подпрограмме, а на следующем такте вызываемая независимая подпрограмма продолжает работу со строки, логическое имя которой указано в третьем аргументе («Ложно»); •если первый вход («Условие») равен логическому нулю, и у данного алгоблока отсутствует третий аргумент, то работа продолжится со следующей строки подпрограммы; •если первый вход («Условие») имеет недостоверное значение или неинициализированное состояние, то работа продолжится со следующей строки подпрограммы. ## Пример использования // Пример // Вызываемая независимая подпрограмма START // Для каналов DO1.1 и DO1.2 // запускаем исключения B10 = EXCEPTION_RUN(DO1.1) B20 = EXCEPTION_RUN(DO1.2) // Если в данный момент DI5.1 включен // то подпрограмма прекращает работу B25 = DYN_IF_GOTO(DI5.1; B200) // DO1.1 и DO1.2 устанавливаются в единицу // на одну минуту (600 тактов) B30 = VALUE_FORCE(DO1.1; 1) B40 = VALUE_FORCE(DO1.2; 1) B50 = TIMEOUT(600) // DO1.1 и DO1.2 устанавливаются в нуль // на одну минуту (600 тактов) B60 = VALUE_FORCE(DO1.1; 0) B70 = VALUE_FORCE(DO1.2; 0) B80 = TIMEOUT(600) // Переход на проверку нужно ли остановиться B90 = DYN_GOTO(B25) // Для каналов DO1.1 и DO1.2 // прекращаем работу исключения B200 = EXCEPTION_STOP(DO1.1) B210 = EXCEPTION_STOP(DO1.2) // Основная подпрограмма (фрагмент) // Если DI1.1 становится равным 1, // запускается независимая подпрограмма START B500 = ... B510 = DYN_CALL(START; DI1.1) B520 = ... ## См. также Описание логической программы.