Определенные пользователем типы данных — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Определенные пользователем типы данных

2020-04-01 185
Определенные пользователем типы данных 0.00 из 5.00 0 оценок
Заказать работу

 

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_10V, UNIPOLAR_1_5V,

UNIPOLAR_0_5V, UNIPOLAR_4_20_MA,

UNIPOLAR_0_20_MA)

 
   

:= UNIPOLAR_1_5V;

Инициализация
   

END_TYPE

 
2a Типы данных с именованными значениями

TYPE

 
2b    

Colors: DWORD

 
   

(Red:= 16#00FF0000,

Green:= 16#0000FF00,

Blue:= 16#000000FF,

White:= Red OR Green OR Blue,

Black:= Red AND Green AND Blue)

 
   

:= 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;

MIN_SCALE: ANALOG_DATA:= -4095;

MAX_SCALE: ANALOG_DATA:=4095;

 
     

END_STRUCT;

 
   

END_TYPE

 
7a Типы функциональных блоков и классы как элементы структуры

TYPE

Функциональный блок TOF как элемент структуры
7b    

Cooler: STRUCT

 
   

Temp: INT;

Cooling: TOF:= (PT:=T#100ms);

 
   

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;

IN AT %I*: BOOL;

OUT_VAR AT %Q*: WORD:= 200;

ITNL_VAR: REAL:= 123.0; // not located

END_STRUCT;

 
   

END_TYPE

 
11а Прямо производный тип данных

TYPE

 
11b    

CNT: UINT;

 
     

FREQ: REAL:= 50.0;

ANALOG_CHANNEL_CONFIG:

Инициализация
   

ANALOG_CHANNEL_CONFIGURATION

Новая инициализация
     

:= (MIN_SCALE:= 0, MAX_SCALE:= 4000);

 
   

END_TYPE

 
12 Инициализация с использованием константных выражений

TYPE

Использует константное выражение
     

PIx2: REAL:= 2 * 3.1416;

 
   

END_TYPE

 

Примечание 1 - Возможно объявление типа данных без инициализации (свойство) или с инициализацией (свойство). Если поддерживается свойство, тип данных инициализируется с неявным начальным значением. Если поддерживается свойство, тип данных инициализируется с данным значением или неявным начальным значением, если начальное значение не дано.

Примечание 2 - Переменные с прямо представленными элементами - частично определенными, используя, не могут использоваться в секциях VAR_INPUT или VAR_IN_OUT.

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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.069 с.