Слайд 2
Типы данных
Тип данных определяет род информации, методы ее
обработки и хранения, а также количество выделяемой памяти.
Слайд 3
Типы данных
Возможно непосредственное использование базовых типов данных и
создание пользовательских типов на их основе.
Слайд 4
Типы данных
К элементарным (базовым) типам данных относятся:
Логический (BOOL);
Целочисленные;
Рациональные;
Строки;
Время
и дата.
Слайд 5
Типы данных
К пользовательским типам данных относятся:
Массивы;
Указатели;
Перечисление;
Структуры;
Псевдонимы типов.
Слайд 6
Логический (BOOL)
BOOL - логический тип данных, может принимать
одно из двух значений: ИСТИНА (TRUE) или ЛОЖЬ (FALSE).
Слайд 7
Логический (BOOL)
Если для объекта типа BOOL не задан
прямой битовый адрес, то в памяти выделяется 8 бит.
Слайд 8
Логический (BOOL)
Если для объекта типа BOOL не задан
прямой битовый адрес, то в памяти выделяется 8 бит.
Слайд 9
Целочисленные
К целочисленным типам данным относятся: BYTE, WORD, DWORD,
SINT, USINT, INT, UINT, DINT, UDINT.
Слайд 11
Целочисленные
Присвоение данных большего типа переменной меньшего типа может
приводить к потере информации.
Слайд 12
Рациональные
REAL и LREAL - данные в формате с
плавающей запятой, используются для сохранения рациональных чисел. Для типа
REAL необходимо 32 бита памяти и 64 для LREAL.
Слайд 13
Рациональные
Диапазон значений REAL
от 1.175494351e-38
до 3.402823466e+38
Слайд 14
Рациональные
Диапазон значений LREAL
от 2.2250738585072014e-308
до 1.7976931348623158e+308
Слайд 15
Рациональные
Диапазон значений LREAL
от 2.2250738585072014e-308
до 1.7976931348623158e+308
Слайд 16
Строки
STRING - cтроковый тип представляет собой строку символов.
Слайд 17
Строки
Максимальный размер строки определяет количество резервируемой памяти и
указывается при объявлении переменной строкового типа.
Слайд 18
Строки
Размер задается в круглых или квадратных скобках.
Если
размер не указан, принимается размер по умолчанию - 80
символов.
Слайд 19
Строки
Длина строки не ограничена в CoDeSys, но строковые
функции способны обращаться со строками от 1 до 255
символов!
Слайд 20
Строки
Пример объявления строки размером до 35 символов:
str:STRING(35):='Просто строка';
Слайд 21
Строки
Пример объявления строки размером до 35 символов:
str:STRING(35):='Просто строка';
Слайд 22
Время и дата
TIME представляет длительность интервалов времени в
миллисекундах.
Максимальное значение для типа TIME : 49d17h2m47s295ms (4194967295 ms).
Слайд 23
Время и дата
TIME_OF_DAY (сокр. TOD) содержит время суток,
начиная с 0 часов (с точностью до миллисекунд).
Диапазон
значений TOD от:
00:00:00 до 23:59:59.999.
Слайд 24
Время и дата
DATE содержит календарную дату, начиная с
1 января 1970 года.
Диапазон значений от:
1970-00-00 до
2106-02-06.
Слайд 25
Время и дата
DATE_AND_TIME (сокр. DT) содержит время в
секундах, начиная с 0 часов 1 января 1970 года.
Диапазон значений от:
1970-00-00-00:00:00 до 2106-02-06-06:28:15.
Слайд 26
Время и дата
Типы TIME, TOD, DATE и DATE_AND_TIME
(сокр. DT) сохраняются физически как DWORD.
Слайд 27
Время и дата
Типы TIME, TOD, DATE и DATE_AND_TIME
(сокр. DT) сохраняются физически как DWORD.
Слайд 28
Массивы
Элементарные типы данных могут образовывать одно-, двух-, и
трехмерные массивы.
Слайд 29
Массивы
Массивы могут быть объявлены в разделе объявлений POU
или в списке глобальных переменных.
Слайд 30
Массивы
Путем вложения массивов можно получить многомерные массивы, но
не более 9 мерных ( "ARRAY[0..2] OF ARRAY[0..3] OF
…" ).
Слайд 31
Массивы
Синтаксис (запись производится в одну строку):
:ARRAY [..,..]
OF
;
Слайд 32
Массивы
где ll1, ll2, ll3 указывают нижний предел индексов;
ul1, ul2 и ul3 указывают верхние пределы.
Слайд 33
Массивы
Индексы должны быть целого типа. Нельзя использовать отрицательные
индексы.
Слайд 34
Массивы
Пример:
Card_game: ARRAY [1..13, 1..4] OF INT;
Слайд 35
Массивы
Пример инициализации простых массивов:
arr1 : ARRAY [1..5] OF
INT := 1,2,3,4,5;
arr2 : ARRAY [1..2,3..4] OF INT :=
1,3(7); (* сокращение для 1,7,7,7 *)
arr3 : ARRAY [1..2,2..3,3..4] OF INT := 2(0),4(4),2,3;
(* сокращение для 0,0,4,4,4,4,2,3 *)
Слайд 36
Массивы
Пример инициализации массива структур:
TYPE STRUCT1
STRUCT
p1:int;
p2:int;
p3:dword;
END_STRUCT
Слайд 37
Массивы
Пример инициализации массива структур:
ARRAY[1..3] OF STRUCT1:= (p1:=1,p2:=10,p3:=4723),(p1:=2,p2:=0,p3:=299),
(p1:=14,p2:=5,p3:=112);
Слайд 38
Массивы
Пример инициализации части массива:
arr1 : ARRAY [1..10] OF
INT := 1,2;
Слайд 39
Массивы
Не инициализированные явно элементы массива принимают значения по
умолчанию.
Так, в данном примере оставшиеся элементы примут значение
0.
Слайд 40
Массивы
Доступ к элементам массива:
Для доступа к элементам двухмерного
массива используется следующий синтаксис:
[Индекс1,Индекс2]
Слайд 42
Функция CheckBounds
Определив в проекте функцию с именем CheckBounds,
возможно использовать её для контроля за соблюдением границ индексов
массивов.
Слайд 43
Функция CheckBounds
Имя функции фиксировано, изменять его нельзя.
Слайд 44
Функция CheckBounds
Пример функции CheckBounds:
FUNCTION CheckBounds : INT
VAR_INPUT
index, lower,
upper: INT;
END_VAR
IF index < lower THEN
CheckBounds := lower;
ELSIF index
> upper THEN
CheckBounds := upper;
ELSE CheckBounds := index;
END_IF
Слайд 45
Функция CheckBounds
В этом примере CheckBounds ограничивает индекс массива
заданными границами. Если запрашивается элемент, отсутствующий в массиве, функция
CheckBounds возвращает ближайший элемент.
Слайд 46
Функция CheckBounds
Функция CheckBounds, содержащаяся в библиотеке Check.Lib, представляет
собой пример реализации.
Слайд 47
Указатели
Указатели позволяют работать с адресами переменных или функциональных
блоков.
Слайд 48
Указатели
Синтаксис:
: POINTER TO ;
Слайд 49
Указатели
Указатели применимы для всех базовых типов данных или
функциональных блоков, включая определяемые пользователем.
Слайд 50
Указатели
Адреса переменных и функциональных блоков можно получить во
время исполнения программы при помощи оператора ADR.
Слайд 51
Указатели
Для обращения через указатель необходимо добавить оператор "^"
(content) после его имени.
Слайд 52
Указатели
Указатели инкрементируются побайтно! Для увеличения указателя, как это
принято в C-компиляторах, используйте инструкцию
p=p+SIZEOF(p^);
Слайд 53
Указатели
Пример:
pt:POINTER TO INT;
var_int1:INT := 5;
var_int2:INT;
pt := ADR(var_int1);
var_int2:= pt^;
(* var_int2 теперь равна 5 *)
Слайд 54
Функция CheckPointe
Данная функция позволяет контролировать обращение к допустимой
области памяти через указатели. Если определена функция CheckPointer, то
она будет автоматически вызываться при любом обращении через указатель.
Слайд 55
Функция CheckPointe
Функция должна быть определена в проекте (непосредственно
или в библиотеке). Ее имя (CheckPointer) изменять нельзя.
Слайд 56
Функция CheckPointe
Функция возвращает адрес, который будет использоваться как
указатель.
Слайд 57
Перечисление
Перечисление - это определяемый пользователем тип данных, задающий
несколько строковых псевдонимов для числовых констант.
Слайд 58
Перечисление
Перечисление доступно в любой части проекта, даже при
локальном его объявлении внутри POU.
Слайд 59
Перечисление
Поэтому наиболее разумно создавать все перечисления на вкладке
«Типы данных» Организатора Объектов.
Слайд 60
Перечисление
Объявление должно начинаться с ключевого слова TYPE и
заканчиваться строкой END_TYPE.
Слайд 61
Перечисление
Синтаксис:
TYPE :( ,< Элемент _1>, ...< Элемент _n>);END_TYPE
Слайд 62
Перечисление
Переменная типа может принимать только перечисленные значения.
Слайд 63
Перечисление
При инициализации переменная получает первое из списка значение.
Слайд 64
Перечисление
Если числовые значения элементов перечисления не указаны явно,
им присваиваются последовательно возрастающие числа, начиная с 0.
Слайд 65
Перечисление
Фактически элемент перечисления - это число типа INT
и работать с ними можно точно так же. Можно
напрямую присвоить число переменной типа перечисление.
Слайд 66
Перечисление
Пример:
TYPE TRAFFIC_SIGNAL: (Red, Yellow, Green:=10); END_TYPE
(*Каждому цвету
соответствует свое
значение, для red - это 0, для yellow -
1 и для green - 10 *)
Слайд 67
Перечисление
Продолжение пример:
TRAFFIC_SIGNAL1 : TRAFFIC_SIGNAL;
TRAFFIC_SIGNAL1:=0;
(* Переменная получила значение
red*)
Слайд 68
Перечисление
Продолжение пример:
FOR i:= Red TO Green DO
i :=
i + 1;
END_FOR;
Слайд 69
Перечисление
Элемент, уже включенный в перечисление, нельзя повторно включать
в другое перечисление.
Слайд 70
Псевдонимы типов
Псевдонимы типов нужны для создания альтернативных пользовательских
наименований типов данных. Это удобно при работе с большим
числом однотипных констант, переменных и функциональных блоков.
Слайд 71
Псевдонимы типов
Псевдонимы типов определены на вкладке Типы данных
Организатора Объектов. Объявление должно начинаться с ключевого слова TYPE
и заканчиваться строкой END_TYPE.
Слайд 72
Псевдонимы типов
Синтаксис:
TYPE : ;
END_TYPE