Codesys (824048), страница 58
Текст из файла (страница 58)
Для этогоуказывается номер бита, начиная с 0 через точку после имени.a : INT;b : BOOL;...a.2 := b;В примере значение третьего бита переменной a будет присвоено переменной b.Если указанный номер бита превышает размер типа, формируется специальное сообщение: «Index'<n>' outside the valid range for variable '<var>'»Битовая адресация применима для типов :SINT, INT, DINT, USINT, UINT, UDINT, BYTE, WORD,DWORD.Если битовая адресация для данного типа не поддерживается, CoDeSys формирует сообщение:«Invalid data type '<type>' for direct indexing»Битовую адресацию нельзя использовать с переменными VAR_IN_OUT!Битовая адресация через глобальные константыЕсли объявить целую глобальную константу, то ее можно будет затем использовать для доступа к битам. Например, так:Объявление константыVAR_CONSTANT GLOBALenable:int := 1;END_VARПример 1, битовая адресация через константу:Объявление POU:VARxxx:int;END_VARБитовая адресация:xxx.enable := true; (*установлен в единицу второй бит переменной xxx *)Пример 2, битовая адресация к элементу структуры:Объявление структуры stru1:TYPE stru1 :STRUCTbvar: BOOL;rvar: REAL;wvar: WORD;{bitaccess: 'enable' 42 'Start drive'}CoDeSys V2.310-33Приложение В: Операнды в CoDeSysEND_STRUCTEND_TYPEОбъявление POU:VARx:stru1;END_VARБитовая адресация:x.enable := true;Эта инструкция установит 42й бит переменной x.
Поскольку bvar занимает 8 бит, rvar занимает 32 бита, а битовый доступ обращается ко второму биту переменной wvar, получающей в результате значение 4.Внимание: Для правильного отображения переменной, выполняющей битовый доступ к структурам через глобальную константу, в Ассистенте ввода при мониторинге в окне объявления и при использованииинтеллектуального ввода используйте команду компилятора pragma {bitaccess}.
В этом случае, кроме значения переменной, вы увидите и значение данного бита:10.12 АдресаПрямое указание адреса дает способ непосредственного обращения к конкретной области памяти.Прямой адрес образуется из префикса "%", префиксов области памяти и размера, одного или нескольких целых чисел, разделенных точкой.Префиксы области памяти:IВходыQВыходыMПамять данныхПрефиксы размера:CoDeSys V2.3XОдин битОтсутствуетОдин битBБайт (8 бит)10-34Приложение В: Операнды в CoDeSysWСлово (16 бит)DДвойное слово (32 бит)Примеры:%QX7.5 и %Q7.5бит 7.5 в области выходов%IW215215е слово в области входов%QB7байт 7 в области выходов%MD48двойное слово в позиции памяти 48%IW2.5.7.1зависит от конфигурации PLCЯвляется ли последний указанный адрес значимым, будет определяться конкретной конфигурациейPLC.Примечание: По умолчанию логические переменные занимают один байт, если в объявлении не указан прямойбитовый адрес.
См. также битовые операции в приложении A.Распределение памятиОбразование прямых адресов зависит от размера адресуемых данных.Так, например, адрес %MD48 адресует в области памяти двойное слово 48 или байты 192, 193, 194 и195 (48 * 4 = 192). Нумерация начинается с 0.Адрес %MX5.0 означает младший бит пятого (считая с нуля) слова памяти.10.13 Функции в роли операндовВ языке ST результат вызова функции может использоваться как операнд.Пример:Result := Fct(7) + 3;CoDeSys V2.310-35Ошибка! Стиль не определен. - Ошибка! Стиль не определен.Приложение С: Типы данных CoDeSysТип данных определяет род информации и методы ее обработки и хранения, количество выделяемой памяти.
Программист может непосредственно использовать элементарные (базовые) типы данных или создавать собственные (пользовательские) типы на их основе.10.14 Элементарные типы данныхЛогический (BOOL)BOOL логический тип данных. Переменная может принимать 2 значения ИСТИНА (TRUE) или ЛОЖЬ(FALSE). Занимает 8 бит памяти, если не задан прямой битовый адрес (См. «10.12 Ареса»).ЦелочисленныеBYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, и UDINT - все это целочисленные типы.Они отличаются различным диапазоном сохраняемых данных и, естественно, различными требованиямик памяти. Подробно данные характеристики представлены в следующей таблице:ТипНижний пределВерхний пределBYTE02558 БитWORD06553516 БитDWORD0429496729532 Бит-1281278 Бит02558 Бит-327683276716 БитUINT06553516 БитDINT-2147483648214748364732 Бит0429496729532 БитSINTUSINTINTUDINTРазмер памятиОчевидно, присвоение данных большего типа переменной меньшего типа может приводить к потере информации.РациональныеREAL и LREAL данные в формате с плавающей запятой, используются для сохранения рациональныхчисел.
Для типа REAL необходимо 32 бита памяти и 64 для LREAL.Диапазон значений REAL от: 1.175494351e-38F до 3.402823466e+38FДиапазон значений LREAL от: 2.2250738585072014e-308 до 1.7976931348623158e+308СтрокиСтроковый тип STRING представляет строки символов. Максимальный размер строки определяет количество резервируемой памяти и указывается при объявлении переменной. Размер задается в круглых иликвадратных скобках. Если размер не указан, принимается размер по умолчанию – 80 символов.Длина строки не ограничена в CoDeSys, но строковые функции способны обращаться со строками от 1до 255 символов !Пример объявления строки размером до 35 символов:str:STRING(35):='Просто строка';CoDeSys V2.310-36Ошибка! Стиль не определен.
- Ошибка! Стиль не определен.Размер строк в CoDeSys не ограничен, но библиотека работы со строками поддерживает строки от 1 до255 символов.Время и датаTIME представляет длительность интервалов времени в миллисекундах. Максимальное значение длятипа TIME : 49d17h2m47s295ms (4194967295 ms).TOD содержит время суток, начиная с 0 часов.
Диапазон значений TOD от: 00:00:00 до 23:59:59.999.DATE содержит календарную дату, начиная с 1 января 1970 года. Диапазон значений от: 1970-00-00 до2106-02-06.DT содержит время в секундах, начиная с 0 часов 1 января 1970 года. Диапазон значений от: 1970-00-0000:00:00 до 2106-02-06-06:28:15.Типы TIME, TIME_OF_DAY (сокр. TOD), DATE и DATE_AND_TIME (сокр. DT) сохраняются физически как DWORD.Формат представления данных описан в разделе «10.10 Константы».10.15 Пользовательские типы данныхМассивыЭлементарные типы данных могут образовывать одно-, двух-, и трехмерные массивы.
Массивы могутбыть объявлены в разделе объявлений POU или в списке глобальных переменных. Путем вложения массивов можно получить многомерные массивы, но не более 9 мерных ( "ARRAY[0..2] OF ARRAY[0..3]OF …" ).Синтаксис:<Имя_массива>:ARRAY [<ll1>..<ul1>,<ll2>..<ul2>,<ll3>..<ul3>] 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 STRUCT1STRUCTp1:int;p2:int;p3:dword;END_STRUCTARRAY[1..3] OF STRUCT1:= (p1:=1,p2:=10,p3:=4723),(p1:=2,p2:=0,p3:=299),(p1:=14,p2:=5,p3:=112);CoDeSys V2.310-37Ошибка! Стиль не определен. - Ошибка! Стиль не определен.Пример инициализации части массива:arr1 : ARRAY [1..10] OF INT := 1,2;Не инициализированные явно элементы массива принимают значения по умолчанию.
Так, в данном примере оставшиеся элементы примут значение 0.Доступ к элементам массива:Для доступа к элементам двухмерного массива используется следующий синтаксис:<Имя_массива>[Индекс1,Индекс2]Пример:Card_game [9,2]Примечание: Если определить в проекте функцию с именем CheckBounds, вы сможете контролировать нарушениедиапазона индексов массивов в проекте.Функция CheckBoundsОпределив в проекте функцию с именем CheckBounds, вы сможете использовать её для контроля за соблюдением границ индексов. Имя функции фиксировано, изменять его нельзя.Пример функции CheckBounds:FUNCTION CheckBounds : DINTVAR_INPUTindex, lower, upper: DINT;END_VARIF index < lower THENCheckBounds := lower;ELSIF index > upper THENCheckBounds := upper;ELSE CheckBounds := index;END_IFВ этом примере CheckBounds ограничивает индекс массива заданными границами.
Если запрашиваетсяэлемент, отсутствующий в массиве, функция CheckBounds возвращает ближайший элемент.Проверка работы функции CheckBounds:PROGRAM PLC_PRGVARa: ARRAY[0..7] OF BOOL;b: INT:=10;END_VARa[b] := TRUE;CoDeSys V2.310-38Ошибка! Стиль не определен. - Ошибка! Стиль не определен.Внимание: Функция CheckBounds, содержащаяся в библиотеке Check.Lib, представляет собой пример реализации.Прежде чем использовать эту библиотеку, убедитесь, что данная функция работает так, как нужно ввашем случае, либо создайте собственную функцию непосредственно в вашем проекте.УказателиУказатели позволяют работать с адресами переменных или функциональных блоков.Синтаксис:<Имя_указателя>: POINTER TO <Тип данных/Функциональный блок>;Указатели применимы для всех базовых типов данных или функциональных блоков, включая определяемые пользователем.Адреса переменных и функциональных блоков можно получить во время исполнения программы припомощи оператора ADR.