Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Топ:
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
2020-04-01 | 185 |
5.00
из
|
Заказать работу |
|
|
6.4.4.1 Объявление (TYPE)
6.4.4.1.1 Общие положения
Назначение определенных пользователем типов данных - это их использование в объявлении других типов данных и в объявлениях переменных.
Определенный пользователем тип данных может использоваться везде, где может использоваться базовый тип.
Определенные пользователем типы данных объявляются, используя текстовую конструкцию TYPE...END_TYPE. Объявление типа состоит из следующих элементов:
- имя типа;
- символ двоеточия;
- объявление собственно типа, как определено в следующих предложениях.
Пример - Объявление типа
TYPE
myDatatype1: <объявление типа с необязательной инициализацией>;
END_TYPE
6.4.4.1.2 Инициализация
Определенные пользователем типы данных могут быть инициализированы определенными пользователем значениями. Такая инициализация имеет приоритет над неявным начальным значением.
Определенная пользователем инициализация следует за объявлением типа и начинается оператором присваивания, за которым следует начальное значение (значения).
Могут использоваться литералы (например, -123, 1.55, ) или константные выражения (например, 12*24). Используемые начальные значения должны иметь совместимый тип, то есть тот же самый тип или тип, который может быть конвертирован, используя неявное преобразование типа.
Для инициализации типов данных следует применять правила, приведенные на рисунке 6.
Рисунок 6 - Инициализация литералами и константными выражениями (правила)
Родовой тип данных | Инициализировано литералом | Результат |
ANY_UNSIGNED | Неотрицательный целый литерал или неотрицательное константное выражение | Неотрицательное целое значение |
ANY_SIGNED | Целый литерал или константное выражение | Целое значение |
ANY_REAL | Числовой литерал или константное выражение | Числовое значение |
ANY_BIT | Целый литерал без знака или константное выражение без знака | Целое значение без знака |
ANY_STRING | Битово-строковый литерал | Строковое значение |
ANY_DATE | Литерал даты и времени суток | Значение даты и времени суток |
ANY_DURATION | Литерал продолжительности времени | Значение продолжительности времени |
Рисунок 6 - Инициализация литералами и константными выражениями (правила)
|
В таблице 11 определены свойства объявления типов данных и их инициализации, определенных пользователем.
Таблица 11 - Объявление определенных пользователем типов данных и их инициализации
Номер | Описание | Пример | Объяснение | |||||||
1a | Перечислимые типы данных | TYPE | ||||||||
1b | ANALOG_SIGNAL_RANGE: | |||||||||
(BIPOLAR_10V, | ||||||||||
:= UNIPOLAR_1_5V; | Инициализация | |||||||||
END_TYPE | ||||||||||
2a | Типы данных с именованными значениями | TYPE | ||||||||
2b | Colors: DWORD | |||||||||
(Red:= 16#00FF0000, | ||||||||||
:= Green; | Инициализация | |||||||||
END_TYPE | ||||||||||
3a | Тип - диапазоны | TYPE | ||||||||
3b | ANALOG_DATA: INT(-4095.. 4095):= 0; | |||||||||
END_TYPE | ||||||||||
4a | Типы данных - массивы | TYPE ANALOG_16_INPUT_DATA: | ANALOG_DATA см. выше. | |||||||
4b | ARRAY [1..16] OF ANALOG_DATA | |||||||||
:= [8(-4095), 8(4095)]; | Инициализация | |||||||||
END_TYPE | ||||||||||
5a | Типы функциональных блоков и классы как элементы массива | TYPE | Инициализация функционального блока TON как элемента массива | |||||||
TONs: ARRAY[1..50] OF TON | ||||||||||
5b | := [50(PT:=T#100ms)]; | |||||||||
END_TYPE | ||||||||||
6a | Структурированный тип данных | TYPE ANALOG_CHANNEL_CONFIGURATION: | см. выше | |||||||
6b | STRUCT | ANALOG_SIGNAL_RANGE | ||||||||
RANGE: ANALOG_SIGNAL_RANGE; | ||||||||||
END_STRUCT; | ||||||||||
END_TYPE | ||||||||||
7a | Типы функциональных блоков и классы как элементы структуры | TYPE | Функциональный блок TOF как элемент структуры | |||||||
7b | Cooler: STRUCT
| |||||||||
Temp: INT; | ||||||||||
END_TYPE | ||||||||||
8a | Структурированный тип данных с относительной адресацией AT | TYPE | Явное расположение без перекрытия | |||||||
8b | Com1_data: STRUCT | |||||||||
head | AT %B0: | INT; | ||||||||
length | AT %B2: | USINT:= 26; | ||||||||
flag1 | AT %X3.0: | BOOL; | ||||||||
end | AT %B25: | BYTE; | ||||||||
END_STRUCT; | ||||||||||
END_TYPE | ||||||||||
9a | Структурированный тип данных с относительной адресацией AT и OVERLAP | TYPE | Явное расположение с перекрытием | |||||||
Com2_data: STRUCT OVERLAP | ||||||||||
head | AT %B0: | INT; | ||||||||
length | AT %B2: | USINT; | ||||||||
flag2 | AT %X3.3: | BOOL; | ||||||||
data1 | AT %B5: | BYTE; | ||||||||
data2 | AT %B5: | REAL; | ||||||||
end | AT %B19: | BYTE; | ||||||||
END_STRUCT; | ||||||||||
END_TYPE | ||||||||||
10а | Прямо представленные элементы структуры - частично определенные, используя | TYPE | Присваивает компоненты структуры еще не локализованным входным и выходным переменным, см. примечание 2 | |||||||
10b | HW_COMP: STRUCT; | |||||||||
END_TYPE | ||||||||||
11а | Прямо производный тип данных | TYPE | ||||||||
11b | CNT: UINT; | |||||||||
FREQ: REAL:= 50.0; | Инициализация | |||||||||
ANALOG_CHANNEL_CONFIGURATION | Новая инициализация | |||||||||
:= (MIN_SCALE:= 0, MAX_SCALE:= 4000); | ||||||||||
END_TYPE | ||||||||||
12 | Инициализация с использованием константных выражений | TYPE | Использует константное выражение | |||||||
PIx2: REAL:= 2 * 3.1416; | ||||||||||
END_TYPE | ||||||||||
Примечание 1 - Возможно объявление типа данных без инициализации (свойство) или с инициализацией (свойство). Если поддерживается свойство, тип данных инициализируется с неявным начальным значением. Если поддерживается свойство, тип данных инициализируется с данным значением или неявным начальным значением, если начальное значение не дано. |
6.4.4.2 Перечислимый тип данных
6.4.4.2.1 Общие положения
Объявление перечислимого типа данных означает, что каждый элемент данных этого типа может принимать только значения, указанные в соответствующем перечне идентификатора, как показано в таблице 11.
Перечень перечисления определяет упорядоченное множество перечислимых значений, начиная с первого идентификатора и оканчивая последним.
|
Различные перечислимые типы данных могут использовать одинаковые идентификаторы для перечислимых значений. Максимально допустимое число перечислимых значений определяется разработчиком.
Для обеспечения уникальной идентификации при использовании в конкретном контексте, перечислимые литералы могут уточняться префиксом, состоящим из имени ассоциированного типа данных и символа номера, аналогично типизированным литералам. В перечне перечисления префиксы не используются.
Происходит ошибка, если в перечислимом литерале недостаточно информации для однозначного определения его значения (см. пример ниже).
Пример - Перечислимый тип данных
TYPE
Traffic_light: (Red, Amber, Green);
Painting_colors: (Red, Yellow, Green, Blue):= Blue;
END_TYPE
VAR
My_Traffic_light: Traffic_light:= Red;
END_VAR
IF My_Traffic_light = Traffic_light#Amber THEN... // OK
IF My_Traffic_light = Traffic_light#Red THEN... // OK
IF My_Traffic_light = Amber THEN... // OK - идентификатор Amber уникален
IF My_Traffic_light = Red THEN... // ОШИБКА - идентификатор Red не является уникальным
6.4.4.2.2 Инициализация
Неявное начальное значение перечислимого типа данных - первый идентификатор в связанном перечне перечисления.
Пользователь может инициализировать тип данных определенным пользователем значением из перечня перечислимых значений данного типа. Такая инициализация имеет приоритет.
Как показано в таблице 11 для ANALOG_SIGNAL_RANGE, определенное пользователем начальное значение перечислимого типа данных - это присвоенное значение UNIPOLAR_1_5V.
Определенное пользователем присваивание начального значения типа данных является свойством в таблице 11.
6.4.4.3 Тип данных с именованными значениями
6.4.4.3.1 Общие положения
Связанным с перечислимым типом данных, где перечислимые идентификаторы не заданы пользователем, является перечислимый тип данных с именованными значениями. Объявление определяет тип данных и присваивает значения именованных переменных, как показано в таблице 11.
Объявление именованных значений не ограничивает диапазон значений переменных этого типа, то есть переменной могут быть присвоены другие константы, или значение может определяться вычислением.
|
Для обеспечения уникальной идентификации при использовании в конкретном контексте, именованные значения могут уточняться префиксом, состоящим из имени ассоциированного типа данных и символа номера, аналогично типизированным литералам.
В перечне объявления префиксы не используются. Происходит ошибка, если в перечислимом литерале недостаточно информации для однозначного определения его значения (см. пример).
Пример - Тип данных с именованными значениями
TYPE
Traffic_light: INT (Red:= 1, Amber:= 2, Green:= 3):= Green;
Painting_colors: INT (Red:= 1, Yellow:= 2, Green:= 3, Blue:= 4):= Blue;
END_TYPE
VAR
My_Traffic_light: Traffic_light;
END_VAR
My_Traffic_light:= 27; // Присваивание константы IF
My_Traffic_light = Amber THEN...// Присваивание выражения | ||||
// Примечание - Это невозможно для перечислимых значений |
My_Traffic_light:= Traffic_light#Red + 1;
IF My_Traffic_light | = 123 THEN... | // OK | ||||
IF My_Traffic_light | = Traffic_light#Amber | THEN... | // OK | |||
IF My_Traffic_light | = Traffic_light#Red | THEN... | // OK | |||
IF My_Traffic_light уникален | = Amber THEN... | // OK - идентификатор Amber | ||||
IF My_Traffic_light | = Red THEN... | // ОШИБКА - идентификатор |
Red не является уникальным
6.4.4.3.2 Инициализация
Неявное значение для типа данных с именованными значениями - это первый элемент данных в перечне перечисления. В приведенном выше примере для Traffic_light таким элементом является Red.
Пользователь может инициализировать тип данных определенным пользователем значением. Инициализация не ограничивается именованными значениями - может использоваться любое значение из диапазона базового типа. Такая инициализация имеет приоритет.
В пример, определенным пользователем начальным значением перечислимого типа для Traffic_light является Green.
Определенное пользователем присваивание начального значения типа данных является свойством в таблице 11.
6.4.4.4 Тип-диапазон
6.4.4.4.1 Общие положения
Декларацией типа-диапазона определено, что значение любого элемента данных этого типа может принимать значения между указанными верхними и нижними пределами (включительно), как показано в таблице 11.
Пределы в типе-диапазоне должны быть литералами или константными выражениями.
Пример -
TYPE
ANALOG_DATA: INT(-4095.. 4095):= 0;
END_TYPE
6.4.4.4.2 Инициализация
Неявные начальные значения для типов данных с диапазоном - это первый (нижний) предел диапазона.
Пользователь может инициализировать тип данных определенным пользователем значением из диапазона. Такая инициализация имеет приоритет.
Например, как показано в примере, приведенном в таблице 11, неявное начальное значение элементов типа ANALOG_DATA равно -4095, в то время, как при явной инициализации, неявное начальное значение равно нулю (как объявлено).
|
6.4.4.5 Типы данных - массивы
6.4.4.5.1 Общие положения
Объявление типа данных - массива определяет, что должно быть выделено достаточное количество памяти для каждого элемента этого типа, чтобы хранить все данные, которые могут быть индексированы указанным поддиапазоном (поддиапазонами) индексов, как показано в таблице 11.
Массив - это совокупность элементов данных одинакового типа. В качестве типа элемента массива могут использоваться элементарные и определенные пользователем типы данных, типы функциональных блоков и классы. На данную совокупность элементов данных ссылаются с помощью одного или более индексов, заключенных в квадратные скобки и разделенных запятыми. Если значение индекса выходит за пределы, указанные в объявлении массива, возникает ошибка.
Примечание - Для вычисляемых индексов такая ошибка может быть обнаружена только во время выполнения.
Максимальное число индексов массива, максимальный размер массива и максимальный диапазон значений индекса определяются разработчиком.
Пределы в диапазона* индекса должны быть литералами или константными выражениями. Массивы переменной длины определены в 6.5.3.
________________
* Текст документа соответствует оригиналу. - Примечание изготовителя базы данных.
В языке ST индекс является выражением, производящим значение, соответствующее одному из подтипов родового типа ANY_INT.
Форма индексов в языке IL и графических языках, определенных в разделе 8, ограничена одноэлементными переменными или целыми литералами.
Пример -
a) Объявление массива
VAR myANALOG_16: ARRAY [1..16] OF ANALOG_DATA;
:= [8(-4095), 8(4095)]; // определенные пользователем начальные значения
END_VAR
b) Использование переменных массива в языке ST может быть следующим:
OUTARY[6,SYM]:= INARY[0] + INARY[7] - INARY[i] * %IW62.
6.4.4.5.2 Инициализация
Неявное начальное значение каждого элемента массива - это начальное значение, определенное для типа данных элементов массива.
Пользователь может инициализировать тип массива значением, определенным пользователем. Такая инициализация имеет приоритет.
Определенное пользователем начальное значение массива назначается в форме списка, в котором могут использоваться скобки для обозначения повторений.
Во время инициализации типов данных - массивов, самый правый индекс массива изменяется быстрее остальных при наполнении массива из списка начальных значений.
Пример - Инициализация массива
A: ARRAY [0..5] OF INT:= [2(1, 2, 3)]
|
|
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!