Навигация:
<< >> Оглавление Указатель

Описание пользователя

Глава 3. Использование стандартных модулей автокомпиляции

§3.5. Окно редактора модели

§3.5.2. Статические переменные блока

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

Статические и динамические переменные блока задаются на вкладке «переменные» дополнительной (левой) панели окна редактора модели. Если эта панель отключена, ее можно снова включить пунктом меню «вид | переменные и события».

Вкладка переменные дополнительной панели

Рис. 336. Вкладка «переменные»
дополнительной панели

Вкладка (рис. 336) разделена по вертикали на две части: в верхней вводятся статические переменные, в нижней – динамические (границу раздела можно перетаскивать вверх и вниз левой кнопкой мыши). Задание динамических переменных описываются в §3.5.3.

Статические переменные используются как входы и выходы блока, а также для хранения промежуточных значений. Статическими эти переменные называются потому, что они создаются перед подключением модели к блоку и, хотя их значения и изменяются в процессе работы, их структура остается постоянной. Технически RDS позволяет моделям блоков изменять структуру и типы своих статических переменных в процессе работы при помощи специальных вызовов, но эта возможность используется редко и не поддерживается стандартными модулями автокомпиляции. Таким образом, в автокомпилируемой модели набор статических переменных с их именами и и типами остается постоянным в течение всего времени жизни блока.

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

Входы и выходы – основные роли статических переменных блока. Большинство блоков, как стандартных, так и пользовательских, занимаются тем, что считывают полученные по связям от других блоков значения со своих входов и вычисляют по ним значения своих выходов, которые точно так же, по связям, передаются в другие блоки. Простейший пример модели блока, выдающего на выход сумму двух своих входов, приведен в §3.2. Если у блока нет входов или выходов, к нему невозможно подключить связи, и он может обмениваться информацией с другими только через вызовы функций или динамические переменные – такие блоки тоже встречаются, но гораздо реже. Внутренние статические переменные используются, в основном, для хранения промежуточных значений.

Возможные типы переменных блока, поддерживаемые RDS, подробно описаны в §1.4. Все они, за исключением произвольного, то есть программно изменяемого, типа, поддерживаются стандартным модулем автокомпиляции. Таким образом, статическая переменная в автокомпилируемом блоке может иметь один из следующих типов:

Первые две переменные простого блока всегда представляют собой сигнальный вход и сигнальный выход, пользователь не может ни удалить их, ни изменить их роль и тип – их можно только переименовать. Сигнальный вход (по умолчанию он называется «Start») разрешает срабатывание модели блока, если в параметрах блока не установлен флажок «запуск каждый такт». Сигнальный выход (по умолчанию – «Ready») сообщает подключенным к нему блокам об успешном срабатывании данного блока. Подробнее эти фиксированные сигналы описаны в §1.4 и в примерах в §3.6.2.6 и §3.6.3.1.

Список статических переменных блока отображается на верхней части вкладки «переменные» в окне редактора модели (см. рис. 336). В списке – четыре колонки:

Колонки в списке можно переставлять и менять их ширину, перетаскивая левой кнопкой мыши их заголовки или границы заголовков. Нажатием Ctrl + C выделенную в списке переменную можно скопировать в буфер обмена для последующей вставки в текст программы. Редактировать переменные непосредственно в списке нельзя, для этого следует нажимать кнопку «изменить» под списком, которая вызывает стандартное окно редактора переменных RDS. Кнопка «очистить» полностью очищает список статических переменных блока – при пустом списке для блоков с данной моделью не будет устанавливаться структура переменных. Разумеется, упомянутые выше сигнальные переменные «Start» и «Ready» у простых блоков все равно будут присутствовать, просто они будут недоступны для программы модели.

Для каждой статической переменной в формируемый модулем автокомпиляции текст программы автоматически добавляется одноименный объект, принадлежащий одному из специальных классов доступа к статическим переменным. При этом внутри реакций на события, которые вводятся в правой части окна редактора, к переменным можно обращаться просто по имени, используя их в стандартных выражениях языка C. Если, например, в модели заданы вещественные статические переменные «x», «y» и «K», в тексте программы можно писать «y=K*x;». К полям структур можно обращаться, как и принято в C, отделяя их точкой от имени переменной структуры, индексы массивов и матриц указываются в квадратных скобках (примеры моделей, использующих различные типы переменных, приведены в §3.6.2. При этом следует помнить, что, с точки зрения компилятора, все переменные блока – это объекты некоторых специальных классов C++, для которых определены операторы присваивания, операторы приведения типов и т.п. и за которыми скрыты «настоящие» переменные блока. Это не имеет значения, если переменные используются в математических выражениях: в приведенном выше примере «y=K*x;» для объектов K и x будет автоматически вызван оператор приведения к вещественному типу, а для объекта y – оператор присваивания этому объекту вещественного числа. Однако, если попытаться взять указатель на y, это будет не указатель на вещественное число, а указатель на объект некоторого класса, что следует учитывать при написании моделей.


<< >> Оглавление Указатель