Адресация переменных в блоке
При адресации переменных используются два основных варианта:
• абсолютная адресация (absolute addressing);
• символьная адресация (symbol addressing).
Абсолютная адресация переменных
При абсолютной адресации используются численные адреса, начиная с адреса "0". Такой принцип применяется для каждой адресной области.
При символьной адресации используются символьные имена, которые задаются для глобальных адресов в таблице символов (Symbol Table), а для локальных – в разделе объявления переменных (declaration section) внутри блоков.
Для расширения возможностей абсолютной адресации используется косвенная адресация (indirect addressing), при которой адрес (местоположение) в памяти вычисляется во время выполнения программы.
Абсолютные адреса входов и выходов рассчитываются, исходя из начального адреса модуля, который указан в таблице конфигурации, и типа сигнала, который подводится к модулю.
Дискретный сигнал содержит один бит информации. Примерами дискретных сигналов являются входные сигналы от конечных выключателей, кнопок и т.п., которые поступают на дискретные входные модули, а также выходные сигналы, которые управляют лампами, контакторами и т.п. и поступают на дискретные выходные модули.
Аналоговый сигнал содержит 16 бит информации, что отвечает одному каналу. Он занимает в контроллере машинное слово (word), то есть 2 байта. Динамический диапазон сигнала отвечает динамическому диапазону переменной, которая обрабатывается и сохраняется. Динамический диапазон изменения сигнала и интерпретация этого сигнала, например, относительное положение, взятые вместе, определяют тип данных переменной.
Дискретным сигналам отвечают переменные типа BOOL (булева переменная), аналоговым сигналам – типа INT (целочисленная переменная).
Определяющим фактором для адресации переменной является ее тип, от которого зависит необходимая величина области памяти для размещения переменной.
В системе STEP 7 существуют 4 типа данных для абсолютной адресации:
1 бит тип данных BOOL;
8 бит тип данных BYTE или другой 8-битовый тип данных;
16 бит тип данных WORD или другой 16-битовый тип данных;
32 бита тип данных DWORD или другой 32-битовый тип данных.
На рисунке 1.8 показанная схема адресации для исходных данных, которые представляются битом, байтом, словом и двойным словом.
Рисунок 1.8 - Схема адресации данных, представленных битом, байтом, словом и двойным словом
Ссылка на переменные типа BOOL осуществляются с помощью идентификатора адреса, номера байта и отделенного десятичной точкой номера бита. Нумерация байтов начинается с нуля в каждой адресной области. Биты внутри байтов нумеруются от 0 до 7.
Примеры:
I 1.0 входной бит с номером 0 в байте номер 1.
Q 16.4 выходной бит с номером 4 в байте номер 16.
Для переменных типа BYTE как абсолютный адрес используется идентификатор адреса и номер байта, в котором находится значение переменной. Идентификатор адреса дополнен символом B.
Примеры:
IB 2 входной байт номер 2.
QB 18 выходной байт номер 18.
Переменные типа WORD состоят из двух байтов (слово). Как абсолютный адрес используется идентификатор адреса и номер младшего байта машинного слова, в котором содержится значение переменной. Идентификатор адреса такой переменной дополняется символом W.
Примеры:
IW 4 входное слово номер 4, содержит байты 4 и 5.
QW 20 выходное слово номер 20, содержит байты 20 и 21.
Переменные типа DWORD состоят из четырех байтов (двойное слово). Как абсолютный адрес используется идентификатор адреса и номер младшего байта двойного слова, в котором содержится значение переменной. Идентификатор адреса дополняется символом D.
Примеры:
ID 8 входное двойное слово содержит байты 8, 9, 10 и 11.
QD 24 выходное двойное слово содержит байты 24, 25, 26 и 27.
При адресации данных в DB указывается номер этого блока данных.
Примеры:
DB 10.DBX 2.0 бит данных 2.0 в блоке данных DB 10.
DB 11.DBB 14 байт данных 14 в блоке данных DB 11.
DB 20.DBW 20 слово данных 20 в блоке данных DB 20.
DB 22.DBD 10 двойное слово данных 10 в блоке данных DB 22.
Косвенная (побочная) адресация
Косвенная адресация (indirect addressing) позволяет рассчитывать адреса в области данных во время выполнения программы. Языки программирования STL и SCL используют разные методы для косвенной адресации. В STL различают следующие виды адресации:
• Косвенная адресация с помощью памяти (Memory-indirect-addressing). Так, например, IW [MD 200] означает, что адрес находится в двойном слове памяти меркеров.
• Косвенная внутризонная адресация выполняется с помощью регистра (Register-indirect area-internal addressing). Так, например, IW [AR1, P#2,0] означает, что адрес слова данных из области входов находится в адресном регистре AR1 и при выполнении оператора он должен быть увеличен на величину сдвига P#2,0.
• Косвенная межзонная адресация с помощью регистра AR. Так, например, W [AR1, P#0,0] означает, что область и адрес находятся в адресном регистре AR1. При выполнении оператора адрес должен быть увеличен на величину сдвига P#0,0 (в данном примере сдвиг отсутствует).
Двойные слова адресной области для данных (DBD и DID), меркеров (MD) и временных локальных данных (LD) могут использоваться для хранения адресов при косвенной адресации с помощью памяти.
Косвенную адресацию с помощью регистра можно применять с использованием двух адресных регистров – AR1 и AR2.
При использовании языка программирования SCL адресные области составляются из поля, элементы которого доступны косвенно и отдельно.
Например, MW[index] – это обращение к слову памяти, адрес которого размещен в переменной index. Переменная index может определяется в процессе выполнения программы.
Символьная адресация переменных
Символьная адресация (symbolic addressing) использует имена (символы) вместо абсолютных адресов. Разработчик назначает эти имена самостоятельно. Имя должно начинаться с буквы и может содержать до 24 символов. В STL не разрешено использовать ключевые слова как имена (символы). Для того, чтобы использовать ключевые слова как имена, в SCL нужно вставить перед именем символ решетки "#".
При присвоении имен входам учитывается регистр написания символа. Для имен выходов редактор использует регистр и нотацию (форму записи), которые были применены при объявлении символа.
В таблице символов (symbol table) глобальные символы можно назначить следующим объектам:
· Блоки данных и кодовые блоки.
· Входы, выходы, периферийные входы и периферийные выходы.
· Меркеры, таймеры и счетчики.
· Пользовательские типы данных.
· Таблицы переменных.
Глобальный символ может содержать пробелы, специальные символы и национальные символы, например, умляут. Каждый такой символ должен быть уникальным (однозначно принадлежать одному адресу) в этой программе.
Локальные символы действуют только внутри блока, в котором они описаны. Такие же символы могут быть применены в другом блоке в другом контексте для обозначения совсем других объектов. Редактор отображает локальные символы (имена), вставляя с впереди символ "#".
В случае использования массивов доступ к отдельным элементам массивов обеспечивается использованием имени массива с индексом. Так, например, имя MSERIES[1] принадлежит первому элемента массива MSERIES. В случае программирования на STL индекс должен быть константой (INT). В случае программирования на SCL индекс может быть как целым числом (INT), так и выражением.
В структурах каждый элемент имени (subname) отделяется от других элементов десятичной точкой, например, FRAME.HEADER.CNUM.
Компоненты пользовательских типов данных адресуются точно также как и компоненты структур.
Символьная адресация данных предполагает использование полного адреса, включая адресу блока данных. Например, если блок данных с символьным адресом MVALUES содержит переменные MVALUE1, MVALUE2 и MTIME, то эти переменные могут быть адресованы так:
MVALUES. MVALUE1
MVALUES. MVALUE2
MVALUES. MTIME
Дата добавления: 2016-12-09; просмотров: 6536;