Главная страница

Руководство пользователя по программированию плк в CoDeSys 3


Скачать 5.57 Mb.
НазваниеРуководство пользователя по программированию плк в CoDeSys 3
Дата25.10.2022
Размер5.57 Mb.
Формат файлаpdf
Имя файлаCODESYS_manual.pdf
ТипРуководство пользователя
#754593
страница38 из 50
1   ...   34   35   36   37   38   39   40   41   ...   50
указывает необходимый тип. Это может быть: BOOL, SINT, USINT, BYTE, INT, UINT,
WORD, DINT, UDINT, DWORD, REAL, LREAL. Тип нужно указывать заглавными буквами.
указывает значение константы.
Пример:
var1:=DINT#34;
Если значение константы не соответствует требуемому типу, CoDeSys выдаст соответствующее сообщение об ошибке.
Переменные
Переменные могут быть объявлены либо как локальные в разделе определений POU, либо как глобальные - в списке глобальных переменных.
Внимание: Глобальная и локальная переменные могут иметь одинаковое имя. В POU, где объявлена такая локальная переменная, она оказывается «сильнее» одноименной глобальной. Использовать од- ноименные глобальные переменные нельзя (например, объявленные в конфигурации контролле- ра и в списке глобальных переменных).
Имя переменной (идентификатор) не должно содержать пробелов и спецсимволов, не должно объ- являться более одного раза и не должно совпадать с ключевыми словами. Регистр символов не учитывается, это означает, что VAR1, Var1 и var1 - это одна и та же переменная.
Символ подчеркивания является значимым, т.е. "A_BCD" и "AB_CD" - это разные имена.
Имя должно включать не более одного символа подчеркивания. Ограничений на длину имени нет.
Область применения переменной задается ее типом. Список всех объявленных переменных в
CoDeSys доступен через ассистент ввода (Input Assistant).
Системные флаги
Системные флаги - это неявно объявленные переменные, различные для конкретных моделей PLC.
Для получения списка доступных системных флагов используйте команду "
Вставка
" "
Операнд
"
("
Insert
" "
Operand
"). В диалоге "
Ассистент ввода
" (
Input Assistant
) флаги собраны в разделе
System Variable.
Синтаксис доступа к элементам массивов, структур и POU
Элемент двумерного массива:
<ИмяМассива>[Индекс1, Индекс2]
Переменная структуры:
<ИмяСтруктуры>.<ИмяПеременной>
Переменная программы или функционального блока:
<ИмяФункциональногоБлока>.<ИмяПеременной>
Доступ к битам в переменных
В целочисленных переменных существует возможность обращаться к отдельным битам. Для этого указывается номер бита, начиная с 0 через точку после имени.
a : INT; b : BOOL; a.2 := b;

Приложение В: Операнды в CoDeSys
CoDeSys V2.3 10-30
В примере значение третьего бита переменной a будет присвоено переменной b.
Если указанный номер бита превышает размер типа, формируется специальное сообщение: «Index
'' outside the valid range for variable '
Битовая адресация применима для типов :SINT, INT, DINT, USINT, UINT, UDINT, BYTE, WORD,
DWORD.
Если битовая адресация для данного типа не поддерживается, CoDeSys формирует сообщение:
«Invalid data type '' for direct indexing»
Битовую адресацию нельзя использовать с переменными VAR_IN_OUT!
Битовая адресация через глобальные константы
Если объявить целую глобальную константу, то ее можно будет затем использовать для доступа к битам. Например, так:
Объявление константы
VAR_CONSTANT GLOBAL enable:int := 1;
END_VAR
Пример 1, битовая адресация через константу:
Объявление POU:
VAR xxx:int;
END_VAR
Битовая адресация:
xxx.enable := true; (*установлен в единицу второй бит переменной xxx *)
Пример 2, битовая адресация к элементу структуры:
Объявление структуры stru1:
TYPE stru1 :
STRUCT bvar: BOOL; rvar: REAL; wvar: WORD;
{bitaccess: 'enable' 42 'Start drive'}
END_STRUCT
END_TYPE
Объявление POU:
VAR x:stru1;
END_VAR
Битовая адресация: x.enable := true;
Эта инструкция установит 42й бит переменной x. Поскольку bvar занимает 8 бит, rvar занимает 32 бита, а битовый доступ обращается ко второму биту переменной wvar, получающей в результате значение 4.

