# Вызов подпрограммы | Типовые задачи Предыдущий Следующий

## Общие сведения Наименование: 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 // Она равна ARG1 3, если ARG2 равен логической единице // или ARG1 5, если 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