Особенности применения операторов управления программой


 

С помощью операторов управления (control statements) пользователь может организовать разветвление программы, циклическое выполнение отдельных фрагментов программы и осуществлять переход в программе блока для выполнения другой ее части.

Язык программирования SCL поддерживает следующие операторы управления:

• IF – оператор для выполнения разветвления в программе по условию, которое проверяется в отношении к булевой переменной;

• CASE – оператор для выполнения разветвления в программе по условию, которое проверяется в отношении целой переменной или параметра типа INT;

• FOR – оператор для организации в программе циклов с переменной, которая является счетчиком циклов;

• WHILE – оператор для организации в программе циклов, которые инициируются при выполнении определенного условия;

• REPEAT – оператор для организации в программе циклов с завершением по условию;

• CONTINUE – оператор для завершения текущего прохода цикла в программе;

• EXIT – оператор для выхода из цикла в программе;

• GOTO – оператор для перехода в новую точку программы, указанную меткой;

• RETURN – оператор для выхода из программы блока.

Оператор IF

Оператор IF управляет выполнением той или другой части программы в зависимости от состояния булевой переменной. С помощью оператора IF пользователь может запрограммировать выполнение программы разными, обусловленными условиями, ветвями.

IF condition

THEN statements;

END_IF;

Здесь condition – это адрес или выражение с типом BOOL. Если condition имеет значение TRUE, то выполняются операторы после ключевого слова THEN. Если condition имеет значение FALSE, то выполняются операторы после ключевого слова END_IF. Ключевое слово END_IF завершает оператор IF.

IF condition

THEN statements1;

ELSE statements0;

END_IF;

В данном примере, как и в предыдущем, condition имеет значение TRUE или FALSE. Если condition имеет значение TRUE, то выполняются операторы после ключевого слова THEN. Если condition имеет значение FALSE, то выполняются операторы после ключевого слова ELSE.

IF condition1

THEN statements1;

ELSEIF condition2

THEN statements2;

ELSE statements0;

END_IF;

Можно использовать любое количество комбинаций ключевых слов ELSEIF ... THEN ... между ключевыми словами IF ... THEN ... и ELSE. Ключевое слово ELSE и следующие операторы не являются обязательными.

Пример:

IF Actual_value > Setpoint

THEN greater_than := TRUE;

less_than := FALSE;

equal_to := FALSE;

ELSEIF Actual_value < Setpoint

THEN greater_than := FALSE;

less_than := TRUE;

equal_to := FALSE;

ELSE greater_than := FALSE;

less_than := FALSE;

equal_to := TRUE;

END_IF;

В приведенном примере, если переменная Actual_value больше, чем переменная Setpoint, то выполняются операторы, которые идут после ключевого слова THEN. Если, наоборот, переменная Actual_value меньше, чем переменная Setpoint, то выполняются операторы, которые идут после ключевого слова ELSEIF. Если оба выражения сравнения не выполняются, то выполняются операторы после ключевого слова ELSE.

Оператор CASE

Оператор CASE позволяет выбрать для выполнения нужную последовательность операторов в программе в зависимости от значения какого-то параметра типа INT.

Общая структура программы с оператором CASE может иметь следующую форму:

CASE Selection OF

CONST1: statements1;

CONST2: statements2;

...

Constx: statementsx;

ELSE: statements0;

END_CASE;

В этом примере Selection – это адрес или выражение типа INT. Если Selection имеет значение CONST1, то выполняются операторы statements1. Если Selection имеет значение CONST2, то выполняется цепочка операторов statements2 и так далее. Если Selection имеет значение, которое находится за рамками списка значений, указанных для проверки, то выполняется цепочка операторов после ключевого слова ELSE. При этом цепочка операторов, начинающаяся с ключевого слова ELSE, не обязательна.

Список значений CONST1, CONST2 и т.д. состоит из целых (INT) констант. Для этих констант могут использоваться несколько вариантов форматов записи. В качестве константы-переключателя Constх могут быть указаны:

• одиночное целое число;

• диапазон целых чисел, например, 15..20;

• смесь разделенных запятыми отдельных целых чисел и диапазоне целых чисел, например, 21,25,31..33.

При этом каждое значение константы-переключателя Constх должно быть уникальным.

Пример.

Пусть значение, которое присваивается переменной Error_number, зависит от переменной ID. Тогда программа может выглядеть так:

CASE ID OF

0 : Error_number:= 0;

1,3,5 : Error_number:= ID + 128;

...

6..10 : Error_number:= ID;

ELSE : Error_number:= 16#7F;

END_CASE;

Оператор FOR

Оператор FOR применяется для организации циклов со счетчиком циклов. Выполнение внесенного в цикл фрагмента программы будет повторяться столь долго, сколько переменная (счетчик циклов) будет оставаться в указанном диапазоне значений.

Общая структура программы с оператором FOR может иметь следующую форму:

FOR i := limit1

TO limit2

BY step

DO statements;

END_FOR;

При обработке данного оператора начальное значение limit1 присваивается счетчику циклов "i". Переменная, назначенная счетчиком циклов, должна быть типа INT или DINT. Она должна иметь начальное и конечное значения, а также шаг изменения step.

После каждого прохода программы (цикла) счетчик цикла увеличивается на величину шага увеличения step, если шаг указан как положительное число, или уменьшается на величину шага step, если шаг указан как отрицательное число.

При программировании цикла строка BY step не является обязательной. Если такое условие для шага счетчика цикла отсутствует, то шаг (по умолчанию) принимается равным +1. Если величина переменной-счетчика цикла выходит за пределы указанного диапазона, то программа переходит к оператору, который стоит после ключевого слова END_FOR.

Оператор FOR может быть вложенным, то есть внутри цикла с оператором FOR можно запрограммировать другие циклы с оператором FOR, в которых как счетчики цикла используются другие переменные.

Внутри цикла с оператором FOR может быть запрограммирован переход к началу цикла (с использованием оператора управления CONTINUE) или полный выход из цикла для продолжения выполнения программы, начиная сразу же после ключевого слова END_FOR, (с использованием оператора управления EXIT).

Пусть, например, необходимо присвоить значение слов с PIW 128 по PIW 142 области периферии словам в области меркеров – с MW 128 по MW 142.

Программа этой процедуры будет иметь такой вид:

FOR i:= 128 TO 142 BY 2 DO

MW[i]:= PIW[i];

END_FOR;

Оператор WHILE

Оператор WHILE служит для организации циклов, выполнение которых длится все время, пока выполняется определенное условие.

Общая структура программы с оператором WHILE может иметь следующую форму:

WHILE Condition DO

Statements;

END_WHILE;

В этом примере Condition – это адрес или выражение типа BOOL. Пока выполняется определенное условие, то есть, пока Condition = TRUE, будут циклически выполняться выражения, представленные операторами Statements.

Перед каждым проходом выполняется проверка условия Condition. Если условие не выполняется (Condition = FALSE), программа переходит к оператору, расположенного после ключевого слова END_WHILE. Такой переход возможен даже без прохода программы цикла. Операторы Statements при этом ни разу не будут выполнены.

Оператор WHILE может быть вложенным. При этом внутри одного цикла с оператором WHILE могут размещаться другие циклы с оператором WHILE.

Внутри цикла с использованием оператора WHILE может быть запрограммирован переход к началу цикла с использованием оператора управления CONTINUE или полный выход из цикла с использованием оператора управления EXIT. После выхода программа будет выполнять оператор, расположенный после ключевого слова END_WHILE.

Оператор REPEAT

Оператор REPEAT служит для организации циклов, выполнение которых длится все время, пока не встретится условие завершения обработки цикла.

Общая структура программы с оператором REPEAT может иметь следующую форму:

REPEAT

Statements;

UNTIL Condition

END_REPEAT;