Приложение В: Операнды в CoDeSys
CoDeSys V2.3 10-31
Внимание: Для правильного отображения переменной, выполняющей битовый доступ к структурам через глобальную константу, в Ассистенте ввода при мониторинге в окне объявления и при использо- вании интеллектуального ввода используйте команду компилятора pragma {bitaccess}. В этом случае, кроме значения переменной, вы увидите и значение данного бита:
Адреса
Прямое указание адреса дает способ непосредственного обращения к конкретной области памяти.
Прямой адрес образуется из префикса "%", префиксов области памяти и размера, одного или не- скольких целых чисел, разделенных точкой.
Префиксы области памяти:
I
Входы
Q
Выходы
M
Память данных
Префиксы размера:
X
Один бит
Отсутствует
Один бит
B
Байт (8 бит)
W
Слово (16 бит)
D
Двойное слово (32 бит)
Примеры:
%QX7.5 и %Q7.5 бит 7.5 в области выходов
%IW215 215е слово в области входов
%QB7 байт 7 в области выходов
%MD48 двойное слово в позиции памяти 48
%IW2.5.7.1 зависит от конфигурации PLC
Является ли последний указанный адрес значимым, будет определяться конкретной конфигураци- ей PLC.
Примечание: По умолчанию логические переменные занимают один байт, если в объявлении не указан пря- мой битовый адрес. См. также битовые операции в приложении A.

