Лекция: Пустое выражение
Пустое выражение состоит из точки с запятой «;». Для точки с запятой транслятор не генерирует никакого кода. Если случайно поставить лишнюю «;», это не вызовет ошибки. Единственное осмысленное применение пустого выражения — это обеспечение правильности языковых конструкций. Например, может потребоваться оттранслировать проект, содержащий еще не реализованный POU. Для корректной трансляции достаточно написать в теле POU один пустой оператор. Еще один пример, где пустой оператор оказывается весьма кстати, это условие IF, не содержащее раздел THEN:
IF x = Threshold THEN
; (*все хорошо*)
ELSIF x > Threshold THEN
bMarker := bMarker — 1; (*шаг вниз*)
ELSE
bMarker := bMarker + 1; (*шаг вверх*)
END_IF; (*лишняя; *)
Оператор выбора IF
Оператор выбора позволяет выполнить различные группы выражений в зависимости от условий, определенных логическими выражениями. Полный синтаксис оператора IF (если) выглядит так:
IF <логическое выражение IF>
THEN <выражения if>
[
ELSIF <логическое выражение ELSEIF 1>
THEN
< выражения ELSEIF 1> ;
…
ELSIF <логическое выражение ELSEIF n>
THEN
< выражения ELSEIF n> ;
ELSE
< выражения ELSE> ;
]
END_IF
Если <логическое выражение IF> ИСТИНА, то выполняются выражения первой группы — <выражения IF>. Прочие выражения пропускаются, альтернативные условия не проверяются.
Часть конструкции в квадратных скобках является необязательной и может отсутствовать.
Если <логическое выражение IF> ЛОЖЬ, то одно за другим проверяются условия ELSIF. Первое истинное условие приведет к выполнению соответствующей группы выражений. Прочие условия ELSIF анализироваться не будут. Групп ELSIF может быть несколько или не быть совсем.
Если все логические выражения дали ложный результат, то выполняются выражения группы ELSE, если она есть. Если группы ELSE нет, то не выполняется ничего.
В простейшем случае оператор IF содержит только одно условие:
IF bReset THEN
iVar1 := 1; iVar2 := 0;
END_IF
На первый взгляд конструкция IF с несколькими группами выглядит сложной, но на самом деле оказывается достаточно выразительной:
IF bReset THEN
iVar1 := 1;
ELSIF byLeft < 16 THEN
iVar1 := 2;
ELSIF byLeft < 32 THEN
iVar3 := 3;
ELSIF byLeft < 64 THEN
iVar1 := 4;
ELSE bReset := TRUE;
END IF