Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Вступительное_слово Содержание




S I E M E N S Промышленные контроллеры SIMATIC S7-300/400 Описание_системы_команд  

                                Содержание

  Стр.
8 Вступительное_слово
8 Работа_с_аккумулятором
8 Команды_битовой_логики
8 Команды_сравнения
8 Команды_преобразования
8 Счетчики
8 Команды_для_работы_с_блоками_данных
8 Команды_переходов
8 Команды_загрузки_и_передачи
8 Математика_с_плавающей_точкой
8 Целочисленная_математика
8 Команды_программного_контроля
8 Команды_сдвигов
8 Таймеры
8 Логика_для_WORD_и_DWORD

Начало


Вступительное_слово                                                            Содержание

Система команд – это тот инструмент, с помощью которого пользователь пишет программу для контроллера. Собственно, речь идет о модуле CPU, который является центральным устройством любого контроллера. Размещенная в энергонезависимой памяти операционная система реального времени дополняет систему команд, предоставляя пользователю множество сервисных функций.

Общее правило состоит в том, что чем старше модель CPU, тем она более производительная, тем больше у нее возможностей.

Рассмотрим области, в которых могут находиться операнды:

· Отображаемые области цифровых входов I и выходов Q (немецкие сокращения E и A соответственно). Программа пользователя не обращается непосредственно к входам/выходам, обращение идет в память, в область отображения.

· Область неотображаемых входов PI и выходов PQ (немецкие сокращения PE и PA соответственно). Программа пользователя обращается непосредственно к этим входам/выходам.

Модули цифровых входов/выходов располагаются в адресном пространстве ввода/вывода, начиная с нулевого адреса, и попадают в область отображения. Модули аналоговых сигналов располагаются сразу за отображаемой областью (начало неотображаемой области адресного пространства ввода/вывода, типичным значением является начальный адрес 256)

· Область локального стека L.

Размер этой области зависит от максимально возможного числа одновременных[1] событий. Старшие модели CPU реагируют на большее число событий, также как и число одновременно обрабатываемых событий у них больше. Суть состоит в том, что для каждой модели CPU в любой момент времени не может возникнуть одновременных событий больше, чем Х (например, для S7-312 IFM Х=2, причем общее число обрабатываемых событий равно 3). С каждым событием жестко связан конкретный организационный блок, то есть ОВ является обработчиком события. Если событие возникло, и пользователь на этапе программирования создал соответствующий ОВ, то возможно управление будет передано этому ОВ. Это произойдет, если приоритет текущего ОВ ниже приоритета вызываемого ОВ.

Содержание


Вступительное_слово

Содержание

Как только ОВ получит управление, он считается активным до того момента, пока не завершится. Каждый активный ОВ имеет свой локальный стек в области локального стека. В этом стеке хранятся временные переменные, как самого ОВ, так и все фактические параметры, локальные переменные функций и функциональных блоков, вызываемых из данного ОВ. Для примера, снова вернемся к модели CPU S7-312 IFM, область локального стека имеет размер 512 байт, что позволяет одновременно открыть только два ОВ, по 256 байт на блок.

· Область меркеров М используется для хранения рабочих параметров, промежуточных результатов, каких-либо флагов и так далее. Если операционная система контроллера обслуживает Ваш запрос (например, Вы вызвали функциональный системный блок), то следует учитывать, что SFB или SFC могут использовать область меркеров для работы со своими переменными. Обычно SFB и SFC используют старшие адреса, поэтому пользователю рекомендуется использовать память меркеров, начиная с младших адресов.

· Глобальные блоки данных DB

· Локальные блоки данных DI

· Таймеры Т и счетчики С (немецкое обозначение Z)

· Регистры процессора

Операнды могут принадлежать одному из множества допустимых типов:

· BOOL

· BYTE

· CHAR – символьный тип, например “А”, длина 1 байт

· WORD

· DWORD

· INT – целое число со знаком, длина 1 слово (Integer)

· DINT – длинное целое число со знаком, длина 2 слова (Long Integer)

