Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Краткий справочник по STL

.pdf
Скачиваний:
933
Добавлен:
16.02.2016
Размер:
4.28 Mб
Скачать

S I E M E N S

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

Содержание

S7-300/400 Система команд

Описание

 

 

 

 

 

 

 

 

Стр.

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

4

 

 

 

 

 

 

 

 

 

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

10

 

 

 

 

 

 

 

 

Команды_битовой_логики

13

Команды_сравнения

22

Команды_преобразования

25

Счетчики

33

 

 

 

 

 

 

 

Команды_для_работы_с_блоками_данных

37

Команды_переходов

39

Команды_загрузки_и_передачи

44

Математика_с_плавающей_точкой

49

 

 

 

 

 

 

Целочисленная_математика

53

 

 

 

 

 

Команды_программного_контроля

61

Команды_сдвигов

66

Таймеры

72

Логика_для_WORD_и_DWORD

77

 

 

 

 

 

 

 

 

 

Начало

3

S7-300/400 Система команд

Описание

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

Содержание

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

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

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

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

Область неотображаемых входов PI и выходов PQ (немецкие

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

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

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

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

Содержание

1 Под выражением “Одновременные события” понимается ситуация, когда в процессе обработки предыдущего события формируется новое, более приоритетное событие, и т.д. То есть, образуется цепочка вложенных обработчиков событий.

4

S7-300/400 Система команд

Описание

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

Как только ОВ получит управление, он считается активным до того момента, пока не завершится. Каждый активный ОВ имеет свой локальный стек в области локального стека. В этом стеке хранятся временные переменные, как самого ОВ, так и все фактические параметры, локальные переменные функций и функциональных блоков, вызываемых из данного ОВ. Для примера, снова вернемся к модели 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 – неопределенный тип

Содержание

5

S7-300/400 Система команд

Описание

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

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

0

0.01 s

[10ms … 9s990ms]

0

1

0.1 s

[100ms … 1m39s900ms]

1

0

1 s

[1s … 16m39s]

1

1

10 s

[10s … 2h46m30s]

Содержание

6

S7-300/400 Система команд

Описание

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

Биты 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

 

 

 

Ст. байт

0

 

12

Год

[00 … 99], значение 00

 

 

 

 

 

соответствует 1990

 

1

 

13

Мес

[01 … 12]

 

 

2

 

14

День

[01 … 31]

 

 

3

 

15

Час

[00 … 23]

 

 

4

 

16

Мин

[00 … 59]

 

 

5

 

17

Сек

[00 … 59]

 

 

6

 

18

ms

В данном байте находятся 2

 

 

 

 

 

старшие

ms, определяя

 

 

 

 

 

сотни и десятки [00x … 99x]

Мл. байт

7

 

19

ms

Старшая

тетрада задает

 

 

 

 

 

единицы ms [0 … 9]

 

 

 

 

 

Младшая тетрада содержит

 

 

 

 

 

день недели [1 … 7],

 

 

 

 

 

значение

1 соответствует

 

 

 

 

 

Sunday (Воскресенье)

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

сделать некоторые пояснения.

 

 

 

 

 

 

Содержание

 

 

7

S7-300/400 Система команд

Описание

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

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

 

Наряду

с переменными,

в качестве операнда могут

использоваться константы:

 

 

 

 

Константа

 

 

Пример

1

Константой является

 

L

‘ABC’

 

группа символов в ASCII

 

 

 

коде

 

 

 

 

 

2

2 или 4 байта

 

 

L

B#(100,12)

 

 

 

 

 

L

B#(50,8,3,72)

3

BYTE,

WORD

или

L

B#16#F7

 

DWORD, представленные

L

W#16#12

 

в 16-ричной системе

 

L

DW#16#EECD03E1

4

WORD

или

DWORD,

L

2#1000111101010011

 

представленные

в

2-

L

2#11110000111100001010101011101110

 

ичной системе

 

 

 

 

5

Константа типа INT

 

L

-27

6

Константа типа DINT

 

L

L#19346458

7

Константа типа REAL

 

L

-8014.01

8

Константа типа TIME

 

L

T#500ms

 

 

 

 

 

L

T#1d5h3m21s2ms

9

Константа типа TIME OF

L

TOD#12:31:05.314

 

DAY

 

 

 

 

 

10

Константа типа S5TIME

L

S5T#10ms

11

Константа типа DATE

 

L

D#1996-05-22

12Указатель на адрес Формат константы соответствует формату адресного регистра, что дает

возможность указать не только адрес, но и область, в которой должен

находиться операнд.

LP#22.1 //Не указывая конкретно в какой области должен //находиться операнд, сообщается, что этим операндом будет бит, //расположенный по адресу 22.1

LP#Q22.1 //В отличие от предыдущего примера, в данном //случае дополнительно сообщается, что операнд будет именно из //области выходов

Содержание

8

S7-300/400 Система команд

Описание

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

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

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

AN

I3.7

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

L

MB4

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

T

QW0

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

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

OPN DB3

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

L

DB3.DBB14

//Читаем 14 байт в этом блоке

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

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

Приведем пример:

LB [AR1, P#8.0]

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

LP#Q116.0

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

LMB [AR2, P#12.0]

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

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

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

информацией к официальным партнерам фирмы SIEMENS, либо непосредственно в SIEMENS.

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

Содержание

9

S7-300/400 Система команд

Описание

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

Содержание

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

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

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

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

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

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

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

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

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

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

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

Содержание

10

S7-300/400 Система команд

Описание

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

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 меняется местами.

Содержание

11