Назначение адресов и типов данных в языке SCL
Структурированный язык программирования SCL (Structured Control Language) является языком высокого уровня для SIMATIC S7. Язык базируется на стандарте 61131-3 и содержит в себе элементы языка Паскаль вместе с типичными для PLC элементами, такими, как "вход" и "выход".
SCL целесообразно применять для программирования сложных алгоритмов или для задач, которые относятся к области управления данными.
Создание программы осуществляется в редакторе SCL. Исходная программа компилируется с помощью Scl-компилятора в программу пользователя.
Несмотря на то, что элементы языки SCL (операторы, выражения, присвоения значений) отличаются в синтаксисе от инструкций STL, в SCL используются те же типы данных, адресные области, символьные имена и блочная структура.
Для того чтобы создать программу на SCL, нужно сначала создать проект. Дальше в проекте назначить CPU, потому что создаваемая программа зависима от типа CPU. Только после этого создаются необходимые блоки программы.
Исходная Scl-программа может содержать, как минимум, один блок. Можно также создать несколько исходных Scl-программ, которые потом нужно скомпилировать в определенном порядке с использованием управляющего файла компилятора.
При программировании на языке SCL применяются следующие адреса и переменные:
• входы I и выходы Q;
• периферийные входы PI и периферийные выходы PQ;
• адреса глобальных данных D;
• меркеры M;
• временные и статические локальные дани с символьной адресацией;
• организационные блоки ОВ, функциональные блоки FB, функции FC, а также блоки данных DB.
Функции таймеров Т и функции счетчиков С обрабатываются в Scl-программах как стандартные функции.
При назначении типа данных определяются:
• характер и значения данных;
• разрешенные диапазоны, например, числовой диапазон или длина строки символов;
• разрешенные операции для обработки данных.
В SCL есть возможность группирования значений типов данных, которые представляют одинаковое обращение внутри одного класса. Группирование позволяет получить следующие классы:
• класс ANY_INT, который содержит в себе данные типы INT и DINT;
• класс ANY_NUM, который содержит в себе данные типы INT, DINT и REAL;
• класс ANY_BIT, который содержит в себе данные типы BOOL, BYTE, WORD и DWORD.
Указанные классы типов данных позволяют яснее описать операторы. Однако для описания переменных при их объявлении применять указанные классы нельзя.
Особый класс данных представляют константы. Константы – это фиксированные значения, которые при выполнении программы не меняются. Константы используются для предопределения начальных значений переменных или для их объединения (комбинирования) в программе с другими переменными, например, предельными значениями.
В языке SCL константа не определяет "свой" тип данных, пока она не будет обработана в арифметической операции. Например, константа 1234 может относиться к типу данных INT или к типу данных REAL, в зависимости от применения:
int1:= int2 + 1234; //константа INT
real1:= real2 + 1234; //константа REAL
В языке SCL можно назначать тип данных для константы со спецификацией "type-defined", используя соответствующий префикс. Можно, например, определить переменную WORD в разделе объявлений с помощью десятичного, шестнадцатилетнего, восьмеричного или двоичного числа.
Примеры:
W1: WORD :=W#1234; //десятичное
W2: WORD :=W#16#04D2; // шестнадцатилетнее
W3: WORD :=W#8#2322; //восьмеричное
W4: WORD :=W#2#0000_0100_1101_0010; //двоичное
Абсолютный адрес всегда принадлежит к классу типов данных ANY_BIT. Так, например, двойное слово меркеров MD10 имеет тип данных DWORD.
Операнд может иметь тип данных, отличный от ANY_BIT только в двух случаях: если имеет символьное имя и если тип данных преобразован.
MW14 := SHL(IN := MW12, N := 2); //Операнд имеет
//символьное имя
real1 := real2 + DWORD_TO_REAL(MD10); //Тип данных операнда
//преобразован
Строка символов должна вводиться в одинарных кавычках. С данным типом могут также использоваться управляющие символы, которые не печатаются; они должны вводиться в формате $hh, где hh означает значение ASCII символа:
string1:= '$0A$0D'; // красная строка
При абсолютной адресации адреса назначаются согласно началу адресной области; например, I 0.0 (первый бит входного байта 0). Абсолютная адресация в SCL отвечает абсолютной адресации в стандартных языках программирования за исключением образа идентификации адресов глобальных данных (табл. 3.1).
Таблица 3.1 - Идентификация адресов при абсолютной адресации
Адресная область | Бит | Байт | Слово | Двойное слово |
Входы | Iy.x | Iby | Iwy | Idy |
Выходы | Qy.x | Qby | Qwy | Qdy |
Периферийные входы | Piby | Piwy | Pidy | |
Периферийные выходы | Pqby | Pqwy | Pqdy | |
Меркеры | My.x | Mby | Mwy | Mdy |
Адреса глобальных данных | Dbz.Dxy.x Dbz.Dy.x | Dbz.Dby | Dbz.Dwy | Dbz.Ddy |
Примечание: x – адрес бита, y – адрес байта, z – номер блока данных.
В языке программирования SCL доступ к адресам глобальных данных возможен только путем полной адресации. Доступ к блоку данных осуществляется вызовом переменной типа BLOCK_DB.
При символьной адресации символьные имена должны быть назначены абсолютным адресам и переменным. Для глобальных данных имена назначаются в таблице символов, для локальных данных имена назначаются в разделе объявления переменных блока.
Символьная адресация в SCL отвечает символьной адресации в стандартных языках программирования. Можно также использовать смешанные абсолютно-символьные идентификаторы, например:
DB10.Setpoint
“Motor1Data”.DW12
Косвенное использование глобальных адресов базируется на абсолютной адресации. При этом для указания расположения данных в памяти в квадратных скобках указывается:
– две переменных INT, если данные представлены битом;
– одна переменная INT, если данные представлены байтом.
Например:
• I [byteindex.bitindex]; //Данные представлены битом
• MB [byteindex]; //Данные представлены байтом
Здесь byteindex и bitindex являются выражениями типа INT.
Таким образом можно адресовать следующие области:
• периферийные входы PI и периферийные выходы PQ (в обоих этих случаях адрес бита не указывается);
• входы I, выходы Q, меркеры M;
• адреса глобальных данных D (блок данных и адрес данных);
• временные и статические локальные данные (только символьная адресация);
• функции таймеров Т и счетчиков С (адрес бита не указывается).
Синтаксис адресации блока:
DB10.DX [byteindex.bitindex]; //Адрес блока и адрес данных
Motordata.DW [byteindex]; //Символьное имя блока, адрес данных
Здесь byteindex и bitindex являются выражениями типа INT.
Применяя функцию преобразования WORD_TO_BLOCK, можно назначить косвенный адрес блока данных. Номер блока данных DB определяется или как переменная, или как выражения с типом данных WORD:
WORD_TO_BLOCK_DB [dbindex].DW0.
Здесь dbindex – переменная или выражение с типом данных WORD.
Если блок данных адресован косвенным образом, то для доступа к адресу данных не может использоваться символьное имя. Так, например, входной параметр Data можно вызвать такими образами:
• Data.DW0;
• Data.DX2.0;
• Data.DW[byteindex];
• Data.DX[byteindex.bitindex];
Здесь byteindex и bitindex – константы, переменные или выражения типа INT. Индекс может быть изменен в процессе выполнения программы.
Дата добавления: 2016-12-09; просмотров: 4217;