· REAL – число с плавающей точкой, формат представления IEEE, длина 2 слова

· TIME – текущее время, длина 2 слова

· TIME_OF_DAY – время дня, длина 2 слова

· S5TIME – совместимость с серией S5, длина 1 слово

· DATE – дата, длина 1 слово

· DATE_AND_TIME – сложный тип данных, длина 4 слова

· ARRAY – сложный тип данных, массив

· STRING – сложный тип данных, строка

· UNDEF – неопределенный тип

Содержание


Вступительное_слово

Содержание

TIME

Интервал   [-24d20h31m23s647ms … +24d20h31m23s647ms]

Формат соответствует DINT, единица измерения 1 ms

Пример:      T#5h10s

Рассмотрим еще один пример:

T#24d59s999ms ® 7B99 8A5F h

T# -24s                 ® FFFF A240 h

Небольшое отступление.

Как получить -24 [s]? Ответ:

24 [s] = 5DC0 h [ms] = 00000000 00000000 01011101 11000000 [ms]

Теперь вычитаем 1 и инвертируем, в результате получится:

11111111 11111111 10100010 01000000 = FFFF A240 h. То есть получили -24 [s].

Естественно, обратное преобразование (инвертируем, затем прибавляем 1) позволяет из отрицательного числа получить положительное.

TIME_OF_DAY

Интервал   [00: 00: 00. 000 … 23: 59: 59. 999]

Формат соответствует DWORD, единица измерения 1 ms, значение 00: 00: 00. 000 – полночь.

Пример:      TOD#00: 18: 25. 207

                     TOD#07: 10: 02

Миллисекунды указывать необязательно.

S5TIME – Совместимость_с_серией_S5, длина 1 слово

Интервал   [0 ms … 2h46m30s]

Пример:      S5T#10ms

                     S5T#1h15m20s

Рассмотрим более подробно используемый формат:

Напомним общее правило. Адресация слова, двойного слова осуществляется по адресу старшего байта (более значащие разряды), так как он располагается в памяти по младшему адресу.

Биты 15, 14 не используются

Биты 13, 12 определяют базис времени:

Бит 13 Бит 12 Базис времени В этом случае рабочий диапазон составляет
0. 01 s [10ms … 9s990ms]
0. 1 s [100ms … 1m39s900ms]
1 s [1s … 16m39s]
10 s [10s … 2h46m30s]

Содержание


Вступительное_слово

Содержание

Биты 11, 10, 9, 8 – старшая BCD цифра, определяет число сотен

Биты 7, 6, 5, 4 – средняя BCD цифра, определяет число десятков

Биты 3, 2, 1, 0 – младшая BCD цифра, определяет число единиц

Эти три BCD цифры определяют значение коэффициента в диапазоне [0 … 999]. Зная значения базиса и коэффициента, можно рассчитать заданное время:

ВРЕМЯ: = Коэффициент * Базис;

DATE

Интервал   [1990-01-01 … 2168-12-31]

Формат соответствует WORD, единица измерения 1 день, нулевое значение соответствует дате 1990-01-01.

Пример:      D#1998-11-23

DATE_AND_TIME

Интервал   [1990-01-01/00: 00: 00. 000 … 2089-12-31/23: 59: 59. 999]

Пример:      DT#1996-09-15-19: 54: 15. 228

Для записи данных такого типа используются 8 байтов, содержимое представляется в BCD формате. Как Вы помните, старший байт располагается в памяти по младшему адресу.

Значащие разряды Условный адрес байта Адрес байта в заголовке ОВ1 Назначение Диапазон значений
Ст. байт Год [00 … 99], значение 00 соответствует 1990
  Мес [01 … 12]
  День [01 … 31]
  Час [00 … 23]
  Мин [00 … 59]
  Сек [00 … 59]
  ms В данном байте находятся 2 старшие ms, определяя сотни и десятки [00x … 99x]
Мл. байт ms Старшая тетрада задает единицы ms [0 … 9] Младшая тетрада содержит день недели [1 … 7], значение 1 соответствует Sunday (Воскресенье)

