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