Функции преобразования типов

Функции преобразования типов используются для конвертации значений из одного типа данных в другой.

Общий синтаксис

Все функции преобразования имеют следующий формат:

result := _TO_(_source_);
        

Где: - source_type — исходный тип данных - target_type — целевой тип данных

Доступные преобразования

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

Поддерживаемые типы для преобразования:

  • Целочисленные типы: BYTE, WORD, DWORD, LWORD, SINT, USINT, INT, UINT, DINT, UDINT

  • Вещественные типы: REAL, LREAL

  • Логический тип: BOOL

  • Временные типы: TIME, LTIME

Примеры имен функций:

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
        

Преобразование числовых типов

Примеры:

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 могут преобразовываться в целочисленные типы и обратно.

Примеры:

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

Примечание

  • Преобразования строковых типов (STRING) не поддерживаются

  • Преобразования типов даты и времени (DATE, TOD, DT) поддерживаются только в целочисленные типы

  • При преобразовании в BOOL: 0 = FALSE, всё остальное = TRUE

  • При преобразовании из REAL в целочисленные типы дробная часть отбрасывается

См. также