Условный переход в независимой подпрограмме

Типовые задачи  Предыдущий  Следующий

Общие сведения

Наименование: 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 = ...

См. также

Описание логической программы.