****************** Операторы языка ST ****************** В этом разделе описаны основные операторы языка ST, используемые для выполнения арифметических, логических, побитовых операций, сравнений и присваивания значений. .. _arithmetic-operators: Арифметические операторы ======================== Арифметические операторы используются для выполнения математических операций над числовыми значениями. .. list-table:: :header-rows: 1 :widths: 10, 80 * - Оператор - Описание * - ``+`` - Сложение * - ``-`` - Вычитание * - ``*`` - Умножение * - ``/`` - Деление * - ``MOD`` - Остаток от целочисленного деления .. note:: Оператор ``MOD`` работает только с целочисленными беззнаковыми типами данных. **Примеры:** .. code-table:: VAR a : UINT := 10; b : UINT := 3; result : UINT; END_VAR result := a + b; // result = 13 result := a - b; // result = 7 result := a * b; // result = 30 result := a / b; // result = 3 (целочисленное деление) result := a MOD b; // result = 1 (остаток) .. _comparison-operators: Операторы сравнения =================== Операторы сравнения используются для сравнения двух значений. Результатом операции всегда является значение типа ``BOOL`` (``TRUE`` или ``FALSE``). .. list-table:: :header-rows: 1 :widths: 10, 80 * - Оператор - Описание * - ``=`` - Равно * - ``<>`` - Не равно * - ``<`` - Меньше * - ``>`` - Больше * - ``<=`` - Меньше или равно * - ``>=`` - Больше или равно .. note:: Операнды, участвующие в сравнении, должны быть совместимых типов. **Примеры:** .. code-table:: VAR x : INT := 10; y : INT := 20; is_equal : BOOL; is_less : BOOL; is_greater : BOOL; END_VAR is_equal := (x = y); // is_equal = FALSE is_less := (x < y); // is_less = TRUE is_greater := (x >= y); // is_greater = FALSE .. _logical-operators: Логические операторы ==================== Логические операторы используются для работы с булевыми значениями (тип ``BOOL``). .. list-table:: :header-rows: 1 :widths: 15, 75 * - Оператор - Описание * - ``AND`` - Логическое И * - ``OR`` - Логическое ИЛИ * - ``XOR`` - Логическое Исключающее ИЛИ * - ``NOT`` - Логическое Отрицание **Примеры:** .. code-table:: VAR in1 : BOOL := TRUE; in2 : BOOL := FALSE; result : BOOL; END_VAR result := in1 AND in2; // result = FALSE result := in1 OR in2; // result = TRUE result := in1 XOR in2; // result = TRUE result := NOT in1; // result = FALSE .. _bitwise-operators: Побитовые операторы =================== Побитовые операторы выполняют операции на уровне отдельных битов целочисленных значений. .. list-table:: :header-rows: 1 :widths: 15, 75 * - Оператор - Описание * - ``AND`` - Побитовое И * - ``OR`` - Побитовое ИЛИ * - ``XOR`` - Побитовое Исключающее ИЛИ * - ``NOT`` - Побитовое Отрицание **Примеры:** .. code-table:: VAR a : BYTE := 2#00001111; // 15 в двоичной b : BYTE := 2#00110011; // 51 в двоичной result : BYTE; END_VAR result := a AND b; // result = 2#00000011 (3) result := a OR b; // result = 2#00111111 (63) result := a XOR b; // result = 2#00111100 (60) result := NOT a; // result = 2#11110000 (240) .. note:: * Для операций ``AND``, ``OR``, ``XOR``, ``NOT``: * Если оба операнда типа ``BOOL``, выполняется логическая операция. Результат типа ``BOOL``. * Если оба операнда целочисленные (например, ``INT``, ``DINT``, ``WORD``, ``DWORD``), выполняется побитовая операция. Результат соответствующего целочисленного типа. * Смешивание типов ``BOOL`` и целочисленных типов может привести к ошибке компиляции. .. _assignment-operator: Оператор присваивания ===================== Оператор присваивания (``:=``) используется для присвоения значения выражения, находящегося в правой части, переменной, находящейся в левой части. .. code-table:: variable_name := expression; **Примеры:** .. code-table:: VAR myInt : INT; myBool : BOOL; inputValue : DINT; END_VAR myInt := 42; // Присваивание константы myInt := myInt + 10; // Присваивание результата арифметического выражения myBool := (myInt > 50); // Присваивание результата выражения сравнения .. note:: Тип выражения справа от ``:=`` должен быть совместим с типом переменной слева. .. _conditional-statements: Условные операторы ================== Условные операторы позволяют выполнять различные блоки кода в зависимости от условий. **IF** - Условный оператор Выполняет блок кода в зависимости от истинности условия. .. code-table:: IF condition1 THEN statements_block1; ELSIF condition2 THEN statements_block2; ELSE default_statements_block; END_IF; **Пример:** .. code-table:: VAR value : INT := 50; output : BOOL; END_VAR IF value > 25 THEN output := TRUE; ELSE output := FALSE; END_IF; Циклы ===== Циклы позволяют выполнять блок кода многократно. .. _while-loop: **WHILE** - Цикл с предусловием =============================== Выполняет блок кода, пока условие истинно. .. code-table:: WHILE condition DO statements_block; END_WHILE; **Пример:** .. code-table:: VAR counter : INT := 0; sum : INT := 0; END_VAR WHILE counter < 5 DO counter := counter + 1; sum := sum + counter; END_WHILE; // sum = 15 .. _repeat-loop: **REPEAT** - Цикл с постусловием ================================ Выполняет блок кода, пока условие не станет истинным (цикл выполнится хотя бы один раз). .. code-table:: REPEAT statements_block; UNTIL condition END_REPEAT; **Пример:** .. code-table:: VAR counter : INT := 0; sum : INT := 0; END_VAR REPEAT counter := counter + 1; sum := sum + counter; UNTIL counter >= 5 END_REPEAT; // sum = 15 .. _for-loop: **FOR** - Цикл со счётчиком =========================== Выполняет блок кода заданное количество раз, используя счётчик. .. code-table:: FOR counter := start_value TO end_value BY step DO statements_block; END_FOR; **Пример:** .. code-table:: VAR i : INT; sum : INT := 0; END_VAR FOR i := 1 TO 5 BY 1 DO sum := sum + i; END_FOR; // sum = 15 .. _return-operator: Оператор RETURN =============== Прерывает выполнение текущей программы (FUNCTION, FUNCTION_BLOCK или PROGRAM) и возвращает управление вызывающему коду. .. code-table:: PROGRAM ExampleProgram VAR exit_condition : BOOL; END_VAR IF exit_condition THEN RETURN; // Выход из программы END_IF; // Этот код выполнится только если exit_condition = FALSE // ... END_PROGRAM .. seealso:: * :doc:`data_types` - для информации о типах данных. * :doc:`math` - для информации о математических функциях.