Вызов подпрограммы

Типовые задачи  Предыдущий  Следующий

Общие сведения

Наименование: CALL.

Тип выхода: вещественный или логический.

Количество аргументов: от 1 до 32.

Примечание по входам/аргументам

порядок входов: «Подпрограмма», «Аргумент 1», «Аргумент 2», ...;

первый вход: «Подпрограмма» — наименование вызываемой подпрограммы;

входы 2, 3, ...: «Аргумент 1», «Аргумент 2», ... — значения, передаваемые в вызываемую подпрограмму;

признак инверсии первого входа («Подпрограмма») игнорируется;

входы 32, 31, ... («Аргумент31», «Аргумент30», ...) можно не указывать (начиная с последних).

В упрощенной логике (формулах) аналоговых выходных каналов можно использовать только следующие вариатны вызовов, в которых от 0 до 3 аргументов (без учета наименования вызываемой подпрограммы):

CALL(<Название п/п>)

CALL2(<Название п/п>; <Арг1>)

CALL3(<Название п/п>; <Арг1>; <Арг2>)

CALL4(<Название п/п>; <Арг1>; <Арг2>; <Арг3>)

Функционирование

Из текущей невызываемой подпрограммы вызывается подпрограмма (функция) с наименованием, указанным в первом аргументе («Подпрограмма»). При необходимости вызываемой подпрограмме передаются от 1 до 31 аргумента.

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

Не допускается использование данного алгоблока в вызываемых подпрограммах!

Функционирование различных видов подпрограмм приведено в Приложении Б, подраздел Описание логической программы.

Особенности работы в условных операторах с выражениями

Обратите внимание, что в выражениях вида:

B10 = IF(DO1.1; [CALL(MY_PROG1)]; [CALL(MY_PROG2)])

обе подрограммы, MY_PROG1 и MY_PROG2, будут выполнены (до работы оператора IF).

Пример использования

//====================================

// Пример 1

// Вызываемая подпрограмма HYPOTENUSE

B1 = SQR(ARG1)

B2 = SQR(ARG2)

B3 = ADD(B1; B2)

B4 = SQRT(B3)

B5 = FUNC_RES(B4)

 

// Основная подпрограмма

B1 = CALL(HYPOTENUSE; AI1.1; AI1.2)

B2 = RESULT(AO1.1; B1)

B3 = CALL(HYPOTENUSE; AI2.1; AI2.2)

B4 = RESULT(AO1.2; B3)

//====================================

// Пример 2

// Вызываемая подпрограмма POWER

// Она равна ARG13, если ARG2 равен логической единице

// или ARG15, если ARG2 равен логическому нулю.

B1 = MUL(ARG1; ARG1; ARG1)

B2 = FUNC_RES(B1)

B3 = IF_EXIT(ARG2)

B4 = MUL(B1; ARG1; ARG1)

B5 = FUNC_RES(B4)

 

// Основная подпрограмма

B1 = CALL(POWER; 2; 1)

B2 = RESULT(AO1.1; B1) // АО1.1 будет равен 8 

B3 = CALL(POWER; 2; 0)

B4 = RESULT(AO1.2; B3) // АО1.2 будет равен 32