включение в область линий связи. Попробуйте поэкспериментировать с областью выделения блоков и посмотрите, какие при этом будут результаты.
Рис. 2.28
Из рисунка видно, что иконка блока Subsystem существенно отличается от иконки его библиотечного варианта.
Рис. 2.29
На иконке, появившейся в блок-диаграмме, обозначены два входных (In1 и Iп2) порта подсистемы и один выходной (Out1). Именно на них будет сосредоточено основное наше внимание в ближайшее время.
Давайте заглянем «вовнутрь» созданной подсистемы. Для этого нужно установить курсор мыши на ее иконку и дважды щелкнуть ЛКМ.
Блок-диаграмма, содержащаяся в открывшемся окне (рис. 2.30), вероятно, несколько отличается от того, что вы ожидали увидеть. Новое заключается в том, что наряду с тремя основными блоками, подсистема теперь содержит три дополнительных – In1, In2 и Out1. Именно их присутствие в составе подсистемы и повлияло на изменение ее иконки.
Рис. 2.30
Блоки In и Out входят в раздел библиотеки Connections и предназначены в первую очередь для обеспечения связи подсистемы с «внешним миром». Как следует из названия, блоки типа In выполняют прием входных сигналов, поступающих в подсистему, а блоки типа Out – выдачу результатов ее работы
на другие блоки (в том числе и подсистемы) модели, либо их сохранение в рабочей области MATLAB.
Количество блоков In и Out, включаемых в состав подсистемы, не ограничено и определяется только логикой работы создаваемой модели. Эти блоки, как и блоки других типов, могут иметь в диаграмме произвольные имена, назначаемые разработчиком в соответствии с их содержательным смыслом. Эти имена выводятся на иконке подсистемы вместо стандартных обозначений In и Out, что, естественно, значительно повышает наглядность блок-диаграммы. Чтобы убедиться в этом, замените в окне подсистемы обозначение выходного порта Out именем Г1 и закройте окно. Внесенные изменения сразу же отображаются на иконке подсистемы.
При создании подсистемы на основе копирования библиотечного блока Subsystem целесообразно придерживаться следующей последовательности действий.
Шаг 1. Отбуксируйте копию блока Subsystem в окно редактируемой (основной) блок-диаграммы.
Шаг 2. Откройте пустое окно диаграммы подсистемы (двойной щелчок ЛКМ на иконке блока) и разместить его на экране так, чтобы оно не перекрывалось окном основной блок-диаграммы.
Шаг 3. Способ реализации данного шага зависит от того, какие блоки должны войти в подсистему: если это часть основной блок-диаграммы, то ее можно перенести в окно подсистемы с помощью команд редактирования Cut и Paste, если же создается новая блок-диаграмма, то на данном шаге выполняются те же действия, что и при создании любой другой блокдиаграммы.
Для определенности будем считать, что мы создаем подсистему, аналогичную полученной с помощью команды Create Subsystem, но с другими параметрами блоков.
С этой целью в модели работы накопителей необходимо выделить и «вырезать» (с помощью команды Cut или используя клавиши <Ctrl>+<X>) три нужных на блока, а также соединяющие их линии связи; после этого следует сделать активным окно подсистемы и вставить в него перемещаемый фрагмент (с помощью команды Paste или используя клавиши <Ctrl>+<V>).
Шаг 4. Подсоедините к входам блоки In, а к выходу
блок Out (их можно отбуксировать из раздела Connections или скопировать из ранее созданной подсистемы). Измените необходимые значения параметров.
Шаг 5. Закройте окно новой подсистемы (теперь она стала похожа на свою предшественницу).
Несколько слов об окне блок-диаграммы подсистемы. Внешне оно ничем не отличается от окна основной модели и его меню содержит те же разделы. Однако область действия команд меню распространяется на всю S-модель, в которую входит данная подсистема. В частности, команда Save из раздела File обеспечивает запись на диск всей блок-диаграммы модели, включая подсистему, а команда Start запускает на исполнение основную модель.
Исключение составляют только некоторые команды из раздела Format (например, команда изменения цвета заливки окна Screen color).
После этих не очень существенных замечаний вернемся к блокам In и Out. Вернемся для того, чтобы пояснить весьма большое значение этих не очень примечательных блоков.
Необходимо отметить, что блоки In и Out могут использоваться и непосредственно в блок-диаграмме самого верхнего уровня. В этом случае они обеспечивают взаимосвязь S-модели с рабочей областью MATLAB.
Начнем с блока In. Он имеет 3 параметра настройки:
Port number определяет порядковый номер входного порта; по умолчанию его значение устанавливается SIMULINK для каждого нового блока In автоматически в возрастающем порядке; при необходимости номер блока может использоваться для согласования с соответствующим блоком Out;
Port width (Ширина порта) устанавливает размерность входного сигнала, который может подаваться на данный порт; значение -1 обеспечивает автоматическую настройку порта на размерность входного сигнала;
Sample time (Образец времени) определяет дискретность времени, с которой блок In будет «реагировать» на изменение входного сигнала; при значении этого параметра, равном -1, дискретность определяется одноименным параметром предшествующего блока.
Если блок In включен в состав блок-диаграммы самого верхнего уровня, то с его помощью можно передавать в модель данные, находящиеся в рабочей области MATLAB. Для этого необходимо в окне установки параметров моделирования Parameters... на вкладке Workspace I/O установить флажок Load Workspace. Имена векторов времени и считываемых данных должны совпадать
стеми именами, под которыми они записаны в рабочей области (по умолчанию tout и уout соответственно).
Блок Out также имеет окно настройки, содержащее три параметра:
Port number порядковый номер выходного порта; используется таким же образом, как и одноименный параметр блок In;
Output when disabled (Значение на выходе при запрещенном состоянии) 
имеет смысл в том случае, если данный блок входит в состав управляемой подсистемы; его значение устанавливается с помощью выпадающего меню, содержащего два пункта:
held (сохранение)
на выход выдается сигнал, сформированный при последнем срабатывании подсистемы;
reset (восстанавливать) на выход поступает сигнал, соответствующий исходному (начальному) состоянию подсистемы;
Initial output
начальное значение выходного сигнала; может быть задано в виде числового значения (скалярного или векторного), либо в виде вычисляемого выражения.
Если блок Out входит в блок-диаграмму самого верхнего уровня, то с его помощью можно сохранять в рабочей области MATLAB значение
поступающего на него сигнала. Для этого на вкладке Workspacel/0 окна Parameters должен быть установлен флажок Output. По умолчанию данные сохраняются под именем yout, которое может быть изменено пользователем. Если в диаграмме верхнего уровня имеется более одного блока Out, то переменная yout является матрицей, в которой каждый столбец соответствует блоку Out с таким же порядковым номером.
Используя переменные tout и yout, можно получить график изменения выходной характеристики yout во времени. Для этого в командном окне MATLAB достаточно ввести команду
plot(tout, yout).
Тем не менее блоки In и Out представляют собой самое слабое средство взаимосвязи подсистемы с другими компонентами модели, поскольку связывают подсистему по информации только с ее ближайшими «соседями».
Значительно более широкие возможности по обмену данными между компонентами модели представляют блоки Goto, From и Goto Tag Visibility, также входящие в раздел Connections.
Блок Goto, название которого в данном случае можно перевести как «передать», является основным среди них, поскольку определяет имя и область видимости передаваемых данных.
Для тех читателей, которые знакомы с программированием на одном из универсальных языков, термин «область видимости» в пояснениях не нуждается.
Для остальных же уточним, что область видимости переменной (или каких-либо данных) определяет те компоненты модели, в которых эта переменная доступна для использования.
Имя передаваемых данных и область их видимости указывается разработчиком модели с помощью окна настройки параметров блока Goto. Таких параметров два:
Tag (признак) имя передаваемых данных;
Tag visibility (признак видимости).
Значение первого параметра вводится в строке редактирования вручную и представляет собой любую последовательность латинских букв, цифр и символов «подчеркивания», причем на первой позиции обязательно должна стоять буква. Длина имени практически не ограничена, но SIMULINK различает только первые 32 (по правилам языка С).
Значение второго параметра устанавливается с помощью «выпадающего» меню, которое содержит три пункта:
local
переменная является локальной; это означает, что область ее видимости ограничено той подсистемой, в которой находится данный блок
Goto;
scoped
область видимости переменной распространяется дополнительно на все подсистемы более низких уровней иерархии, входящие в состав данной подсистемы;
global
переменная является глобальной; это означает, что она доступна в любой компоненте (подсистеме) S-модели.
Установленные параметры отображаются на иконке блока: имя передаваемой переменной выводится либо в квадратных скобках (при локальной области видимости), либо в фигурных (для области видимости scoped), либо вообще без скобок (при глобальной области видимости).
Блок From (название можно перевести как «принять») обеспечивает прием данных от соответствующего блока Goto. Соответствие определяется по имени переменной, которое является единственным параметром настройки этого блока. Имя переменной, как и для блока Goto, выводится на иконке.
Блок From может быть связан только с одним блоком Goto. Зато последний может передавать значение переменной на произвольное число блоков
From.
Блок Goto Tag Visibility необходимо включать в состав подсистемы только в том случае, если для передаваемых данных установлена область видимости scoped. Этот блок не имеет ни входных, ни выходных портов и не участвует в преобразовании данных. В модели он играет роль, аналогичную роли предупреждающего дорожного знака. Его единственным параметром настройки является имя передаваемой переменной, которое выводится на иконке блока.
Те, кто занимался программированием, знают, что каждая переменная в программе характеризуется не только областью видимости, но и временем жизни. Некоторые переменные «живут» на протяжении всего времени выполнения программы, другие «появляются на свет» только при запуске какой-либо подпрограммы и «умирают» при завершении ее работы.
С этой точки зрения блоки S-модели можно рассматривать как подпрограммы, а обрабатываемые в них данные (сигналы) остаются «живы» до тех пор, пока переходят от одного блока к другому. Другими словами, время жизни сигнала в S-модели определяется длиной той цепочки блоков, по которой он распространяется. Это утверждение справедливо и для тех данных, которые передаются с помощью блоков Goto и From.
Но в составе SIMULINK есть блоки, которые способны «продлить жизнь» любому сигналу (переменной) до окончания сеанса моделирования независимо от того, в каких еще блоках он используется. Это блоки Data Store Memory, Data Store Read, Data Store Write. Они используются только все вместе, поскольку отсутствие в модели любого из них делает ненужным присутствие двух других. Но наиболее важную роль играет блок Data Store Memory, поскольку он определяет имя, формат и область видимости сохраняемых данных. Блок имеет два параметра настройки:
Data Store name (имя сохраняемых данных),
Initial value (начальное значение).
Правила для записи имени сохраняемых данных те же, что и для записи имени переменной в блоке Goto.