5.3.3.7.2.1. Алгоритм

 
 
Алгоритм позволяет:
осуществлять управление шаговой программой, состоящей из последовательно соединенных алгоритмов STEP;
проверять условия выполнения шага и в зависимости от их наличия, осуществлять переход на следующий шаг;
исключать шаг из выполнения;
осуществлять ветвление шаговой программы, в зависимости от условий завершения шага.
 
 
Если шаг не активен (ACTIVE = FALSE), он ничего не делает, кроме проверки входа START.
 
Если неактивный шаг получает команду START, он становится активным, формирует команду CMD и начинает проверку выполнения условий. Активный шаг команду START игнорирует.
 
Если при активации шага условия его завершения уже выполнены, шаг сразу же теряет активность, иначе начинается отсчет времени ожидания выполнения условий. Если по истечении времени ожидания DELAY условия завершения не выполнены, шаг выдает на выходе команду TIMEOUT_CMD и становится неактивным. Если все подключенные условия завершения шага были выполнены, шаг выдает на выходе команду OK_CMD и становится неактивным.
 
Если активный шаг получает команду сброса RST = TRUE, он становится неактивным, не формируя никаких выходных команд. Неактивный шаг команду «Сброс» игнорирует.
 
Если у активного шага значение входа EXC = TRUE, шаг формирует выходную команду OK_CMD и становится неактивным.

Проверка условий

Активный шаг в каждом цикле выполняет проверку условий. Чтобы шаг завершился успехом, необходимо, чтобы для каждого подключенного условия ENDCND значение OK было равно TRUE. Чтобы шаг завершился провалом, достаточно, чтобы для одного подключенного условия ENDCND значение FAIL было равно TRUE. Также необходимым условием успешного завершения шага является приход команд на все подключенные входы командных условий.
 
Перед проверкой условий взводим флаг "Все ОК". Проверка условий выполняется сверху вниз, вначале входы условий завершения шага ENDCND [i], затем входы командных условий CMDCND [i].
 
Для каждого входа ENDCND [i] проверка выполняется в следующем порядке:
  • Если качество условия ENDCND [i].QUALITY < 6, сбрасываем флаг "Все ОК" и переходим к следующему условию.
  • Если ENDCND[i].FAIL= TRUE, прерываем проверку, формируем выходную команду FAIL_CMD, записываем номер условия, провалившего проверку FAIL_N = i и делаем шаг неактивным.
  • Если ENDCND[i].OK = TRUE, переходим к следующему условию.
  • Если ни одно из предыдущих пунктов не выполнился, сбрасываем флаг "Все ОК" и переходим к следующему условию.
 
Если все условия завершения шага ENDCND [i] выполнены и флаг "Все ОК" взведен, переходим к проверке командных условий:
  • Если CMDCND [i] = FALSE, сбрасываем флаг "Все ОК" и прерываем проверку.
  • Если CMDCND [i] = TRUE, переходим к следующему командному условию.
 
Если флаг "Все ОК" взведен, формируем выходную команду OK_CMD и делаем шаг неактивным. Если флажок "Все ОК" не взведен, проверяем истечение времени ожидания. Если время истекло, формируем выходную команду TIMEOUT_CMD и делаем шаг неактивным. Если время не истекло, оставляем шаг активным.