Материал: Основы программирования микроконтроллеров на языке step 7. Слепокуров Ю.С

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

26.4. КОМАНДЫ УСЛОВНОГО ПЕРЕХОДА, ЗАВИСЯЩИЕ ОТ ЗНАЧЕНИЯ БИТОВ CC 1 И CC 0 СЛОВА СОСТОЯНИЯ

Следующие команды перехода прерывают последовательность выполнения вашей программы на основе результата вычислений:

Перейти, если результат = 0 (JZ);

Перейти, если результат < > 0 (JN);

Перейти, если результат > 0 (JP);

Перейти, если результат < 0 (JM);

Перейти, если результат <=0 (JMZ, т.е. меньше или равен нулю);

Перейти, если результат >= 0 (JPZ, т.е. больше или равен нулю);

Перейти, если результат недействителен (JUO, т.е. если одно из чисел в арифметической операции с плавающей точкой не является допустимым числом с плавающей точкой).

Биты слова состояния CC 1 и CC 0 записываются в зависимости от результата предыдущей операции. Сигнальные состояния битов CC 1 и CC 0 слова состояния указывают на условия, представленные в табл. 16.1.

 

 

 

Табл. 16.1

Сигнальное состояние

Результат вычисления

Выполняемая

СС1

СС0

 

команда перехода

0

0

= 0

JZ

1

0

<> 0

JN

0

1

 

 

1

0

> 0

JP

0

1

< 0

JM

0

0

>= 0

JPZ

1

0

 

 

0

0

<= 0

JMZ

0

1

 

 

1

1

UO (недействительно)

JUO

26.5. ЦИКЛИЧЕСКОЕ УПРАВЛЕНИЕ

Команда Цикл (LOOP) используется для многократного вызова раздела программы (см. рис. 16–5). Команда Цикл уменьшает младшее слово аккумулятора 1 на 1. Затем значение в младшем слове аккумулятора 1 проверяется. Если оно не равно 0, то выполняется переход к метке, указанной в операнде команды LOOP; в противном случае выполняется следующая команда.

125

Метка перехода в качестве операнда

Команда LOOP снабжается меткой, которая определяет место, в которое должна вернуться программа. Например, команда LOOP в программе, показанной на рис. 16.3, имеет в качестве операнда метку перехода NEXT. Эта метка сообщает команде о необходимости возврата в программе к оператору T MB10. В этой точке программа обрабатывает раздел А. Команда LOOP возвращается к этой метке столько раз, сколько вы ей укажете. Эта информация предоставляется программе в младшем слове аккумулятора 1. Одним из способов сделать это является установка счетчика цикла и загрузка его в аккумулятор.

начало

Инициализировать счетчик цикла

ИнициализироРаздел А программы L +5 вать счетчик

цикла

 

 

 

NEXT: T MB10

 

 

Уменьшить счетчик

 

 

 

цикла на 1

 

 

 

 

 

Раздел А

 

 

 

 

 

 

 

 

 

 

 

да

Счетчик

 

L MB10

 

 

LOOP NEXT

 

 

цикла <> 0

 

 

 

 

 

 

нет

конец

Рис. 16.3. Использование команды LOOP для многократного вызова раздела программы

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

LOOP:

Если вы инициализируете счетчик цикла нулем, то цикл исполняется 65 535 раз;

Следует избегать инициализации цикла отрицательным числом.

126

27.КОМАНДЫ УПРАВЛЕНИЯ ПРОГРАММОЙ

27.1.НАЗНАЧЕНИЕ ПАРАМЕТРОВ ПРИ ВЫЗОВЕ FC И FB

Терминология

При вызове блоков, требующих параметров, важную роль играют термины:

формальные параметры и фактические параметры.

Формальный параметр – это параметр, имя и тип данных которого были определены и описаны (например, как INPUT, OUTPUT) при создании блока. При вызове блока в редакторе пошагового ввода (например, CALL SFC31) STEP 7 автоматически отображает список формальных параметров.

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

27.2. ВЫЗОВ ФУНКЦИЙ И ФУНКЦИОНАЛЬНЫХ БЛОКОВ С ПОМОЩЬЮ

CALL

