Описание пользователя
Глава 2. Интерфейс пользователя
§2.11. Использование подсистем
Описывается создание схем с использованием подсистем – специальных блоков, которые могут содержать внутри себя другие блоки.
§2.11.1. Общие сведения о подсистемах
Рассматриваются основные принципы работы с подсистемами в RDS.
Подсистема – это блок, внутри которого могут размещаться другие блоки и связи. В схеме подсистема выглядит как обычный блок. Чтобы увидеть или изменить ее содержимое, подсистему нужно открыть в отдельном окне (по умолчанию для этого следует дважды щелкнуть на ней левой кнопкой мыши). Размещение отдельных частей схемы в подсистемах улучшает ее читаемость. Если какая-либо группа соединенных между собой блоков объединена общей функцией (например, все они – части модели какого-либо объекта), их можно поместить внутрь подсистемы, и общая схема станет значительно проще. Вместо нескольких соединенных между собой блоков пользователь увидит один, выполняющий эту общую функцию. Если пользователя заинтересует, как именно реализована функция, он откроет подсистему в отдельном окне и сможет изучить ее содержимое или отредактировать его. Если нет, он сможет работать со схемой, не заботясь о том, что у этого сложного блока внутри.
На рис. 191 изображена схема, полностью аналогичная схеме на рис. 19, но в этой схеме часть блоков, а именно блоки, составляющие ПИ-регулятор (один из стандартных регуляторов, использующихся в теории управления), помещена в отдельную подсистему.
Рис. 191. Схема с подсистемой
Размещение части блоков в подсистеме позволило сделать схему более компактной: в самой схеме вместо трех соединенных между собой блоков теперь изображается единственный блок – подсистема «Reg». В данном случае для нее не задан внешний вид, поэтому блок подсистемы изображается стандартной иконкой, но, как и для любого другого блока RDS, для подсистемы можно задать векторную картинку, изображение в виде прямоугольника с текстом или даже программное рисование, если у подсистемы будет своя собственная модель.
Содержимое подсистемы отображается в отдельном окне, которое открывается пунктом «» контекстного меню блока этой подсистемы или, если это не изменено в параметрах подсистемы, по двойному щелчку на ее блоке. На рисунке заголовок окна совпадает с именем подсистемы, но, при желании, этот заголовок можно изменить. Окно подсистемы не находится внутри окна схемы или главного окна RDS, оно совершенно независимо и может быть перемещено в любое место экрана (или, при наличии нескольких мониторов, на другой монитор). Можно закрыть окно самой схемы, окно подсистемы при этом останется открытым и с ним можно будет продолжать работать. Разумеется, если удалить подсистему из схемы, ее окно исчезнет вместе с ней.
На экране может быть одновременно открыто любое число окон подсистем, каждому из них будет соответствовать пункт в меню «». Если в RDS разрешено отображение списка открытых окон, окну подсистемы будет соответствовать еще и кнопка на панели этого списка, как на рис. 191 – нажатие этой кнопки вызывает окно на передний план.
Для соединения блоков внутри подсистемы с остальной частью схемы используются специальные типы блоков: внешние входы и внешние выходы. У подсистемы на рис. 191 есть один внешний вход с именем «e» и один внешний выход с именем «u». Для этих блоков не задан специальный внешний вид, поэтому они изображаются стандартными для RDS иконками. Можно заметить, что в блоке подсистемы внешнему входу и выходу соответствуют одноименные переменные «e» и «u», к которым подключены связи. Связь, подключенная к входу подсистемы, внутри нее продолжается от соответствующего ей внешнего входа, а связь, подсоединенная внутри подсистемы к внешнему выходу, продолжается снаружи от соответствующей ему переменной – именно так связи вводятся внутрь подсистемы и выводятся наружу. В подсистеме может быть любое количество внешних входов и внешних выходов любых поддерживаемых RDS типов, и для каждого из них в блок подсистемы будет автоматически добавлена переменная того же типа – как правило, с тем же именем (имя переменной, создаваемой в подсистеме, можно, при желании, изменить в настройках блоков-входов и выходов). Шины тоже можно вводить в подсистему, для этого используется специальный тип блоков, который рассматривается в §2.11.3. Хотя внешние входы и выходы, как и другие типы блоков, могут иметь собственную модель, эта модель не может вмешиваться в передачу данных по связи, которую блок вводит в подсистему или выводит из нее. По этой причине модели к внешним входам и выходам подключаются крайне редко. Например, такие модели могут быть использованы в схеме, которая служит не для расчета, а для визуализации графа соединений каких-либо объектов: в этом случае модели входов и выходов могут участвовать в подсветке путей в таком графе.
Подсистемы могут иметь любой уровень вложенности. Внутри подсистемы может находиться другая подсистема, в ней – еще одна, и т.д. Подсистема, непосредственно внутри которой находится какой-либо блок (простой блок, вложенная подсистема или блок любого другого типа), называется родительской по отношению к нему.
С открытым окном вложенной подсистемы можно работать точно так же, как и с окном схемы. Фактически, окно схемы – это просто окно корневой подсистемы, то есть подсистемы, внутри которой находятся все остальные блоки и подсистемы схемы. В окно подсистемы можно точно так же добавлять стандартные блоки, выделять, перемещать и удалять их, и т.п. Панели и меню окон подсистем подробно описываются в §2.3.
С иерархией подсистем связана доступность блокам динамических переменных. Динамические переменные – это скрытые от пользователя переменные, создаваемые моделями блоков для обмена данными между собой. Как правило, блок может обращаться к динамическим переменным, находящимся в его родительской подсистеме, или в родительской подсистеме родительской подсистемы, и т.д. вплоть до корневой подсистемы схемы. Например, в схеме на рис. 191 интегратору «Int1» в подсистеме «Reg» доступна динамическая переменная времени, создаваемая и обслуживаемая в корневой подсистеме блоком-планировщиком динамического расчета «RTP1». Внешне в схеме наличие и доступность этой переменной никак не проявляется, однако без доступа к ней интегратор на смог бы работать – его модели необходимо знать текущее значение времени для расчетов. Когда блок «Int1» запрашивает доступ к переменной времени, RDS ищет ее в подсистеме «Reg1». Ее там нет, RDS ищет ее в следующей по иерархии подсистеме – корневой. Там искомая переменная присутствует, и интегратор получает к ней доступ. Таким образом, блоки, обращающиеся к динамическим переменным в какой-либо подсистеме, можно, как правило, перемещать в ее вложенные подсистемы без потери работоспособности схемы.
Любую подсистему схемы, как и любой блок, можно сохранить в отдельный файл – для этого следует в режиме редактирования выбрать в контекстном меню блока этой подсистемы пункт «» (рис. 192) и указать имя файла. Подсистема сохраняется в файл в том же формате, что и вся схема (и расширение у файла будет таким же – «.rds»), поэтому эту подсистему всегда можно загрузить как полноценную схему и работать с ней. По этой же причине любую сохраненную в файл схему можно загрузить как подсистему внутрь другой схемы – для этого следует нажать на свободном месте рабочего поля той подсистемы, куда будет вставлена схема, правую кнопку мыши, выбрать в контекстном меню пункт «» и указать путь к файлу схемы. В указанной точке рабочего поля появится блок подсистемы, содержащий внутри себя загруженную схему.
Рис. 192. Сохранение подсистемы в файл