Описание пользователя
Глава 3. Использование стандартных модулей автокомпиляции
§3.2. Создание нового блока с автокомпилируемой моделью
Описываются действия, необходимые для создания нового блока с автокомпилируемой моделью. Поведение такого блока будет определяться программами, написанными пользователем.
Как правило, автокомпилируемые модели подключаются к новым, только что созданным, блокам, после чего настройка различных параметров такого блока производится уже не напрямую через RDS, а через редактор модели. Пользователь может, как и раньше, использовать окно параметров блока для изменения любых параметров блока с подключенной моделью, за исключением списка статических переменных, который должен соответствовать модели и может быть задан только в ее редакторе, и подключенной к блоку функции модели, за которую теперь отвечает модуль автокомпиляции. Однако, если одна и та же модель подключена к нескольким блокам, значительно удобнее задавать их параметры одновременно, через функцию групповой установки в редакторе модели.
Рассмотрим сначала самый распространенный случай: создание нового блока с новой автокомпилируемой моделью. Прежде всего следует создать в какой-либо подсистеме только что созданной или загруженной с диска схемы новый простой блок и открыть окно его параметров. Действия, необходимые для этого, подробно описаны в §2.9.1, поэтому здесь приведем их коротко. Находясь в режиме редактирования, следует:
- нажать на свободном месте окна подсистемы правую кнопку мыши;
- выбрать в открывшемся контекстном меню пункт «» (рис. 317 а);
- нажать на созданном блоке (он будет выглядеть как белый квадрат с черной рамкой) правую кнопку мыши;
- выбрать в открывшемся контекстном меню пункт «» (рис. 317 б).

(а)

