**************************** Функции преобразования типов **************************** Функции преобразования типов используются для конвертации значений из одного типа данных в другой. Общий синтаксис =============== Все функции преобразования имеют следующий формат: .. code-table:: result := _TO_(_source_); Где: - ``source_type`` — исходный тип данных - ``target_type`` — целевой тип данных .. _type-conversion-functions: Доступные преобразования ======================== Преобразования выполняются по следующему принципу: любое значение может быть преобразовано из одного типа в другой, если оба типа входят в список поддерживаемых. **Поддерживаемые типы для преобразования:** - Целочисленные типы: ``BYTE``, ``WORD``, ``DWORD``, ``LWORD``, ``SINT``, ``USINT``, ``INT``, ``UINT``, ``DINT``, ``UDINT`` - Вещественные типы: ``REAL``, ``LREAL`` - Логический тип: ``BOOL`` - Временные типы: ``TIME``, ``LTIME`` **Примеры имен функций:** .. code-table:: INT_TO_REAL // Преобразование INT в REAL REAL_TO_INT // Преобразование REAL в INT BOOL_TO_DINT // Преобразование BOOL в DINT TIME_TO_INT // Преобразование TIME в INT DINT_TO_TIME // Преобразование DINT в TIME Преобразование числовых типов ============================= **Примеры:** .. code-table:: VAR int_val : INT := 123; real_val : REAL; dint_val : DINT; bool_val : BOOL := TRUE; int_from_bool : INT; END_VAR // Преобразование INT в REAL real_val := INT_TO_REAL(int_val); // real_val = 123.0 // Преобразование INT в DINT dint_val := INT_TO_DINT(int_val); // dint_val = 123 // Преобразование REAL в INT (отбрасывание дробной части) real_val := 3.14; int_val := REAL_TO_INT(real_val); // int_val = 3 // Преобразование BOOL в INT int_from_bool := BOOL_TO_INT(bool_val); // int_from_bool = 1 // Преобразование INT в BOOL bool_val := INT_TO_BOOL(0); // bool_val = FALSE bool_val := INT_TO_BOOL(5); // bool_val = TRUE Преобразование временных типов ============================== Типы ``TIME`` и ``LTIME`` могут преобразовываться в целочисленные типы и обратно. **Примеры:** .. code-table:: VAR time_val : TIME := T#5000ms; int_val : INT; dint_val : DINT; END_VAR // Преобразование TIME в INT (количество миллисекунд) int_val := TIME_TO_INT(time_val); // int_val = 5000 // Преобразование TIME в DINT dint_val := TIME_TO_DINT(time_val); // dint_val = 5000 // Преобразование DINT в TIME time_val := DINT_TO_TIME(10000); // time_val = T#10s Правила преобразований ====================== **Преобразование BOOL в числовые типы:** - ``FALSE`` преобразуется в 0 - ``TRUE`` преобразуется в 1 **Преобразование числовых типов в BOOL:** - 0 преобразуется в ``FALSE`` - Любое ненулевое значение преобразуется в ``TRUE`` **Преобразование REAL/LREAL в целочисленные типы:** - Дробная часть отбрасывается (преобразование в сторону нуля) - Пример: ``REAL_TO_INT(3.99)`` → ``3`` - Пример: ``REAL_TO_INT(-3.99)`` → ``-3`` **Преобразование TIME/LTIME в числовые типы:** - Значение времени преобразуется в количество миллисекунд - Пример: ``TIME_TO_INT(T#5s)`` → ``5000`` **Преобразование числовых типов в TIME/LTIME:** - Числовое значение интерпретируется как количество миллисекунд - Пример: ``INT_TO_TIME(5000)`` → ``T#5s`` .. note:: - Преобразования строковых типов (STRING) не поддерживаются - Преобразования типов даты и времени (DATE, TOD, DT) поддерживаются только в целочисленные типы - При преобразовании в BOOL: 0 = FALSE, всё остальное = TRUE - При преобразовании из REAL в целочисленные типы дробная часть отбрасывается .. seealso:: * :doc:`data_types` - для информации о типах данных. * :doc:`math` - для математических функций.