ГОСТ Р МЭК 61131-3-2016. Национальный стандарт Российской Федерации. Контроллеры программируемые. Часть 3. Языки программирования
6.3 Литералы - внешнее представление данных
6.3.1 Общие положения
Внешние представления данных в различных языках программирования программируемых контроллеров состоят из числовых литералов, символьно-строковых литералов и литералов дат и времени.
Признана необходимость в обеспечении внешних представлений для двух различных типов данных, связанных со временем:
- данные о продолжительности времени при измерении и контроле событий;
- данные о времени суток, которые могут также включать в себя информацию о дате - для синхронизации начала и окончания событий в абсолютной временной шкале.
6.3.2 Числовые литералы и строковые литералы
Имеется два типа числовых литералов: целые литералы и действительные литералы. Числовой литерал определяется как десятичное число или число с основанием. Максимальное количество цифр для каждого вида числовых литералов должно быть достаточным для выражения всего диапазона значений с требуемой точностью для всех типов данных, которые представляются литералами в заданной реализации.
Единичные символы подчеркивания "_", вставленные между цифрами числового литерала не являются существенными. Никакое иное использование символов подчеркивания в числовых литералах не разрешается.
Десятичные литералы представляются в обычной десятичной нотации. Действительные литералы характеризуются наличием десятичной точки. Экспонента указывает на целую степень 10, на которую должно умножаться предшествующее число, чтобы достичь представленного значения. Десятичные литералы и экспоненты литералов могут содержать предшествующий знак "+" или "-".
Литералы могут также представляться с основаниями 2, 8 и 16. Основание указывается в десятичной нотации. Для основания 16 используется расширенный набор цифр, состоящий из букв от A до F, с оговоренным десятичным значением от 10 до 15, соответственно. Числа с основанием не содержат ведущего знака "+" или "-". Они интерпретируются как битово-строковые литералы.
Числовые литералы, представляющие положительные целые значения, могут использоваться как битово-строковые литералы.
Логические данные представляются числовыми литералами со значением (0) или один (1), или ключевыми словами FALSE или TRUE, соответственно.
Свойства и примеры числовых литералов приведены в таблице 5.
Таблица 5
Числовые литералы
Номер | Описание | Пример | Объяснение |
1 | Целый литерал | -12, 0, 123_4, +986 |
|
2 | Действительный литерал | 0.0, 0.4560, 3.14159_26 |
|
3 | Действительные литералы с экспонентой | -1.34E-12, -1.34e-12 1.0E+6, 1.0e+6 1.234E6, 1.234e6 |
|
4 | Двоичный литерал |
| Литерал с основанием 2 для представления: |
2#1111_1111 | десятичного числа 255 | ||
2#1110_0000 | десятичного числа 224 | ||
5 | Восьмеричные литералы |
| Литерал с основанием 8 для представления: |
8#377 | десятичного числа 255 | ||
8#340 | десятичного числа 224 | ||
6 | Шестнадцатеричный литерал |
| Литерал с основанием 16 для представления: |
16#FF или 16#ff | десятичного числа 255 | ||
16#E0 или 16#e0 | десятичного числа 224 | ||
7 | Логический ноль и единица | 0 или 1 |
|
8 | Логические FALSE и TRUE | FALSE TRUE |
|
9 | Типизированный литерал | INT#-123 | Представление INT десятичного значения -123 |
INT#16#7FFF | Представление INT десятичного значения 32767 | ||
WORD#16#AFF | Представление WORD шестнадцатеричного значения 0AFF | ||
WORD#1234 | Представление WORD десятичного значения 1234=16#4D2 | ||
UINT#16#89AF | Представление UINT шестнадцатеричного значения 89AF | ||
CHAR#16#41 | Представление CHAR символа 'A' | ||
BOOL#0 |
| ||
BOOL#1 |
| ||
BOOL#FALSE |
| ||
BOOL#TRUE |
| ||
Примечание 1 - Ключевые слова FALSE и TRUE соответствуют логическим значениям 0 и 1, соответственно. Примечание 2 - Свойство 5 "Восьмеричные литералы" не рекомендуется и может не быть включено в следующую редакцию настоящего стандарта. |
Тип данных логических или числовых литералов может указываться добавлением префикса типа к литералу, состоящего из имени элементарного типа данных и символа "#". Примеры приведены в свойстве 9 таблицы 5.
6.3.3 Символьно-строковые литералы
Символьно-строковые литералы содержат однобайтовые или двухбайтовые кодированные символы:
- символьно-строковый литерал однобайтовых символов является последовательностью нуля или более символов, с предшествующим и завершающим символом одиночной кавычки ('). В строках однобайтовых символов, трехсимвольная комбинация символа доллара ($) с двумя следующими шестнадцатеричными символами интерпретируется как шестнадцатеричное представление восьмибитового кода символа, как показано в свойстве 1 таблицы 6;
- символьно-строковый литерал двухбайтовых символов является последовательностью 0 или более символов из набора символов ИСО/МЭК 10646, с предшествующим и завершающим символом двойной кавычки ("). В строках однобайтовых символов, трехсимвольная комбинация символа доллара ($) с двумя следующими шестнадцатеричными символами интерпретируется как шестнадцатеричное представление восьмибитового кода символа, как показано в свойстве 2 таблицы 6.
Примечание - Отношение стандартов ИСО/МЭК 10646 и Юникод:
Несмотря на то, что коды символов и формы кодирования стандартов Юникод и ИСО/МЭК 10646 синхронизированы, стандарт Юникод налагает дополнительные ограничения на реализации, чтобы гарантировать, что они трактуют символы одинаково во всех платформах и приложениях. В связи с этим, данный стандарт предоставляет широкий набор спецификаций функциональных символов, данных символов, алгоритмов и обширный справочный материал, который отсутствует в ИСО/МЭК 10646.
Таблица 6
Символьно-строковые литералы
Номер | Описание | Пример |
| Односимвольные символы и строки символов с ' ' |
|
1a | Пустая строка (длины ноль) | " |
1b | Строка длины 1 или символ CHAR, содержащий единственный символ | 'A' |
1c | Строка длины один или символ CHAR, содержащий символ пробела | ' ' |
1d | Строка длины один или символ CHAR, содержащий символ одиночной кавычки | $ |
1e | Строка длины один или символ CHAR, содержащий символ двойной кавычки | '"' |
1f | Поддержка двухсимвольных комбинаций таблицы 7 | '$R$L' |
1g | Поддержка представления символа с знаком доллара '$' и двумя шестнадцатеричными цифрами | '$0A' |
| Двухбайтовые символы или символьные строки с "" (Примечание) |
|
2a | Пустая строка (длины ноль) | "" |
2b | Строка длины один или символ WCHAR, содержащий единственный символ | "A" |
2c | Строка длины один или символ WCHAR, содержащий символ пробела | " " |
2d | Строка длины один или символ WCHAR, содержащий символ одиночной кавычки | " ' " |
2e | Строка длины один или символ WCHAR, содержащий символ двойной кавычки | "$"" |
2f | Поддержка двухсимвольных комбинаций таблицы 7 | "$R$L" |
2h | Поддержка представления символа с знаком доллара '$' и четырьмя шестнадцатеричными цифрами | "$00C4" |
| Типизированные однобайтовые символы или строковый литерал с # |
|
3a | Типизированная строка | STRING#'OK' |
3b | Типизированный символ | CHAR#'X' |
| Двухбайтовые типизированные строковые литералы с # (NOTE) |
|
4a | Типизированные двухбайтовые строки (с использованием символа двойной кавычки) | WSTRING#"OK" |
4b | Типизированный двухбайтовый символ (с использованием символа двойной кавычки) | WCHAR#"X" |
4d | Типизированный двухбайтовый символ (с использованием символа одиночной кавычки) | WCHAR#'X' |
Примечание - Если конкретная реализация поддерживает свойство 4, но не поддерживает свойство 2, Реализатор может определить синтаксис и семантику для использования символа двойной кавычки. |
Двухсимвольные комбинации, начинающиеся с символа доллара интерпретируются, как показано в таблице 7, когда они встречаются в строках символов.
Таблица 7
Двухсимвольные комбинации в символьных строках
Номер | Описание | Комбинации |
1 | Знак доллара | |
2 | Единичная кавычка | $' |
3 | Перевод строки | $L или $l |
4 | Новая строка | $N или $n |
5 | Прогон (перевод) страницы | $P или $p |
6 | Возврат каретки | $R или $r |
7 | Табуляция | $T или $t |
8 | Двойная кавычка | $" |
Примечание 1 - Символ новой строки предоставляет независимые от реализации средства определения конца строки данных. При печати эффект таков, что заканчивается текущая строка данных и печать возобновляется в начале следующей строки. Примечание 2 - Комбинация $' действительна только внутри строковых литералов с одиночными кавычками. Примечание 3 - Комбинация $" действительна только внутри строковых литералов с двойными кавычками. |
6.3.4 Литерал продолжительности времени
Данные продолжительности времени ограничиваются слева ключевым словом T#, TIME# или LTIME#. Представление данных о продолжительности времени в терминах дней, часов, минут, секунд и долей секунды, или любой их комбинации поддерживается как показано в таблице 8. Наименьшая единица времени может быть записана в нотации действительных чисел без экспоненты.
Таблица 8
Литералы продолжительности времени
Номер | Описание | Пример | ||
| Сокращения продолжительности времени |
| ||
1a | d | День | ||
1b | h | Час | ||
1c | m | Минута | ||
1d | s | Секунда | ||
1e | ms | Миллисекунда | ||
1f | us (если символ | Микросекунда | ||
1g | ns | Наносекунда | ||
| Литералы продолжительности времени без символов подчеркивания |
| ||
2a | короткий префикс | T#14ms T#-14msLT#14.7s | T#14.7m | |
T#14.7h t#14.7d t#25h15m lt#5d14h12m18s3.5ms t#12h4m34ms230us400ns | ||||
2b | длинный префикс | TIME#14ms | TIME#-14ms | time#14.7s |
| Литералы продолжительности времени с символами подчеркивания |
| ||
3a | короткий префикс | t#25h_15m t#5d_14h_12m_18s_3.5ms LTIME#5m_30s_500ms_100.1us | ||
3b | длинный префикс | TIME#25h_15m ltime#5d_14h_12m_18s_3.5ms LTIME#34s_345ns |
Единицы литералов продолжительности времени могут разделяться символами подчеркивания.
Разрешается "переполнение" самой большой единицы продолжительности времени, например нотация T#25h_15m является допустимой.
Единицы времени (например, секунды, миллисекунды и т.д.) могут быть представлены буквами верхнего или нижнего регистра.
Как показано в таблице 8, для продолжительности времени разрешены как положительные, так и отрицательные значения.
6.3.5 Литерал даты и времени суток
Ключевые слова префикса литералов для времени суток и даты приведены в таблице 9.
Таблица 9
Литералы даты и времени суток
Номер | Описание | Пример |
1a | Литерал даты (длинный префикс) | DATE#1984-06-25, date#2010-09-22 |
1b | Литерал даты (короткий префикс) | D#1984-06-25 |
2a | Длинный литерал даты (длинный префикс) | LDATE#2012-02-29 |
2b | Длинный литерал даты (короткий префикс) | LD#1984-06-25 |
3a | Литерал времени суток (длинный префикс) | TIME_OF_DAY#15:36:55.36 |
3b | Литерал времени суток (короткий префикс) | TOD#15:36:55.36 |
4a | Длинный литерал времени суток (короткий префикс) | LTOD#15:36:55.36 |
4b | Длинный литерал времени суток (длинный префикс) | LTIME_OF_DAY#15:36:55.36 |
5a | Литерал даты и времени (длинный префикс) | DATE_AND_TIME#1984-06-25-15:36:55.360227400 |
5b | Литерал даты и времени (короткий префикс) | DT#1984-06-25-15:36:55.360_227_400 |
6a | Длинный литерал даты и времени (длинный префикс) | LDATE_AND_TIME#1984-06-25-15:36:55.360_227_400 |
6b | Длинный литерал даты и времени (короткий префикс) | LDT#1984-06-25-15:36:55.360_227_400 |