Особенности использования формальных параметров

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

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

В СЗ00 формальные параметры передаются через стек. Причем используются два способа передачи (см. табл. 4.5):

1) по значению;

2) по ссылке.

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

Таблица 4.5: Назначение формальных параметров.

Тип формального параметра Способ передачи Реальные операнды, которые могут быть назначены в качестве формального параметра данного типа
BI по значению nEx.y, nAx.y, Mx.y, константы любого формата
BY по значению nEBx, nABx, MBx, DRx, DLx, константы любого формата
W по значению nEWx, nAWx, MWx, DWx, словные константы любого формата
G по значению nEGx, nAGx, MGx, DGx, вещественные константы любого формата
T по ссылке Tx
Z по ссылке Zx
Q по ссылке QBx
BL по ссылке OBn, PBn, FBn (без формальных параметров)
DB по ссылке DBn

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

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

Пример заголовка функционального блока:

INPUT

PAR1:BI

PAR2:T

PAR3:BY

PAR4:W

PAR5:BL

OUTPUT

PAR6:W

PAR7:Z

Функциональный блок имеет доступ к копиям в стеке реальных операндов, переданных в качестве PAR1, PAR3, PAR4, но их изменения при завершении блока будут потеряны. Блок имеет также доступ к операндам PAR2, PAR5, PAR7 и к копии PAR6. Поскольку PAR2, PAR5, PAR7 передаются по ссылке, а PAR6 описан как выходной, их изменения будут сохранены. Реальные операнды, переданные по ссылке, при изменении их командой функционального блока изменяются в момент выполнения этой команды.

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

Константы могут назначаться только в качестве входного формального параметра. При назначении в качестве формального параметра типа BI константы передается младший (нулевой) бит константы. При назначении в качестве формального параметра типа BY словной константы передается младший байт константы.

ПРИМЕР:

Посчитать выражения 20 + 3, 14 + 15, 5 + 8, и записать результаты в АВ3, АВ4 и АВ5 соответственно.

OB1:

SPA FB 3; безусловный вызов функционального блока

X1=20; с входными параметрами 20 и 3,

X2=3

Y=AB3; и выходным параметром АВ 3.

SPA FB 3

X1=14

X2=15

Y=AB4

SPA FB 3

X1=5

X2=8

Y=AB5

BE

FB 3 (заголовок в первом сегменте):

INPUT

X1:BY

X2:BY

OUTPUT

Y:BY

(программа во втором сегменте):

LW =X1

ADD =X2

= =Y

BE


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: