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

## Общие сведения Пользовательская логическая программа Контроллера может состоять из одной или нескольких подпрограмм. Подпрограммы могут быть следующих видов: •невызываемые (основные, регулярные) подпрограммы; •вызываемые стандартные подпрограммы; •вызываемые независимые подпрограммы. Работа со списком подпрограмм см. в одноименном подразделе. ## Невызываемые (основные, регулярные) подпрограммы В ходе функционирования Контроллера данные подпрограммы выполняются последовательно в порядке их расположения в дереве проекта. ## Вызываемые стандартные подпрограммы В ходе функционирования Контроллера данные подпрограммы могут вызываться только из основных подпрограмм при помощи специального алгоблока CALL. Если какая-либо из данных подпрограмм не вызывается из основных подпрограмм, то она не выполняется. Данные подпрограммы работают как функции в языках программирования высокого уровня: им передаются аргументы, и они возвращают один результат. Аргументы в данных подпрограммах (от 1 до 31) кодируются специальными словами ARG1, ARG2, ..., ARG31, а результат возвращается при помощи специального алгоблока FUNC_RES. ## Вызываемые независимые подпрограммы В ходе функционирования Контроллера данные подпрограммы запускаются и останавливаются по условиям (только из основных подпрограмм) при помощи специального алгоблока DYN_CALL. Основное отличие данных подпрограмм: •они имеют возможность прерывать свое выполнение (при помощи специальных алгоблоков: TIMEOUT, DYN_GOTO, DYN_IF_GOTO) на данном такте работы Контроллера и продолжать его с этого же места на следующем такте; •в данные подпрограммы не передаются аргументы (в отличие от вызываемых стандартных подпрограмм). Также в данных подпрограммах часто используются: •отключение/включение формул дискретных выходных каналов (EXCEPTION_RUN, EXCEPTION_STOP) и принудительная установка их состояний (VALUE_FORCE); •исключение уставок каналов (DI, AI и AO) из логики работы выходов (и обратное включение в логику) — алгоблоки LOGIC_DISABLE и LOGIC_ENABLE; •запрет/разрешение на работу в автоматическом и/или каскадном/программном режимах требуемого контура регулирования (REG_MODE_DISABLE и REG_MODE_ENABLE).