С помощью команды вызова (CALL) можно вызывать функции (FC) и функциональные блоки (FB), которые вы сами создали для своей программы или получили от фирмы Siemens в качестве стандартных функций или функциональных блоков. Команда CALL вызывает FC или FB, которую или который вы указали в качестве операнда, независимо от результата логической операции или любого другого условия.

Когда вы вызываете с помощью команды CALL функциональный блок, вы должны снабдить его экземплярным блоком данных (экземплярным DB) или описать его как локальный экземпляр. В этом экземплярном блоке данных сохраняются все статические переменные и фактические параметры функционального блока.

Формальные и фактические параметры

При вызове функции (FC) или функционального блока (FB) вы должны присвоить формальным параметрам, определенным при описании блока, соответствующие фактические параметры.

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

Задание фактических параметров

Фактические параметры, используемые при вызове функции (FC) или функционального блока (FB), задаются, как правило, в виде символических имен. Абсолютная адресация фактических параметров возможна только для

127

операндов, максимальная величина которых составляет двойное слово

(например, I 1.0, MB2, QW4, ID0).

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

При вызове функционального блока команда CALL копирует в экземплярный блок данных функционального блока один из следующих элементов в зависимости от типа данных фактического параметра и описания формального параметра (IN, OUT, IN_OUT):

Значение фактического параметра;

Указатель на операнд фактического параметра;

Указатель на L–стек вызывающего блока, в котором было буферизовано значение фактического параметра.

Вызов FB с экземплярным DB и параметрами блока Вызов может иметь место при вводе следующих элементов:

имени функционального блока;

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

Вызов может использовать абсолютный или символический адрес.

Абсолютный вызов:

CALL FBx, DBy (передача параметров); x = номер блока

y = номер блока данных

Символический вызов:

CALL имя_fb, имя_блока_данных (передача параметров); имя_fb = символическое имя блока

имя_блока_данных = символическое имя блока данных

В следующем примере программы вызывается функциональный блок FB40 с экземплярным блоком данных DB41. В этом примере формальные параметры имеют следующие типы данных: IN1: BOOL, IN2: WORD, OUT1: DWORD

 

AWL

Объяснение

 

CALL FB40, DB41

Вызов FB40 с экземплярным блоком данных DB41.

IN1:=

I1.0

Формальные параметры IN1,IN2 и OUT1

IN2:=

MW2

снабжаются фактическим значениями

OUT1:= MD20

 

 

L MD20

обращение к формальному параметру OUT1

128

Вызов FC с параметрами блока Вызов может иметь место при вводе следующих элементов:

имени функции и

параметров.

Вызов может производиться абсолютно или символически.

Абсолютный вызов:

CALL FCx (передача параметров); x = номер блока

Символический вызов:

CALL имя_fc (передача параметров); имя_fc = символическое имя блока Пример

Следующий пример показывает вызов функции FC80 с параметрами блока. В этом примере формальные параметры имеют следующие типы данных:

INC1: BOOL

INC2: INT

OUT: WORD

 

AWL

Объяснение

CALL FC80

Вызов FC80.

INC1:=

M1.0

Формальные параметры INC1,INC2 и OUT1

INC2:=

IW2

снабжаются фактическим значениями

OUT1:= QW4

 

Вызов FC, поставляющей возвращаемое значение

Вы можете создать функцию (FC), которая поставляет возвращаемое значение (RET_VAL). Например, если вы хотите создать арифметическую функцию, работающую с числами с плавающей точкой, то вы можете использовать это возвращаемое значение для вывода результата этой функции. Когда вы вызываете функцию в своей программе, то вы предоставляете в распоряжение выход RET_VAL с адресом двойного слова, так что он может воспринять 32битовый результат арифметической операции с плавающей точкой.

27.3.ВЫЗОВ ФУНКЦИЙ И ФУНКЦИОНАЛЬНЫХ БЛОКОВ

СПОМОЩЬЮ CC И UC

Вы можете использовать следующие команды для вызова функций (FC) и функциональных блоков (FB), которые вы создали для своей программы, таким же образом, как и команду CALL. Однако, используя эти команды, вы не можете передавать параметры.

Условный вызов (CC): вызывает функцию или функциональный блок, указанную(ый) в качестве операнда, если результат

129

Смотрите также:

12
1673
271
2863
2994
3788
3857
54
5719
605