Приложение В: Операнды в CoDeSys
CoDeSys V2.3 10-32
Распределение памяти
Образование прямых адресов зависит от размера адресуемых данных.
Так, например, адрес %MD48 адресует в области памяти двойное слово 48 или байты 192, 193, 194 и 195 (48 * 4 = 192). Нумерация начинается с 0.
Адрес %MX5.0 означает младший бит пятого (считая с нуля) слова памяти.
Функции в роли операндов
В языке ST результат вызова функции может использоваться как операнд.
Пример:
Result := Fct(7) + 3;

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-33
Приложение С: Типы данных CoDeSys
Тип данных определяет род информации и методы ее обработки и хранения, количество выделяемой па- мяти. Программист может непосредственно использовать элементарные (базовые) типы данных или соз- давать собственные (пользовательские) типы на их основе.
Элементарные типы данных
Логический (BOOL)
BOOL логический тип данных. Переменная может принимать 2 значения ИСТИНА (TRUE) или ЛОЖЬ
(FALSE). Занимает 8 бит памяти, если не задан прямой битовый адрес (См. «10.12 Ареса»).
Целочисленные
BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, и UDINT - все это целочисленные типы.
Они отличаются различным диапазоном сохраняемых данных и, естественно, различными требованиями к памяти. Подробно данные характеристики представлены в следующей таблице:
Тип
Нижний предел Верхний предел
Размер памяти
BYTE
0 255 8 Бит
WORD
0 65535 16 Бит
DWORD
0 4294967295 32 Бит
SINT
-128 127 8 Бит
USINT
0 255 8 Бит
INT
-32768 32767 16 Бит
UINT
0 65535 16 Бит
DINT
-2147483648 2147483647 32 Бит
UDINT
0 4294967295 32 Бит
Очевидно, присвоение данных большего типа переменной меньшего типа может приводить к потере ин- формации.
Рациональные
REAL и LREAL данные в формате с плавающей запятой, используются для сохранения рациональных чисел. Для типа REAL необходимо 32 бита памяти и 64 для LREAL.
Диапазон значений REAL от: 1.175494351e-38 до 3.402823466e+38
Диапазон значений LREAL от: 2.2250738585072014e-308 до 1.7976931348623158e+308
Строки
Строковый тип STRING представляет строки символов. Максимальный размер строки определяет коли- чество резервируемой памяти и указывается при объявлении переменной. Размер задается в круглых или квадратных скобках. Если размер не указан, принимается размер по умолчанию – 80 символов.
Длина строки не ограничена в CoDeSys, но строковые функции способны обращаться со строками от 1 до 255 символов !
Пример объявления строки размером до 35 символов:
str:STRING(35):='Просто строка';

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-34
Размер строк в CoDeSys не ограничен, но библиотека работы со строками поддерживает строки от 1 до
255 символов.
Время и дата
Ÿ
TIME представляет длительность интервалов времени в миллисекундах. Максимальное значение для типа TIME : 49d17h2m47s295ms (4194967295 ms).
Ÿ
TIME, TIME_OF_DAY (сокр. TOD) содержит время суток, начиная с 0 часов (с точностью до мил- лисекунд). Диапазон значений TOD от: 00:00:00 до 23:59:59.999.
Ÿ
DATE содержит календарную дату, начиная с 1 января 1970 года. Диапазон значений от: 1970-00-00 до 2106-02-06.
Ÿ
DATE_AND_TIME (сокр. DT) содержит время в секундах, начиная с 0 часов 1 января 1970 года.
Диапазон значений от: 1970-00-00-00:00:00 до 2106-02-06-06:28:15.
Типы, TOD, DATE и DT сохраняются физически как DWORD.
Формат представления данных описан выше в разделе «Константы».
Пользовательские типы данных
Массивы
Элементарные типы данных могут образовывать одно-, двух-, и трехмерные массивы. Массивы могут быть объявлены в разделе объявлений POU или в списке глобальных переменных. Путем вложения мас- сивов можно получить многомерные массивы, но не более 9 мерных ( "ARRAY[0..2] OF ARRAY[0..3]
OF …" ).
Синтаксис:
<Имя_массива>:ARRAY [..,..,..] OF <базовый тип> где ll1, ll2, ll3 указывают нижний предел индексов; ul1, ul2 и ul3 указывают верхние пределы.
Индексы должны быть целого типа. Нельзя использовать отрицательные индексы.
Пример:
Card_game: ARRAY [1..13, 1..4] OF INT;
Пример инициализации простых массивов:
arr1 : ARRAY [1..5] OF INT := 1,2,3,4,5; arr2 : ARRAY [1..2,3..4] OF INT := 1,3(7);
(* сокращение для 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 *)
Пример инициализации массива структур:
TYPE STRUCT1
STRUCT p1:int; p2:int; p3:dword;
END_STRUCT
ARRAY[1..3] OF STRUCT1:= (p1:=1,p2:=10,p3:=4723),(p1:=2,p2:=0,p3:=299),
(p1:=14,p2:=5,p3:=112);

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-35
Пример инициализации части массива:
arr1 : ARRAY [1..10] OF INT := 1,2;
Не инициализированные явно элементы массива принимают значения по умолчанию. Так, в данном примере оставшиеся элементы примут значение 0.
Доступ к элементам массива:
Для доступа к элементам двухмерного массива используется следующий синтаксис:
<Имя_массива>[Индекс1,Индекс2]
Пример:
Card_game [9,2]
Примечание: Если определить в проекте функцию с именем CheckBounds, вы сможете контролировать нарушение диапазона индексов массивов в проекте.
Функция CheckBounds
Определив в проекте функцию с именем CheckBounds, вы сможете использовать её для контроля за со- блюдением границ индексов. Имя функции фиксировано, изменять его нельзя.
Пример функции CheckBounds:
FUNCTION CheckBounds : DINT
VAR_INPUT index, lower, upper: DINT;
END_VAR
IF index < lower THEN
CheckBounds := lower;
ELSIF index > upper THEN
CheckBounds := upper;
ELSE CheckBounds := index;
END_IF
В этом примере CheckBounds ограничивает индекс массива заданными границами. Если запрашивается элемент, отсутствующий в массиве, функция CheckBounds возвращает ближайший элемент.
Проверка работы функции CheckBounds:
PROGRAM PLC_PRG
VAR a: ARRAY[0..7] OF BOOL; b: INT:=10;
END_VAR a[b] := TRUE;

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-36
Внимание: Функция CheckBounds, содержащаяся в библиотеке Check.Lib, представляет собой пример реализации.
Прежде чем использовать эту библиотеку, убедитесь, что данная функция работает так, как нужно в вашем случае, либо создайте собственную функцию непосредственно в вашем проекте.
Указатели
Указатели позволяют работать с адресами переменных или функциональных блоков.
Синтаксис:
<Имя_указателя>: POINTER TO <Тип данных/Функциональный блок>;
Указатели применимы для всех базовых типов данных или функциональных блоков, включая опреде- ляемые пользователем.
Адреса переменных и функциональных блоков можно получить во время исполнения программы при помощи оператора ADR. Для обращения через указатель необходимо добавить оператор "^" (content) после его имени.
Обратите внимание: Указатели инкрементируются побайтно! Для увеличения указателя, как это принято в C- компиляторах, используйте инструкцию p=p+SIZEOF(p^);.
Пример:
pt:POINTER TO INT; var_int1:INT := 5; var_int2:INT; pt := ADR(var_int1); var_int2 := pt^;
(* var_int2 теперь равна 5 *)
Функция CheckPointer:
Данная функция позволяет контролировать обращение к допустимой области памяти через указатели.
Если определена функция CheckPointer, то она будет автоматически вызываться при любом обращении через указатель. Функция должна быть определена в проекте (непосредственно или в библиотеке). Ее имя (CheckPointer) изменять нельзя. Функция имеет следующие параметры:

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-37
Для систем с 32-х битными указателями:
FUNCTION CheckPointer : DWORD
VAR_INPUT dwAddress : DWORD; iSize : INT; bWrite: BOOL;
END_VAR
Для систем с 16-и битными указателями:
FUNCTION CheckPointer : WORD
VAR_INPUT dwAddress : WORD; iSize : INT; bWrite: BOOL;
END_VAR

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-38
Функция возвращает адрес, который будет использоваться как указатель. Если все хорошо, то это будет входной параметр – dwAddress.
Перечисление
Перечисление - это определяемый пользователем тип данных, задающий несколько строковых псевдонимов для числовых констант. Перечисление доступно в любой части проекта, даже при локальном его объявлении внутри POU. Поэтому наиболее разумно создавать все перечисления на вкладке “
Типы данных
” (
Data types
) Организатора Объектов
(Object Organizer). Объявление должно начинаться с ключевого слова TYPE и заканчиваться строкой END_TYPE.
Синтаксис:
TYPE <Имя_перечисления>:(<Элемент_0> ,< Элемент _1>, ...< Элемент _n>);
END_TYPE
Переменная типа <Имя_перечисления> может принимать только перечисленные значения. При инициализации переменная получает первое из списка значение. Если числовые значения элемен- тов перечисления не указаны явно, им присваиваются последовательно возрастающие числа, на- чиная с 0. Фактически элемент перечисления - это число типа INT и работать с ними можно точно также. Можно напрямую присвоить число переменной типа перечисление.
Пример:
TYPE TRAFFIC_SIGNAL: (Red, Yellow, Green:=10);
(*Каждому цвету соответствует свое значение, для red - это 0, для yellow - 1 и для green - 10
*)
END_TYPE
TRAFFIC_SIGNAL1 : TRAFFIC_SIGNAL;
TRAFFIC_SIGNAL1:=0;
(*Переменная получила значение red*)
FOR i:= Red TO Green DO i := i + 1;
END_FOR
Элемент, уже включенный в перечисление, нельзя повторно включать в другое перечисление.
Пример:
TRAFFIC_SIGNAL: (red, yellow, green);
COLOR: (blue, white, red);
Ошибка: попытка повторного использования элемента TRAFFIC_SIGNAL red в COLOR.
Структуры
Структуры создаются на вкладке “
Типы данных
” (
Data types
) Организатора Объектов
(Object
Organizer). Объявление должно начинаться с ключевых слов TYPE и STRUCT и заканчиваться строками END_STRUCT и END_TYPE.
Синтаксис:
TYPE <Имя _структуры>:
STRUCT
<Объявление переменной 1>
<Объявление переменной n>
END_STRUCT

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-39
END_TYPE
<Имя _структуры> образует новый тип данных, который может быть использован в любой части проекта наряду с базовыми типами.
Вложенные структуры допускаются. Единственное ограничение заключается в запрете размеще- ния элементов структуры по прямым адресам (AT объявления недопустимы!).
Пример объявления структуры по имени Polygонлайн:
TYPE Polygонлайн:
STRUCT
Start:ARRAY [1..2] OF INT;
Point1:ARRAY [1..2] OF INT;
Point2:ARRAY [1..2] OF INT;
Point3:ARRAY [1..2] OF INT;
Point4:ARRAY [1..2] OF INT;
End:ARRAY [1..2] OF INT;
END_STRUCT
END_TYPE
Пример инициализации структуры:
Poly_1:polygонлайн := ( Start:=3,3, Point1 =5,2, Point2:=7,3, Point3:=8,5,
Point4:=5,7, End := 3,5);
Для доступа к элементам структуры используется следующий синтаксис:
<Имя_структуры>.<Имя_компонента>
Например, структура "Week" содержит компонент "Monday", обращение к которому будет выгля- деть так:
Week.Monday
Псевдонимы типов
Псевдонимы типов нужны для создания альтернативных пользовательских наименований типов данных. Это удобно при работе с большим числом однотипных констант, переменных и функцио- нальных блоков.
Псевдонимы типов определены на вкладке “
Типы данных
” (
Data types
) Организатора Объектов
(Object Organizer). Объявление должно начинаться с ключевого слова TYPE и заканчиваться строкой END_TYPE.
Синтаксис:
TYPE <Имя псевдонима>: <Исходное имя>;
END_TYPE
Пример:
TYPE message: STRING[50];
END_TYPE;
Ограничение диапазона значений
Ограничение диапазона позволяет объявить переменную, значения которой ограничены в опреде- ленных пределах. Существует возможность создать в проекте новые типы данных с ограниченным диапазоном значений либо задать диапазон непосредственно при объявлении переменной.

Приложение С: Типы данных CoDeSys
CoDeSys V2.3 10-40
Создание нового типа выглядит так:
1   ...   34   35   36   37   38   39   40   41   ...   50


написать администратору сайта