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

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

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

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

§3.5.3. Динамические переменные блока

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

Список динамических переменных

Рис. 337. Список динамических переменных

В нижней части вкладки «переменные» дополнительной панели окна редактора модели, непосредственно под списком статических переменных, задается список динамических переменных (рис. 337). Динамические переменные создаются моделями блоков скрыто от пользователя для обмена информацией друг с другом. Чаще всего такие переменные применяются в тех случаях, когда множеству блоков схемы необходимо одно и то же значение – передача его по связям ко всем блокам во всех подсистемах загромоздила бы схему. Типичный пример – текущее значение времени, которое нужно для работы всем динамическим блокам. Один из стандартных блоков RDS – планировщик расчета – создает вещественную динамическую переменную с именем «DynTime» и постоянно записывает в нее значение времени, изменяющееся с заданной скоростью и шагом, а все остальные блоки находят эту переменную и считывают ее значение. В RDS встроен специальный механизм подписки на динамическую переменную, который позволяет блоку найти переменную с заданным именем и типом – кратко он описан в §1.5 описания пользователя, подробнее – в §2.6 руководства программиста. Примеры моделей блоков, создающих динамические переменные и подписывающихся на них, приведены в §3.6.3, здесь же описан только интерфейс, позволяющий добавлять в модель такие переменные.

Список динамических переменных состоит из четырех колонок:

Чаще всего, чтобы избежать путаницы, имя переменной в С++ делают таким же, как и имя в RDS, если оно фиксировано. Однако, это не всегда возможно: требования к синтаксису динамических переменных в RDS мягче требований к идентификаторам C++, и некоторые имена не могут быть использованы в программе без изменений. Формально имя переменной в С++ может быть никак не связано с ее именем в RDS – например, объект для доступа к стандартной динамической переменной времени «DynTime» можно назвать просто «t», и, в этом случае, во всех фрагментах программы, вводимых в редакторе модели, для обращения к значению времени можно будет использовать объект t.

Непосредственно под списком находятся кнопки, позволяющие добавлять, удалять и изменять переменные:

Кнопка Действие
Кнопка: вверх Переместить выбранную переменную на одну позицию вверх по списку.
Кнопка: вниз Переместить выбранную переменную на одну позицию вниз по списку.
Кнопка: добавить Добавить новую переменную (открывает отдельное окно, см. рис. 338).
Кнопка: свойства Изменить выбранную переменную (открывает отдельное окно).
Кнопка: удалить Удалить выбранную переменную.

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

При добавлении новой переменной или изменении уже существующей ее параметры отображаются в отдельном окне (рис. 338). В верхней части окна можно установить либо флажок «стандартная переменная» и выбрать одну из стандартных динамических переменных в выпадающем списке (параметры стандартных переменных жестко заданы), либо флажок «произвольная переменная», если все параметры переменной указываются вручную.

Окно параметров динамической переменной

Рис. 338. Окно параметров динамической переменной

На данный момент в модуле автокомпиляции предусмотрена единственная стандартная переменная: текущее время динамического расчета «DynTime» типа double. При ее выборе все поля окна автоматически заполнятся запомненными для этой переменной параметрами – достаточно нажать кнопку «OK», чтобы связь с этой стандартной динамической переменной была добавлена в модель блока. Изменить при этом можно будет только имя переменной в программе, все остальные поля ввода будут заблокированы. Список стандартных динамических переменных во внутреннем формате RDS хранится в файле «dynvars.lst» в папке «Common» внутри стандартной папки настроек RDS (путь к стандартной папке настроек можно узнать, вызвав пункт главного меню «сервис | настройки RDS»), формат этого файла здесь не рассматривается.

Если в верхней части окна установлен флажок «произвольная переменная», все параметры динамической переменной следует ввести вручную. Должны быть заполнены следующие поля:

Фактически, действия, выполняемые моделью для динамической переменной, определяются сочетанием полей «блок-владелец» и «действие». Их можно проиллюстрировать следующей таблицей:

Блок-владелец
Этот блок Подсистема Система
Действие Создать Переменная будет создана в этом блоке, другие блоки не будут иметь к ней доступа Переменная будет создана в родительской подсистеме этого блока, ее смогут найти блоки этой же подсистемы и всех вложенных Переменная будет создана в корневой подсистеме схемы, ее смогут найти все блоки
Подписаться Модель получит доступ к переменной в своем собственном блоке, только если она там есть Модель получит доступ к переменной в родительской подсистеме своего блока, только если она там есть Модель получит доступ к переменной в корневой подсистеме схемы, только если она там есть
Найти и подписаться Модель будет искать переменную начиная с собственного блока вверх по иерархии подсистем Модель будет искать переменную начиная с родительской подсистемы собственного блока вверх по иерархии подсистем
Все действия – вручную Модель не выполняет никаких действий для доступа к переменной или ее создания, в программе для переменной просто создается объект, с которым должен работать сам программист

Следует помнить, что, в отличие от статических переменных, которые создаются вместе с блоком и, с точки зрения модели, существуют всегда, динамические переменные могут появляться и исчезать в процессе работы. Добавление динамической переменной в редакторе модели блока не гарантирует ее существование – блок может не найти переменную с указанными именем и типом в заданной подсистеме. Даже если модели указано создать переменную, RDS может не дать ей сделать это, если переменная с таким именем уже существует в указанной в параметрах подсистеме. Обращение к отсутствующей переменной в программе модели вызовет критическую ошибку, поэтому по умолчанию модуль автокомпиляции автоматически блокирует все вызовы модели, если хотя бы одна из внесенных в список динамических переменных отсутствует. Эту блокировку можно отключить в параметрах модели, но при этом, перед обращением к переменной, необходимо проверять ее существование – пример этого приведен в §3.6.3.1. Переменные, для которых не задано никаких действий, из автоматической проверки существования исключаются, независимо от включения блокировки в параметрах модели.

Нажатие кнопки «OK» занесет новые параметры переменной в список. Нажатием Ctrl + C выделенную в списке переменную можно скопировать в буфер обмена для последующей вставки в текст программы.


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