В этом примере Condition – это адрес или выражения типа BOOL. Пока не выполняется определенное условие, то есть, пока Condition = FALSE, будут циклически выполняться выражения Statements.

После каждого прохода цикла выполняется проверка условия Condition. Если условие выполняется (Condition = TRUE), то цикл далее не обрабатывается и выполнение программы будет продолжено после ключевого слова END_REPEAT.

Таким образом, программа цикла будет обработана, по крайней мере, один раз, даже если при первом проходе цикла выполняется условие завершения его обработки.

Оператор REPEAT может быть вложенным. При этом внутри одного цикла с оператором REPEAT могут размещаться другие циклы с оператором REPEAT.

Внутри цикла с использованием оператора REPEAT может быть запрограммирован переход к началу цикла с использованием оператора управления CONTINUE или полный выход из цикла для продолжения выполнения программы, начиная сразу же после ключевого слова END_REPEAT (с использованием оператора управления EXIT).

Пусть, например, необходимо вызвать системную функцию SFC 25 COMPRESS в программе перезапуска, пока не будет завершено "сжатие" памяти пользователя.

REPEAT

SFC_ERROR := COMPRESS(

BUSY := busy,

DONE := done);

UNTIL done

END_REPEAT;

Оператор CONTINUE

Оператор CONTINUE служит для завершения текущего прохода цикла в программе, организованной с помощью операторов FOR, WHILE или REPEAT.

После выполнения оператора CONTINUE в программе производится одно из следующих действий:

• если цикл организован с помощью операторов REPEAT или WHILE, проверяется условие для выполнения следующего прохода цикла;

• если цикл организован с оператором FOR, проводится изменение счетчика цикла на величину шага увеличения и проверяется условие – находится ли переменная счетчика циклов в допустимых для нее границах.

Пусть, например, необходимо установить меркеры с помощью двух вложенных циклов с использованием оператора FOR. Установка бит должна начинаться с меркера M 0.3. Условие завершения цикла формулируется при этом таким способом: если байтовый адрес (i) равняется 0, а битовый адрес (k) меньше 2, операторы тела внутреннего цикла FOR не выполняются.

Программа:

FOR i:= 0 TO 2 DO

FOR k:= 0 TO 7 DO

IF (k<2 & i=0) THEN CONTINUE;

END_IF;

M[i,k]:= TRUE;

END_FOR;

END_FOR;

Оператор EXIT

Оператор EXIT служит для полного завершения обработки цикла, организованного с помощью операторов FOR, WHILE или REPEAT. При этом выход из цикла с оператором EXIT не зависит от выполнения условий, которые проверяются в цикле, и может выполняться из любой точки цикла. При выходе из цикла с оператором EXIT программа продолжает выполняться сразу же после ключевых слов END_FOR, END_WHILE или END_REPEAT.

Выход из цикла с оператором EXIT осуществляется немедленно из точки программы цикла, где этот оператор встретился.

Пример:

Пусть, необходимо установить меркеры с помощью двух вложенных циклов с использованием оператора FOR. Если байтовый адрес (i) равняется 2, а битовый адрес (k) больше 5, то выполнение внутреннего цикла FOR перерывается. Установка бит должна заканчиваться на меркере M 2.5.

FOR i:= 0 TO 2 DO

FOR k:= 0 TO 7 DO

IF (k=2 & i>5) THEN EXIT;

END_IF;

M[i,k]:= TRUE;

END_FOR;

END_FOR;

В данном примере выполнение цикла FOR прекращается при определенном условии для счетчика цикла k с помощью оператора EXIT.

Оператор RETURN

Оператор RETURN служит для безусловного выхода из текущего блока и перехода в основную программу. При этом оператор RETURN пересылает состояние переменной OK на выход ENO блока, который завершается с ним.

Пример:

IF Error <> 0 THEN RETURN;

END_IF;

 




Дата добавления: 2016-12-09; просмотров: 3420;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.022 сек.