Относительно столбца “Адрес байта в заголовке ОВ1” хотелось бы сделать некоторые пояснения.

Содержание


Вступительное_слово

Содержание

Как Вы знаете, каждый активный ОВ имеет стек в области локального стека. В момент вызова ОВ, в его стек автоматически записывается заголовок. Среди прочей информации, в заголовке присутствуют дата и время запуска ОВ. Эти дата и время размещены по приведенным в таблице адресам.

Наряду с переменными, в качестве операнда могут использоваться константы:

Константа Пример
Константой является группа символов в ASCII коде L     ‘ABC’
2 или 4 байта L     B#(100, 12) L     B#(50, 8, 3, 72)
BYTE, WORD или DWORD, представленные в 16-ричной системе L     B#16#F7 L     W#16#12 L     DW#16#EECD03E1
WORD или DWORD, представленные в 2-ичной системе L     2#1000111101010011 L 2#11110000111100001010101011101110
Константа типа INT L     -27
Константа типа DINT L     L#19346458
Константа типа REAL L     -8014. 01
Константа типа TIME L     T#500ms L     T#1d5h3m21s2ms
Константа типа TIME OF DAY L     TOD#12: 31: 05. 314
Константа типа S5TIME L     S5T#10ms
Константа типа DATE L     D#1996-05-22

Указатель на адрес

Формат константы соответствует формату адресного регистра, что дает возможность указать не только адрес, но и область, в которой должен находиться операнд.

L     P#22. 1 //Не указывая конкретно в какой области должен

//находиться операнд, сообщается, что этим операндом будет бит,

//расположенный по адресу 22. 1

L     P#Q22. 1     //В отличие от предыдущего примера, в данном

//случае дополнительно сообщается, что операнд будет именно из

//области выходов

 

Содержание


Вступительное_слово

Содержание

