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

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

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

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

§3.5.4. Описания программы и реакции блока на события

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

Список фрагментов программы модели

Рис. 339. Список фрагментов
программы модели

Программа модели блока, формируемая модулем автокомпиляции, может состоять из большого числа вводимых пользователем фрагментов – как реакций блока на различные события, так и описаний, которые пользователь считает нужным включить в модель. Эти фрагменты добавляются и удаляются на вкладке «события» дополнительной панели окна редактора модели (рис. 339). Разбиение полной программы модели блока на отдельные фрагменты, связанные с конкретными событиями, позволяет переложить ответственность за правильную сборку полной программы на модуль автокомпиляции – пользователю достаточно указать, что именно должен делать блок при наступлении того или иного события, а модуль самостоятельно оформит этот текст в виде функции и включит в программу ее вызов в нужном месте.

Список фрагментов программы на этой вкладке организован в виде дерева, в котором события и описания объединены в группы по смыслу. Каждую группу можно раскрыть нажатием на значок «+» слева от ее названия. Перед названием каждого отдельного фрагмента в группе отображается иконка желтого цвета, если для этого фрагмента введен текст программы, и белого, если текста нет, то есть реакция на данное событие или данное описание отсутствует в модели. Иконка рядом с названием группы имеет желтый цвет, если хотя бы один фрагмент внутри нее содержит текст программы – так можно видеть заполненные события и описания даже если их группы не раскрыты. На рис. 339, например, видно, что пользователем введены тексты фрагментов программы для глобальных описаний модели, для выполнения одного такта расчета (пункт «модель» в группе «моделирование и режимы»), для реакции на запуск расчета и для каких-то реакций блока на вызов функций (группа «функции блока» не раскрыта, поэтому не видно, для каких именно). Рядом с названием каждой реакции блока на событие в скобках отображается имя константы, соответствующей этому событию в описаниях RDS. Зная имя этой константы, можно найти описание события в приложениях и изучить возможности и примеры реакции на него. Модуль автокомпиляции позволяет включить в программу реакции не на все возможные события, но для большинства моделей будет достаточно тех, что есть. Список всех реакций и описаний, которые можно ввести в автокомпилируемую модель, приведен в §3.7.

Не каждому введенному фрагменту программы модели соответствует открытая вкладка в правой части окна редактора, некоторые вкладки могут быть закрыты. При закрытии вкладки текст соответствующей реакции не исчезает, он просто больше не показывается пользователю. Для того, чтобы снова открыть закрытую вкладку с фрагментом программы, следует либо дважды щелкнуть на названии фрагмента в списке, либо выделить его в списке левым щелчком мыши и нажать кнопку под списком слева. Для того, чтобы полностью удалить фрагмент программы из модели, следует выделить его в списке и нажать кнопку под списком справа (редактор запросит подтверждение удаления текста). Пустые тексты фрагментов при сохранении модели удаляются автоматически. Если для модели не введено ни одного фрагмента программы, при открытии окна редактора автоматически появляется вкладка для реакции на один такт расчета, поскольку это самое часто используемое в моделях событие (см. рис. 324).

Чтобы понять, как именно введенные пользователем фрагменты вставляются в формируемый текст полной программы модели, необходимо представлять себе общую структуру этого текста. Этот текст содержит (см. также §3.7.1):

В целом, формируемый модулем автокомпиляции текст программы устроен примерно так же, как и примеры моделей блоков в руководстве программиста, за исключением того, что там для доступа к переменным блока используются макросы, а в автокомпилируемых моделях – специальные классы, и все данные блока тоже всегда оформляются как класс. Именно поэтому модуль автокомпиляции может работать только с компиляторами языка C++, а компиляторы «чистого» C для этого не подходят. Пользователь, создающий автокомпилируемые модели, может и не обращать особого внимания на структуру формируемого текста, но знание этой структуры может помочь в поиске ошибок. Если место какого-либо фрагмента в общем тексте программы покажется непонятным, всегда можно вызвать пункт меню окна редактора «модель | показать текст C++» и найти свой фрагмент в общем тексте.

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

Для перечисленных выше событий автоматически формируются функции следующего вида:

  void rdsbcppBlockClass::имя_функции(параметры)
  {
    текст пользователя
  }

где rdsbcppBlockClass – имя класса блока (оно всегда одно и то же во всех моделях, несмотря на то, что содержимое этого класса изменяется от модели к модели), имя_функции – жестко заложенное в модуль автокомпиляции имя функции реакции на данное событие, параметры – жестко заданный для каждого типа события набор параметров, текст пользователя – введенный пользователем на вкладке редактора модели фрагмент текста программы. Все возможные варианты создаваемых функций перечислены в §3.7. Заголовок такой функции со всеми ее параметрами отображается в верхней части вкладки, на которой вводится текст реакции (рис. 340) – таким образом, пользователь может понять, какие параметры функции он может использовать в тексте.

Заголовок функции реакции на событие

Рис. 340. Заголовок функции реакции на событие

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


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