Исполнение подпрограмм или функций управляется их родительской программой. Исполнение родительской программы подвешивается до тех пор пока не закончит свою работу подпрограмма:
Любая программа любой секции может иметь одну или несколько подпрограмм. У каждой подпрограммы может быть только одна родительская программа. Подпрограмма может иметь локальные переменные и макроопределения. Для описания подпрограмм может быть использован любой язык, за исключением SFC. Программы секции Функции - это подпрограммы, которые могут быть вызваны любой другой программой в проекте. В отличии от других подпрограмм они не принадлежат никакой родительской программе. Программы секции Функции могут вызывать другие программы этой же секции. Функции могут быть размещены в библиотеке.
Предупреждение: Система ISaGRAF не поддерживает рекурсивных вызовов функций. Если программа секции Функции будет вызывать сама себя или будет вызываться одной из вызванных ею подпрограмм, то возникнет ошибка.
Предупреждение: Функция или подпрограмма не “запоминают” локальных значений своих локальных переменных. Функции и подпрограммы не могут вызывать функциональные блоки.
Интерфейс подпрограммы должен быть определен явно, с типами и уникальными именами каждого вызываемого и возвращаемого параметра. Для того чтобы поддержать стандарт языка ST, возвращаемый параметр должен иметь то же имя, что и подпрограмма.
Следующая таблица показывает, как установить значение возвращаемого параметра в теле подпрограммы, в различных языках:
ST: присвоить значение возвращаемому параметру, используя его имя
(то же имя что и у подпрограммы):
subprog_name := <expression>;
IL: значение текущего результата (IL регистр)
в конце последовательности запоминается в возвращаемом параметре:
LD 10
ADD 20 (*значение возвращаемого параметра = 30*)
FBD: установить возвращаемый параметр, используя имя:
LD: использовать символ витка с именем возвращаемого параметра:
subprog_name