Програмне забезпечення мікропроцесорних систем Лекція 4 Общие элементы

>Програмне забезпечення мікропроцесорних систем Лекція 4 Общие элементы ПО МПС. Обзор типов данных в Програмне забезпечення мікропроцесорних систем Лекція 4 Общие элементы ПО МПС. Обзор типов данных в проектах (на примере пакета CoDeSys 2.3) Лисаченко І.Г. 2012 Національний технічний університет «Харківський Політехнічній Інститут» Факультет Інтегрованих технологій і хімічної техніки

>2 Вопросы лекции: Представление данных адресация входов/выходов, ячеек памяти и т.д. Типы данных (константы 2 Вопросы лекции: Представление данных адресация входов/выходов, ячеек памяти и т.д. Типы данных (константы и переменные) элементарные составные данные пользователя

>3 ДАННЫЕ - основной элемент обработки в ПЛК, являющийся общим элементом языков и служащий 3 ДАННЫЕ - основной элемент обработки в ПЛК, являющийся общим элементом языков и служащий для связи программных компонентов в одном проекте с данными способен работать стандартный ПЛК (IEC_61131-3) у данных единый формат представления единые общие приемы работы с данными Данные в проекте

>4 Языки МЭК используют идеологию строгой проверки типов данных любая переменная может использоваться -только 4 Языки МЭК используют идеологию строгой проверки типов данных любая переменная может использоваться -только после ее объявления присваивать значение одной переменной другой можно - только если они обе одного типа неявные преобразования типов данных с потерями информации запрещены Тип данных определяет род информации, содержимое диапазон представления список допустимых операций Данные в проекте…

>Методы объявления переменных Локальные (для 1 ФБ) или Глобальные (для всех ФБ) текстовый, табличный Методы объявления переменных Локальные (для 1 ФБ) или Глобальные (для всех ФБ) текстовый, табличный и автоматический Сохраняемые и постоянные переменные Представление данных в CoDeSys Соотношение типов переменных Сохраняемость переменных

>Синтаксис идентификаторов (символьный) буквы и цифры (до 24) должен начинаться с буквы только одинарные Синтаксис идентификаторов (символьный) буквы и цифры (до 24) должен начинаться с буквы только одинарные подчеркивания без пробелов нельзя использовать зарезервированные слова МЭК и операторы регистр не различается Примеры Otto, otto, OTTO Valve1 a_long_name 123 OTTO_?

>Синтаксис идентификаторов (абсолютная адресация) Прямой адрес обозначаются знаком ‘%’ Тип адреса определяется префиксом I Синтаксис идентификаторов (абсолютная адресация) Прямой адрес обозначаются знаком ‘%’ Тип адреса определяется префиксом I вход Q выход M меркер Тип данных X бит None бит B байт (8 бит) W слово (16 бит) D двойное слово (32 бит) Примеры %IW215 %QX1.1 %MD48 %IW215.1 %QX15 или %QX1.9 %MD4.8

>8 в прямом адресе указывается номер элемента если прямой адрес определяет байт → №байта 8 в прямом адресе указывается номер элемента если прямой адрес определяет байт → №байта если слово → №слова → адресует два подряд байта если дв.слово → №дв.слова → адресует 4 подряд байта Прямая адресация…

>9 Распределение области памяти Образование прямых адресов зависит от размера адресуемых данных адрес %MD48 9 Распределение области памяти Образование прямых адресов зависит от размера адресуемых данных адрес %MD48 адресует в области памяти двойное слово 48 или байты 192, 193, 194 и 195 (48 * 4 = 192)

>10 Типы данных элементарные элементарные или базовые типы являются основой для построения составных типов 10 Типы данных элементарные элементарные или базовые типы являются основой для построения составных типов резервируется бит, байт, слово или дв. слово составные перечисления (списки) массивы структуры массивы структур и т.д. данные пользователя (UDT) параметрические данные допускает стандарт МЭК61131

>11 Целые числа могут быть представлены в двоичной восьмеричной десятичной шестнадцатеричной системе исчисления Для 11 Целые числа могут быть представлены в двоичной восьмеричной десятичной шестнадцатеричной системе исчисления Для числовых констант, за исключением десятичных, нужно указывать систему исчисления перед знаком «#» Пример: 2#0100_1110, 8#116, 45, 16#4Е Символ «_» не влияет на значение и используется только для улучшения зрительного восприятия числа Элементарные типы данных

>12 INT - ЦЕЛОЕ ЧИСЛО префикс - показывает размер числа относительно простого слова (16 12 INT - ЦЕЛОЕ ЧИСЛО префикс - показывает размер числа относительно простого слова (16 бит) S (short *1/2) - короткое D (double *2) - двойное L (long *4) - длинное U (unsigned) - указывает на отсутствие знака “-” При начальной инициализации целочисленные переменные получают нулевые значения Если необходимо задать другие начальные значения, это можно сделать непосредственно при объявлении переменной Элементарные типы данных

>13 имеют различный диапазон сохраняемых данных зависит от размера выделяемой памяти бывают any_bit – 13 имеют различный диапазон сохраняемых данных зависит от размера выделяемой памяти бывают any_bit – bit/byte, word, dword, lword 1, 2, 4 и 8 байт sign – sint, int, dint, lint unsign – usint, uint, udint, ulint Целочисленные типы …

>14 Целочисленные типы … 14 Целочисленные типы …

>15 Битовые типы данных Данные типов BYTE, WORD, DWORD, LWORD относятся к стандартному битовому 15 Битовые типы данных Данные типов BYTE, WORD, DWORD, LWORD относятся к стандартному битовому типу ANY_BIT к ним можно обращаться побитно или в целом диапазон значений для этих переменных отсутствует это слова длиной 8, 16, 32 и 64 бит

>16 Битовые типы данных 16 Битовые типы данных

>17 VAR wVar0, wVar1: WORD; (*две переменных типа WORD*) byVar3: BYTE; (*тип BYTE начальное 17 VAR wVar0, wVar1: WORD; (*две переменных типа WORD*) byVar3: BYTE; (*тип BYTE начальное значение 0*) byVar2: BYTE :=16#55; (*тип BYTE начальное значение 55h*) END_VAR byVar2:= 2#1_0_0_0_1_0_0_0; (*равносильно2#1000_1000*) byVar3:= 2#1_0_0_0__1_0_0_0; (*ошибка*) Пример…

>18 BOOL – логический тип данных – бит, принимающий значение FALSE или TRUE («0» 18 BOOL – логический тип данных – бит, принимающий значение FALSE или TRUE («0» или «1») при инициализации по умолчанию FALSE («0») при автоматическом распределении памяти транслятором под битовую переменную выделяется, как правило, 1 байт памяти Переменные типа BOOL, связанные с дискретными входами-выходами или объявленные с прямым битовым адресом, физически представляются одним битом Логические типы данных

>19 VAR bVarl: BOOL :=TRUE; wVar2: WORD; END_VAR при преобразовании значения лог. переменной в 19 VAR bVarl: BOOL :=TRUE; wVar2: WORD; END_VAR при преобразовании значения лог. переменной в целую FALSE дает → «0», a TRUE→ «1» wVar2 := BOOL_TO_WORD(bVarl); (*результат 1*) при обратном преобразовании любого целого в лог. переменную «истина» образует любое ненулевое значение: wVar2 := 0; bVarl := WORD_TO_BOOL(wVar2); (*результат FALSE*) результаты операций, которые дают результат логической операции, можно присваивать переменным типа BOOL: bVarl := wVar2 > 5000; (*результат FALSE*) Пример …

>20 Особыми формами этих типов данных являются двоично-десятичные числа (BCD-числа) и значения счетчика (count), 20 Особыми формами этих типов данных являются двоично-десятичные числа (BCD-числа) и значения счетчика (count), используемые совместно с функциями счетчика BCD не имеют специального идентификатора BCD-число имеет тип данных 16# и использует только цифры от 0 до 9 также тип данных CHAR, который представляет ASCII-символ (литера) Битовые типы данных…

>21 Таблица ASCII… 21 Таблица ASCII…

>22 Таблица ASCII… 22 Таблица ASCII…

>23 Элементарные типы данных… REAL – вещественное число Формат REAL имеет 32 бита и 23 Элементарные типы данных… REAL – вещественное число Формат REAL имеет 32 бита и представляет числа в диапазоне ±10±38 мантисса занимает 23 бита точность представления - 6-7 десятичных чисел Числа с плавающей запятой записываются в формате с точкой 14.0, -120.2, 0.33 в экспоненциальной форме -1.2Е10, 3.1Е7

>24 TIME - отображает интервалы времени интервал не ограничен макс. значением 24 часа числа, 24 TIME - отображает интервалы времени интервал не ограничен макс. значением 24 часа числа, выражающие часовой интервал, должны начинаться с ключевого слова Тime# или Т# в общем случае представление времени состоит из полей: дни (d), часы (h), минуты (т), секунды (s) и миллисекунды (ms) порядок представления должен быть именно такой, хотя ненужные элементы можно опускать поля допускается разделять символом «подчеркивание» Элементарные типы данных… TIME1 := t#1m65s (*ошибка*) TIME1 := t#125s (*правильно*) TIME2 := t#1.2s (*правильно, равно T#1s200ms *)

>25 Элементарные типы данных… типы переменных описываются стандартом ISO 8601 – занимают 4 байта 25 Элементарные типы данных… типы переменных описываются стандартом ISO 8601 – занимают 4 байта памяти (DWORD) дата время суток – в миллисекундах от 0 часов дата и время

>26 Переменная типа DATE хранится в машинном слове как число с фиксированной точкой без 26 Переменная типа DATE хранится в машинном слове как число с фиксированной точкой без знака содержимое переменной соответствует количеству дней, начиная с 01.01.1970 ее представление показывает год, месяц и день, разделенные дефисом DATE#2011-09-23 Элементарные типы данных…

>27 Переменная типа данных TIME_OF_DAY резервирует для себя одно двойное слово содержит количество миллисекунд 27 Переменная типа данных TIME_OF_DAY резервирует для себя одно двойное слово содержит количество миллисекунд с начала суток (со времени 00:00) в виде числа с фиксированной точкой без знака TIME_OF_DAY#00:00:00 TOD#23:59:59.999 Элементарные типы данных…

>28 Составной тип данных… Тип данных DATE_AND_TIME представляет формат времени, состоящий из даты и 28 Составной тип данных… Тип данных DATE_AND_TIME представляет формат времени, состоящий из даты и времени суток допускается использование аббревиатуры DT вместо полного названия типа DATE_AND_TIME. отдельные компоненты DT-переменной закодированы в формате ASCII

>29 Элементарные типы данных… 29 Элементарные типы данных…

>30 Составной тип данных… 30 Составной тип данных…

>31 Данные типа STRING относятся к строковому типу и содержат текстовую информацию каждый символ 31 Данные типа STRING относятся к строковому типу и содержат текстовую информацию каждый символ занимает 1 байт (для WSTRING – 2 байта) выделяются одинарными кавычками ‘STOP’ длина определяется при объявлении и составляет от 1 до 255 символов (80 – по умолчанию), возможен пропуск ‘ ’ в случае, когда начальное значение не задано, то при инициализации будет создана пустая строка Строковые типы данных

>32 Объявление строковой переменной str1 длиной до 20 символов и str2 до 60 символов 32 Объявление строковой переменной str1 длиной до 20 символов и str2 до 60 символов VAR strl: STRING(20); str2: STRING(60) := ‘АВАРИЯ'; END_VAR Строковые типы данных…

>33 Иерархия элементарных типов 33 Иерархия элементарных типов

>34 Данные пользователя … Описание предназначенных для пользователя типов данных (кроме массивов) должно выполняться 34 Данные пользователя … Описание предназначенных для пользователя типов данных (кроме массивов) должно выполняться на уровне проекта объявление типа всегда начинается с ключевого слова TYPE и заканчивается строкой END_TYPE

>35 МАССИВ - множество однотипных элементов с произвольным доступом одномерный многомерный Размерность массива и 35 МАССИВ - множество однотипных элементов с произвольным доступом одномерный многомерный Размерность массива и диапазоны индексов задаются при объявлении <Имя_Maccuвa>:ARRAY [..,..,..] OF ; li1, li2, li3 - нижние пределы индексов hi1, hi2, hi3 - верхние пределы индексов Индексы должны быть целого типа и только положительные, лучше начинать с «0» Составной тип данных …

>36 Пример XYbass: ARRAY [1..10,1..20] OF INT; TxtMsg: ARRAY [0..10] OF STRING(32); Mass1: ARRAY 36 Пример XYbass: ARRAY [1..10,1..20] OF INT; TxtMsg: ARRAY [0..10] OF STRING(32); Mass1: ARRAY [1..6] OF SINT := 1,1,2,2,2,2; Mass2: ARRAY [1..6] OF SINT := 1,1,4(2); Синтаксис доступа к элементам массива <Имя_Maccuвa>[Индекс1, Индекс2, Индекс3] XYbass[2,12]:=1; i:=STR_TO_INT(TXTMSG[4]);

>37 СТРУКТУРА - создает новые типы данных на основе элементов разных базовых типов с 37 СТРУКТУРА - создает новые типы данных на основе элементов разных базовых типов с переменной типа структура можно обращаться как с единым элементом передавать как параметр создавать указатели копировать и т.д. описание структуры происходит глобально, на уровне проекта описанная структура получает идентификатор (имя структуры) имея идентификатор нового типа можно объявить переменные Составной тип данных …

>38 Синтаксис объявления структуры TYPE <Имя_структуры>: STRUCT <Объявление переменной 1> … <Объявление переменной n> 38 Синтаксис объявления структуры TYPE <Имя_структуры>: STRUCT <Объявление переменной 1> … <Объявление переменной n> END_STRUCT END_TYPE Пример …

>39 Пример TYPE Industrial: STRUCT TYPE_FUNK: STRING(40); PRODUCTIVITY: REAL; STATUS, LOAD: BOOL; ARTICLЕ: STRING(40); 39 Пример TYPE Industrial: STRUCT TYPE_FUNK: STRING(40); PRODUCTIVITY: REAL; STATUS, LOAD: BOOL; ARTICLЕ: STRING(40); END_STRUCT END_TYPE Объявление в программе переменной Rect1 типа Industrial и начальная инициализация RECT1: Industrial:=(Status:=‘TRUE’); Доступ к элементам структуры <Имя_переменной>.<Имя_элемента> RECT1.Productivity:=342.567;

>40 ПЕРЕЧИСЛЕНИЕ (СПИСОК) - определяет несколько последовательных значений переменной и присваивает им наименования это 40 ПЕРЕЧИСЛЕНИЕ (СПИСОК) - определяет несколько последовательных значений переменной и присваивает им наименования это новый тип данных, определение которого выполняется на уровне проекта Синтаксис объявления перечисления TYPE <Имя перечисления>: (<Элемент 0>, < Элемент 1>, ... < Элемент n>); END_TYPE Составной тип данных …

>41 переменная типа <Перечисление> может принимать только перечисленные значения при инициализации переменная приобретает первое 41 переменная типа <Перечисление> может принимать только перечисленные значения при инициализации переменная приобретает первое из списка значение если числовые значения элементов перечисления не указаны явно, им присваиваются последовательно растущие числа, начиная с “0” идентификаторы элементов списка используют в программе как значение переменной Составной тип данных …

>42 Пример TYPE DIRECT: (UP:=1, LEFT:=2, DOWN:=3, RIGHT:=4); END_TYPE VAR LiftDirect : DIRECT := 42 Пример TYPE DIRECT: (UP:=1, LEFT:=2, DOWN:=3, RIGHT:=4); END_TYPE VAR LiftDirect : DIRECT := Allegro; END_VAR

>43 Специальные типы данных… Параметрические типы (parameter types) – это типы данных для параметров 43 Специальные типы данных… Параметрические типы (parameter types) – это типы данных для параметров блоков спецификации размеров (длины) в таблице указывают на требующиеся объемы памяти для параметров функциональных блоков также можно использовать TIMER и COUNTER в таблице символов в качестве типов данных для таймеров и счетчиков Пользовательский тип данных (user data type – UDT) соответствует структуре (комбинация компонентов любых типов) с действием на глобальном уровне

>44 Выводы по лекции Все данные, присутствующие в программах, ориентированы на любые операции арифметические 44 Выводы по лекции Все данные, присутствующие в программах, ориентированы на любые операции арифметические логические преобразование Данные допускают изменение типа, но с некоторыми особенностями и без потери значений МЭК расширяет возможности по программированию контроллеров в составе АСУ ТП за счет новых типов данных

>45 Вопросы для обсуждения 1. Дайте определение “данные” 2. Чем определяется размер типа данных 45 Вопросы для обсуждения 1. Дайте определение “данные” 2. Чем определяется размер типа данных 3. Что понимают под термином «неявное преобразование типа данных» 4. Какие преобразования типов данных запрещены в МЭК

>46 Литература…. Стр. 50 – 70 Стр. 57 – 70 Стр. 152-173 Тема следующей 46 Литература…. Стр. 50 – 70 Стр. 57 – 70 Стр. 152-173 Тема следующей лекции…. Общие элементы ПО МПС. Переменные и компоненты программ