Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программная_инженерия_лекция_13

.pdf
Скачиваний:
88
Добавлен:
15.02.2015
Размер:
763.74 Кб
Скачать

Технология программирования микропроцессорных систем.

© О.А. Кудин. Лицензия CC-BY-NC-ND

ЛЕКЦИЯ 13. Функции, процедуры и функциональные блоки

13.1Применение функций и функциональных блоков

Впрограмме пользователя на любом языке программирования можно применять разные типы программных блоков, которым можно передавать фактические параметры и получать на выходе результаты расчетов. Можно пользоваться как готовыми библиотечными блоками

(функции, процедуры, элементарные функциональные блоки). Для удобства принято общее название функций, процедур и функциональных блоков – FFB (Function & Function Block).

Функция (Elementary Functions – EF) – библиотечный программный блок, который может иметь несколько входов и только один выход.

Функция не имеет внутренней памяти, т.е. она не может сохранять расчетные значения между вызовами. Выход функции всегда однозначно зависит от состояний ее входов.

Процедура (Procedure) – библиотечный программный блок, который может иметь несколько входов и несколько выходов. Кроме наличия нескольких выходов, отличие процедуры от функции заключается в возможности применения параметров типа VAR_IN_OUT (вход-выход).

Параметр VAR_IN_OUT позволяет передавать в процедуру переменные или адрес ячейки памяти, которую процедура может изменить.

Элементарный функциональный блок (Elementary Function Block, EFB) – готовый библиотечный функциональный блок, который имеет внутреннюю память. Он может сохранять промежуточные расчетные значения между вызовами. Перед использованием функционального блока в программе пользователя создается экземпляр функционального блока

(FB instance), которому присваивают уникальное имя.

Просмотр, создание и удаление функциональных блоков в UNITY PRO выполняется в разделе «Variables & FB Instance -> Elementary FB Instance». Альтернативный способ создания экземпляра блока – выбор

1

Технология программирования микропроцессорных систем.

© О.А. Кудин. Лицензия CC-BY-NC-ND

типа функционального блока из библиотеки непосредственно в программе пользователя. В этом случае UNITY PRO предлагает создать экземпляр блока перед его вставкой в программу.

Функциональные блоки пользователя (производные функциональные блоки, Derived Function Block, DFB) – это функциональные блоки, которые разрабатываются пользователями с помощью средств разработки UNITY PRO. Сначала в разделе проекта «Derived FB Types» разрабатывается DFB-

тип, на основе которого потом создаются экземпляры блоков. Применение экземпляров DFB аналогично применению EFB.

13.2 Создание функциональных блоков пользователя (DFB)

Часто возникают задачи, которые обрабатывают данные по одинаковым алгоритмам. Для того чтобы не повторять одинаковый код программы с разными данными несколько раз, вызывается один и тот же код с разными фактическими параметрами. На основе этого принципа реализованы библиотечные функции, процедуры и функциональные блоки.

В UNITY PRO отсутствует возможность передачи параметров в подпрограммы. Для создания подпрограмм используются DFB.

Для применения DFB в UNITY PRO сначала разрабатывается DFB-

тип (DFB Type) в разделе проекта «Derived FB Types». На основании этого типа создаются экземпляры блоков.

Процесс создания DFB-типа похож на создание структурного блока

DDT. При этом указывается имя типа, описывается интерфейс и внутренняя структура типа (рис. 13.1). Интерфейс блока (формальные параметры) описывается входами (Inputs), выходами (Outputs) и входами-

выходами (Inputs/Outputs).

2

Технология программирования микропроцессорных систем.

© О.А. Кудин. Лицензия CC-BY-NC-ND

Рисунок 13.1 – Пример создания функционального блока.

Программа функционального блока описывается в разделе Sections.

Секции могут быть созданы на языках LD, ST, IL или FBD. В секциях можно использовать только входы, выходы, входы-выходы, локальные переменные или экземпляры и глобальные переменные функционального блока, библиотечные функции и процедуры.

Кроме интерфейсной части, тип может содержать локальные данные,

которые размещаются в разделе «private». Локальные данные являются памятью функционального блока, которая инкапсулирована в его экземпляр и недоступна для внешних программ.

Для обеспечения возможности доступа к переменным функционального блока (без описания их в интерфейсе), их определяют как глобальные в разделе Public.

13.3 Стандартная библиотека FFB

Стандартная библиотека (StandardLib или BaseLib) содержит наиболее часто применяемые FFB. Для удобства поиска в менеджере библиотеки типов все FFB объединены в семейства. Некоторые из них составляют базу элементов FFB, без которой невозможно написать

3

Технология программирования микропроцессорных систем.

© О.А. Кудин. Лицензия CC-BY-NC-ND

программу на языке FBD (математические функции, функции сравнения,

логические функции, статистические функции). Однако эти самые FFB

можно применять и в других языках программирования. В табл. 13.1

приведены некоторые из этих функций.

Таблица 13.1

13.4 Математические функции стандартной библиотеки

Математические функции предназначены для выполнения таких базовых операций как сложение, вычитание, умножение, деление,

присваивание, а также тригонометрических, экспоненциальных и других математических функций. Базовые математические операторы, в

4

Технология программирования микропроцессорных систем.

© О.А. Кудин. Лицензия CC-BY-NC-ND

основном, предназначены для языка FBD, так как в других языках используются соответствующие операторы.

Большинство функций в библиотеке можно применить для разных типов данных (INT, DINT, UINT, UDINT, REAL). Например, для сложения целых чисел применяется функция ADD_INT или универсальная функция

ADD.

Все математические функции, рассмотренные в табл. 13.1, имеют один выход – результат выполнения. Функция SUB (вычитание) и DIV

(деление) имеют по два входа, функции ADD (сложение) и MUL

(умножение) могут иметь от 2-х до 32-х входов (количество входов выбирается после вставки блока), все остальные – один вход.

На рис. 13.2 показан пример использования математических функций для реализации зависимостей:

X A B C D E F G ;

H

Y A B C D E F G ;

Z A B C D E F G .

Рисунок 13.2 – Пример использования математических функций в FBD

5

Технология программирования микропроцессорных систем.

© О.А. Кудин. Лицензия CC-BY-NC-ND

Все переменные, которые использованы в этом примере, имеют одинаковый тип.

Функция NEG (изменение знака) делает результат обработки функции ADD отрицательным и записывает значение в выход, к которому привязана переменная Y. В функции DIV (деление) значения первого входа

(результат ADD) делиться на значение второго входа (переменная H), а

результат записывается в переменную Х.

В процессе выполнения математических функций или математических расчетов в ST-выражениях возможен выход за допустимый диапазон выходной переменной (тип выходной переменной может не вместить результат операции). В этом случае системный бит

%S18 примет значение TRUE. Для корректной работы программы необходимо предусмотреть такую ситуацию и по возможности контролировать этот системный бит. Если необходимо учитывать результат операции, то входные переменные функций преобразовываются в другой тип (например, с INT в DINT), чтобы выходная переменная могла сохранить результат операции.

6