Kok написав:
Спасибо! Значит придется руками... Поэтому еще один вопрос: какой синтаксис вызова DFB блока в ST?
Такой же как и при вызове обычного EFB:
-----------------------------------------------------------------------
Існують два способи виклику функцій: формальний і неформальний виклик (рис.3.36).
При формальному виклику вказуються формальні параметри і відповідні їм фактичні параметри. Формальний виклик має такі особливості:
- кожному вхідному параметру через оператор ":=" присвоюється значення фактичного параметру;
- порядок перерахунку параметрів немає значення;
- це єдиний спосіб використати неявні параметри EN та ENO, наприклад:
Код:
(*в цьому виклику алгоритм LIMIT буде оброблений тільки при a=TRUE, у змінну var2 буде записаний результат успішності обробки функції *)
out:=LIMIT (EN:=a, MN:=0, IN:=var1, MX:=5, ENO=>var2) ;
- при виклику можна вказувати тільки потрібні параметри, наприклад:
Код:
(*в цьому виклику відсутній параметр MX *)
out:=LIMIT (MN:=0, IN:=var1) ;
При неформальному виклику фактичні параметри в функції вказуються в порядку їх слідування. Неформальний виклик має такі особливості:
- порядок перерахунку фактичних параметрів повинен співпадати з порядком формальних;
- неявні параметри EN та ENO використовувати не можна;
- якщо немає необхідності у вказівці якогось параметру - ставиться пропуск, за винятком останнього параметру, наприклад:
Код:
(*в цьому виклику відсутній параметр MN *)
out:=LIMIT ( ,var1, 5 + var1) ;
(*в цьому виклику відсутній параметр MX *)
out:=LIMIT (0 ,var1) ;
Виклик функції дозволяє включати виклик наступних (вкладених) функцій. Глибина вкладеності необмежена. Виключенням є виклик вкладених функцій, що повертають в якості результату масив (ANY_ARRAY). Приклад вкладеного виклику:
Код:
(*в цьому виклику результат виклику функції MUL записується у вхід IN функції LIMIT *)
out:=LIMIT (MN:=4, IN:=MUL(IN1:=var1, IN2:=var2), MX:=5) ;