Замечание относительно использования указателя. Если указатель должен указывать на байт, слово или двойное слово, то необходимо задавать адрес байта и номер бита, причем номер бита должен быть равен 0 (L P#124. 0). Данное требование обусловлено специфичным форматом адресных регистров.

Приведем несколько примеров адресации:

AN I3. 7               //Адресуется входной бит

L  MB4             //Загружается в ACCU1 меркерный байт

T  QW0            //Передается слово на выход

L  PIW258       //Читаем аналоговое значение

OPN DB3             //Открываем блок данных

L  DB3. DBB14 //Читаем 14 байт в этом блоке

L  DB3. DBX0. 5 //Там же читаем 5-тый бит из нулевого байта

Общий формат команды при использовании косвенной адресации:

< команда> YX [адресный регистр, указатель], где Y определяет область нахождения операнда (и его указывать не обязательно), X задает размер операнда (B – байт, W – слово, D – двойное слово). Приведем пример:

L  B [AR1, P#8. 0]

Данная команда загружает байт в ACCU1. Адрес этого байта представляет собой сумму адресов: адресный регистр AR1 и адрес 8. 0. Область, в которой должен находиться операнд, определяется адресным регистром. Например, адресный регистр можно проинициализировать двумя командами:

L  P#Q116. 0

LAR1 //Таким образом, AR1 будет указывать на область выходов

Еще один пример косвенной адресации:

L  MB [AR2, P#12. 0]

Второй пример отличается от первого тем, что явно задана область нахождения операнда (байт из области меркеров)

Выше были рассмотрены примеры абсолютной адресации. STEP7 дает пользователю возможность работать с именами. Такая адресация носит название символьной.

В заключение отметим, что SIEMENS постоянно совершенствует свои изделия, поэтому при работе с этим документом следует учитывать фактор старения информации. Обращайтесь за актуальной информацией к официальным партнерам фирмы SIEMENS, либо непосредственно в SIEMENS.

Как в процессе подготовки, так и после завершения работы над документом, мы проверяли его на отсутствие ошибок, неточностей и опечаток. Однако мы не гарантируем полное их отсутствие. Поэтому, во всех неясных случаях советуем обращаться к оригиналу.

Содержание


Работа_с_аккумулятором                                      Содержание

Команды данной группы не зависят и не воздействуют на регистр флагов:

8 Декремент_Аккумулятора

8 Инкремент_Аккумулятора

8 Вталкивание_в_старшие_Аккумуляторы

8 Выталкивание_из_старших_Аккумуляторов

8 Загрузка_старших_Аккумуляторов

8 Разгрузка_старших_Аккумуляторов

8 Поменять_содержимое_Аккумуляторов

8 Загрузка_первого_адресного_регистра

8 Загрузка_второго_адресного_регистра

8 Холостые_команды

Содержание


Работа_с_аккумулятором

Содержание

1. Декремент_Аккумулятора

Формат:       DEC < byte>

Описание. ACCU1_LL: =ACCU1_LL - < byte>

2. Инкремент_Аккумулятора

Формат:       INC < byte>

Описание. ACCU1_LL: =ACCU1_LL + < byte>

3. Вталкивание_в_старшие_Аккумуляторы

Формат:       PUSH

Описание. На всех моделях CPU имеется два Аккумулятора, а на нескольких более производительных – четыре. Для случая двух Аккумуляторов выполняется присваивание ACCU2: =ACCU1. Для четырех Аккумуляторов выполняются три присваивания ACCU4: =ACCU3, ACCU3: =ACCU2, ACCU2: =ACCU1.

4. Выталкивание_из_старших_Аккумуляторов

Формат:       POP

Описание. Действие данной команды противоположно предыдущей. В случае двух Аккумуляторов действие состоит в присваивании ACCU1: =ACCU2. Для четырех Аккумуляторов выполняются три присваивания ACCU1: =ACCU2, ACCU2: =ACCU3, ACCU3: =ACCU4.

5. Загрузка_старших_Аккумуляторов

Формат:               ENT

Описание. Данная команда работает только в том случае, если в модуле процессора контроллера имеется четыре аккумулятора. Она загружает старшие Аккумуляторы ACCU4: =ACCU3, ACCU3: =ACCU2, ACCU2 и ACCU1 без изменения.

6. Разгрузка_старших_Аккумуляторов

Формат:       LEAVE

Описание. Данная команда работает только в том случае, если в модуле процессора контроллера имеется четыре аккумулятора. Она разгружает старшие Аккумуляторы ACCU2: =ACCU3, ACCU3: =ACCU4, ACCU1 и ACCU4 без изменения.

7. Поменять_содержимое_Аккумуляторов

Формат:       TAK

Описание. Содержимое ACCU1 и ACCU2 меняется местами.

Содержание


Работа_с_аккумулятором

Содержание

8. Загрузка_первого_адресного_регистра

Формат:       +AR1, либо +AR1 P#byte. bit

Описание. Сначала рассмотрим команду +AR1. В этом случае берется значение из ACCU1_L. CPU рассматривает его как целое число со знаком в диапазоне от -32768 до +32767, т. е. integer. Выполняется корректное преобразование этого числа в 24-ех битное смещение, которое затем суммируется с содержимым AR1 (осуществляется сложение адресов: адреса из адресного регистра AR1 и полученного смещения). Результирующий адрес сохраняется в AR1.

В команде +AR1  P#byte. bit к содержимому AR1 добавляется содержимое указателя. Таким образом, осуществляется сложение двух адресов: адреса из адресного регистра AR1 и адреса, на который указывает данный указатель. Результирующий адрес сохраняется в AR1.

Замечание. Расширение до 24-ех бит является следствием специфичности формата адресного регистра.

9. Загрузка_второго_адресного_регистра

Формат:               +AR2, либо +AR2  P#byte. bit

Описание. Алгоритм работы данной команды аналогичен алгоритму работы предыдущей команды.

10. Холостые_команды

Описание. Существует три холостых команды:

· Холостая команда BLD < byte> с параметром от 0 до 255

· Холостая команда NOP 0, состоящая из одних нулей

· Холостая команда NOP 1, состоящая из одних единиц

Иногда они применяются для тестовых целей, иногда для наглядности.

Содержание


Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...