Лекция: Преобразования типов
Преобразование типов происходит при присваивании значения переменной одного типа переменной другого типа. Преобразование меняет физическое представление значения в памяти данных, но не должно изменять само значение. Если это невозможно, то преобразование приводит к частичной потере данных. Но в таком случае транслятор требует явного указания необходимости выполнения такой операции.
Рассмотрим сначала работу с целыми числами. Пусть, например, объявлена переменная siVar типа короткое целое (SINT 8 бит) и переменная iVar типа целое (INT 16 бит). Допустим siVar = 100, a iVar = 1000. Выражение iVar := siVar является вполне допустимым, поскольку числа типа SINT являются подмножеством INT (iVar примет значение 100). Здесь преобразование типа будет выполнено транслятором автоматически, без каких-либо дополнительных указаний. Обратное присваивание siVar:= iVar приведет к переполнению и потере данных. Заставить транслятор выполнить преобразование с вероятной потерей данных можно только в явной форме при помощи специального оператора siVar := INT_TO_SINT(iVar). Результат равен 24 (в шестнадцатеричной форме 1000 это 1б#ОЗЕ8 и только младший его байт перейдет в SINT, значение 16#Е8 соответствует десятичному числу 24).
Аналогичная ситуация возникает при работе с действительными числами длинного LREAL и короткого REAL типов.
Операторы явного преобразования базовых МЭК-типов образу-к>т свои наименования из двух частей. Вначале указывается «исходный тип», затем «_ТО _» и «тип результата*. Например:
(* Результат 16#АА*) (*120*)
i := REAL_TO_INT(2.7); (*Результат 3*)
i := TRUNC(2.7); (*Результат 2*)
t := STRING_TO_TIME('T#216ms'); (*РезультатТ#216ms*)
Операция TRUNC выполняет отбрасывание дробной части в отличие от преобразования REAL__TO_INT, выполняющего округление.
Обратите внимание, что операции преобразования допустимы для любых комбинаций базовых типов, а не только для совместимых типов (например, дату в строку). Так, преобразования <...>_TO_STRING фактически заменяют оператор PRINT, распространенный в языках общего применения.
В конкретной реализации отдельные преобразования могут не поддерживаться или иметь определенные особенности, в первую очередь это относится к преобразованиям строк в другие типы и обратно. Поэтому мы не будем здесь приводить подробные описания всех возможных преобразований. При необходимости используйте руководство по применению системы программирования или оперативную справку.