Вызовы функций и функциональных блоков
Стандартные ST вызовы функций могут быть использованы для каждого из следующих объектов:
- Подпрограммы
- Библиотечные функции и функциональные блоки, написанные на IEC языках
- “C” функции и функциональные блоки
- Функции преобразования типов
Вызовы подпрограмм или функций
Имя: имя вызываемой подпрограммы или библиотечной функции написанной на IEC языке или “C”
Значение: вызывает ST, IL, LD, или FBD подпрограммы или функции или “C” функции и дает возвращаемое значение
Синтаксис: <variable> := <subprog> (<par1>,...<parN>);
Операнды: За типом возвращаемого значения и параметрами вызова должен следовать интерфейс определенный для подпрограммы
Возвращаемое значение: значение возвращаемое подпрограммой
Вызовы подпрограмм могут быть использованы в выражении. Они также могут быть использованы в переходах SFC.
Пример 1: вызов подпрограммы
(* Основная ST программа *)
(* получает аналоговое значение и превращает его во временное значение *)
ana_timeprog := SPlimit ( tprog_cmd );
appl_timer := tmr (ana_timeprog * 100);
(* Вызывается FBD программа 'SPlimit' *)
Пример 2: Вызов функции
(* функции использующиеся в сложных выражениях: min, max, right, mlen and left - стандартные "C" функции *)
limited_value := min (16, max (0, input_value) );
rol_msg := right (message, mlen (message) - 1) + left (message, 1);
Вызов функциональных блоков
Имя: имя экземпляра функционального блока
Значение: вызывает функциональный блок из библиотеки ISaGRAF или библиотеки пользователя и передает возвращаемые параметры
Синтаксис: (* вызвать функциональный блок *)
<blockname> ( <p1>, <p2> ... );
(получить возвращаемые параметры *)
<result> := <blockname>. <ret_param1>;
...
<result> := <blockname>. <ret_paramN>;
Операнды: Параметры и выражения, которые имеют тот же тип, что и параметры этого функционального блока
Возвращаемое значение: См. Синтаксис получения возвращаемых параметров
Смотрите библиотеку ISaGRAF для того, чтобы найти значение и тип каждого параметра функционального блока. Экземпляр функционального блока (имя копии) должно быть объявлено в словаре.
Пример:
(*вызов функционального блока ST программой *)
(* объявить экземпляр функционального блока в словаре: *)
(* trigb1 : block R_TRIG - определение переднего фронта*)
(* активизация функционального блока из языка ST *)
trigb1 (b1);
(* доступ к возвращаемым параметрам *)
If (trigb1.Q) Then nb_edge := nb_edge + 1; End_if;