(б)
Рис. 317. Создание простого блока (а) и вызов окна его параметров (б)
В результате откроется окно параметров блока, в котором следует выбрать вкладку «» (рис. 318). На ней нужно установить флажок «» и выбрать в выпадающем списке «» название подключенного модуля, который будет отвечать за компиляцию модели (см. §2.19.1). Здесь и далее в примерах будет использоваться модуль для Borland С++ 5.5, но можно выбрать любой из установленных и настроенных стандартных модулей.
Рис. 318. Создание для блока новой автокомпилируемой модели
Поле «» на вкладке пока пустое – для создания нового файла модели следует нажать кнопку «». Обычно сразу после ее нажатия открывается окно «» (рис. 319), в котором можно выбрать шаблон для создаваемой модели. Однако, если в RDS отсутствуют какие-либо шаблоны моделей, это окно будет пропущено и сразу откроется диалог сохранения файла (см. ниже).
Рис. 319. Выбор создания пустой автокомпилируемой модели
В окне «» можно установить либо флажок «» для создания модели, в которой не будет никаких реакций на события и переменных по умолчанию, либо флажок «». В последнем случае становится активным список имеющихся в RDS шаблонов моделей (их может создавать пользователь). При выборе шаблона в списке нижняя часть окна отображает краткое описание этого шаблона (рис. 320). Модели, созданные по шаблону, ничем принципиально не отличаются от моделей, созданных самостоятельно – в шаблоне просто уже заранее описаны некоторые реакции и переменные и добавлены пустые функции, так что пользователю остается только заполнить их. Все это можно сделать и вручную, создав пустую модель.
Рис. 320. Выбор создания модели по шаблону
Установив один из флажков в окне и, при необходимости, выбрав шаблон для создаваемой модели из списка, следует закрыть окно кнопкой «».
После закрытия окна «» (или, при отсутствии в RDS шаблонов моделей, сразу после нажатия кнопки «» на вкладке «» окна параметров блока, см. рис. 318) появится стандартный диалог сохранения, в котором нужно ввести имя файла для создаваемой модели и указать папку, в которую он будет записан (рис. 321). Этот файл будет связан с блоком до тех пор, пока автоматическая компиляция модели не будет отключена или пока сам блок не будет удален, поэтому к выбору размещения файла модели следует подойти внимательно.
Рис. 321. Диалог сохранения файла модели
По умолчанию пользователю предлагается сохранить файл модели либо в ту же папку, в которой находится загруженная в RDS в данный момент схема, либо, если схема была создана только что и еще ни разу не сохранялась, в папку стандартных моделей, которая указывается в настройках RDS (рекомендации по размещению файлов моделей приведены в §3.1). После нажатия в диалоге сохранения кнопки «» будет создан указанный файл модели, и его путь появится в поле ввода «» (рис. 322). Если в диалоге не было указано расширение файла, он автоматически получает стандартное для всех модулей автокомпиляции расширение «.mdl». Если файл был сохранен в ту же папку, что и схема, имя файла появится в поле ввода без пути, если же он был сохранен в одну из стандартных папок RDS, путь к этой папке будет заменен на ее символическое обозначение (текст «$MODELS$» на рис. 322 указывает на стандартную папку моделей).
Рис. 322. Имя файла модели в окне параметров блока
Рис. 323. Окно компиляции
Теперь можно закрыть окно параметров блока кнопкой «». В этот момент модуль автокомпиляции соберет на основе только что сохраненного файла модели исполняемый файл DLL. На экране при этом на некоторое время появится окно компиляции (рис. 323) и, возможно, мелькнет черное окно консоли, в котором работает компилятор. Созданный исполняемый файл будет иметь то же имя, что и файл модели, только с расширением «.dll», и будет помещен в одну с ним папку. Например, для файла модели «$MODELS$\new_model.mdl» с рис. 322 исполняемый файл DLL будет называться «new_model.dll» и находиться он будет в стандартной папке моделей RDS. Этот файл будет немедленно подключен к блоку, хотя это и не будет заметно: созданная модель – пустая, и, поэтому, никак не проявляет себя при работе RDS. Сразу после этого откроется окно редактора модели – пустое (рис. 324), если было выбрано создание пустой модели, или с частично заполненными списками переменных и несколькими вкладками для ввода реакций модели на события, если модель была создана по шаблону. Элементы и меню этого окна описаны в §3.5.
Рис. 324. Окно редактора пустой модели
Окно редактора модели – не модальное, оно может быть скрыто другими окнами RDS. Его всегда можно вызвать на передний план нажатием соответствующей ему кнопки на панели списка открытых окон или выбором его пункта в меню «». Если окно редактора закрыто, в режиме редактирования его можно всегда снова открыть пунктом «» контекстного меню блока. Кроме того, двойной щелчок на блоке с автокомпилируемой моделью по умолчанию открывает окно редактора, а не окно параметров, как у всех прочих блоков.
Рис. 325. Вызов редактора статических
переменных блока
В качестве простейшего примера, не вдаваясь пока в подробности организации моделей и их реакции на системные события, создадим модель блока-сумматора, который будет выдавать на вещественный выход «y» сумму вещественных входов «x1» и «x2». Для этого в окне редактора, изображенном на рис. 324, нужно задать список переменных блока и заполнить текст на вкладке «» в правой части окна.
Список статических переменных блока, к которым относятся его входы и выходы, находится в верхней части вкладки «» на левой панели окна. В данный момент там содержатся только сигналы «Start» и «Ready», обязательные для каждого простого блока в RDS. Нам нужно добавить к ним три новых переменных – два входа и один выход. Для этого нужно нажать кнопку «» под списком (рис. 325), которая откроет стандартное окно редактирования переменных блока. Это окно нужно заполнить согласно рис. 326.
Рис. 326. Окно редактора переменных для простейшего сумматора
У переменных «Start» и «Ready» следует убрать флажки в колонке «» (мы не будем использовать эти переменные, и они не нужны нам в меню подключения связей). Нужно также добавить в список три переменных вещественного типа «double», две из которых, «x1» и «x2», будут входами, а третья, «y» – выходом. Флажки в колонке «» можно не устанавливать: поскольку при создании у всех простых блоков (а, значит, и у нашего) автоматически устанавливается флажок «», наша модель будет запускаться в каждом такте расчета, и нам не обязательно привязывать ее запуск к срабатыванию входных связей. Это не очень хорошо для быстродействия схемы – наша модель будет работать «вхолостую» даже тогда, когда входы не изменились – но для простейшего примера это подходит.
Заполнив окно редактора переменных, нужно закрыть его кнопкой «», после чего ввести в текстовое поле на вкладке «» в правой части окна редактора фрагмент программы на языке C, который будет выполнять суммирование. В данном случае это будет оператор присваивания «y=x1+x2;» (рис. 327). Он должен заканчиваться точкой с запятой – это требование синтаксиса языка C. На этом создание модели завершается – можно сохранить ее, выбрав в окне редактора пункт «» (окно редактора имеет собственную строку меню, отличающуюся от меню RDS).
Рис. 327. Окно редактора модели простейшего сумматора
Если теперь переключиться в окно подсистемы, в которой находится созданный блок (не важно – закрыв окно редактора модели или просто щелкнув по окну подсистемы, оставив редактор на заднем плане), и попытаться присоединить что-нибудь к его входам или выходу, обнаружится, что добавленные нами в редакторе модели переменные не появились в блоке, и у него нет ни входов «x1» и «x2», ни выхода «y». Дело в том, что все изменения, сделанные в редакторе модели, переписываются в блоки только после компиляции этой модели. Поэтому измененную модель нужно сначала скомпилировать – к тому же, это проверит ее на ошибки. Скомпилировать модель можно несколькими способами: можно выбрать пункт главного меню RDS «» или нажать Ctrl + F9, можно просто переключиться в режим моделирования и обратно в режим редактирования, но лучше всего снова открыть редактор модели двойным щелчком на блоке и выбрать в его меню пункт «» или нажать кнопку с желтой шестеренкой. Так мы скомпилируем только нашу модель и сразу увидим в нижней части окна список ошибок компиляции, если они есть.
Рис. 328. Тестирование
сумматора
Если строчка оператора присваивания была введена верно, компилятор установлен и модуль автокомпиляции настроен на него, ошибок не будет. Теперь можно закрыть окно редактора модели, подключить к входам блока поля ввода, а к выходу – индикатор, затем запустить расчет и убедиться, что блок выполняет свою функцию – значение на его выходе должно быть равно сумме значений на входах (рис. 328).
Мы только что создали простейшую автокомпилируемую модель алгебраического блока. Стандартные модули автокомпиляции позволяют создавать и более сложные модели, реагирующие на изменение динамических переменных, выполняющие заданные действия по таймеру, имеющие окна настройки и т.д. В реакциях на события, вводимых в редакторе модели, можно использовать не только все операторы языков C/C++, но и функции стандартных библиотек и специализированные функции RDS, подробно описанные в приложении А.5. Конечно, создание модели блока при помощи модуля автокомпиляции не дает той же гибкости и того же богатства возможностей, что и написание программы модели в полноценной среде разработки со встроенным отладчиком, однако, для большей части моделей, необходимых пользователю, возможностей редактора модели вполне хватает. В §3.5 подробно рассмотрена работа с этим редактором и добавление в модель реакций на самые важные системные события. Пользователям, желающим полностью использовать возможности модуля автокомпиляции, рекомендуется внимательно прочесть руководство программиста – описанные в нем функции и приемы программирования применимы и к автокомпилируемым моделям.