Текущий раздел:

Описания RDS

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

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

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

§3.5.1. Элементы и меню окна редактора модели

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

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

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

Рассматривается окно редактора модели и действия, которые в нем можно выполнить.

#### §3.5.1. Элементы и меню окна редактора модели

Описываются меню, кнопки и панели окна редактора модели. Перечисляются все пункты меню редактора с их краткими описаниями.

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

Рис. 332. Элементы окна редактора модели

Основная площадь окна, как правило, разделена по вертикали на две неравные части. Слева находится отключаемая дополнительная панель, с четырьмя вкладками, на которых задаются:

- статические и динамические переменные блока (вкладка «переменные»);
- события, на которые реагирует модель (вкладка «события»);
- функции, которые вызывает или на вызов которых отвечает блок (вкладка «функции»);
- параметры блока, сохраняемые вместе с ним в схеме, и внешний вид окна настройки этих параметров (вкладка «настройки»).

Ширину панели можно изменять, перетаскивая разделитель, находящийся справа от нее, влево и вправо левой кнопкой мыши.

Справа находится панель с вкладками, каждая из которых соответствует тому или иному фрагменту программы модели: реакции на событие, реакции на вызов функции, добавляемому в программу описанию и т.п. Эти вкладки можно открывать и закрывать по желанию пользователя: открываются они при помощи вкладки «события» дополнительной панели, а закрываются кнопкой с крестиком в правой верхней части самой вкладки. На каждой вкладке находится большое многострочное поле ввода, в которое пользователь записывает фрагмент программы, выполняющийся при наступлении соответствующего события. Например, на рис. 332 открыта вкладка «модель», соответствующая циклическому вызову блока в режиме расчета (это самая часто используемая реакция блока, определяющая его поведение в схеме), и на ней введен текст программы, которая будет вызываться в каждом такте. В верхней части вкладки находится краткий комментарий, описывающий назначение события, которому эта вкладка соответствует. Комментарий записан в формате языка C и, в некоторых случаях, под ним указывается заголовок функции, которую модуль автокомпиляции создаст для данного события. Например, на вкладке «модель» на рис. 332 функция будет называться «void rdsbcppBlockClass::rdsbcppModel(void)» (то есть функция rdsbcppModel класса rdsbcppBlockClass, не принимающая параметров и не возвращающая значений). Текст заголовка функции можно выделить и скопировать в буфер обмена. Все эти описания полезны для программистов, создающих сложные модели – например, зная, какие параметры принимает функция, можно использовать их внутри текста фрагмента программы. Все функции, создаваемые для всех возможных событий, описаны в §3.7. В большинстве случаев, обычные пользователи, имеющие дело с простыми моделями, могут не обращать внимания на описание функции в заголовке вкладки.

Если при последней компиляции в программе модели были обнаружены ошибки, список этих ошибок выводится в правой части окна под вкладками фрагментов программы. Высоту списка можно изменять, перетаскивая его верхнюю границу левой кнопкой мыши. Двойной щелчок на строчке в этом списке открывает вкладку с текстом программы, в котором обнаружена ошибка, и устанавливает курсор на строчку с этой ошибкой. На рис. 332 в программе была специально допущена ошибка (отсутствует точка с запятой в конце оператора присваивания «t0=DynTime» в предпоследней строчке). Можно видеть, что в списке ошибок при этом появилась не одна, а сразу три строчки – так часто бывает при работе с C/C++, поскольку одна ошибка может проявиться несколько раз. В приведенном на рисунке примере первая строчка («statement missing ; in function...») описывает допущенную ошибку, то есть отсутствие в конце оператора точки с запятой, и при двойном щелчке на ней, курсор установится на строчку «t0=DynTime» на вкладке «модель». Вторая строчка в списке – это сообщение редактора связей о том, что он не может открыть объектный файл: из-за ошибки в тексте фрагмента программы компилятор не смог сформировать это файл, так что это – следствие все той же ошибки. Наконец, третья строчка добавлена самим модулем автокомпиляции и сообщает об отсутствии файла DLL: поскольку редактор связей не нашел объектный файл, ему не из чего было создать исполняемый файл библиотеки. Таким образом, если в списке ошибок содержится несколько строчек, искать ошибку нужно начиная с самой первой из них – после ее исправления остальные ошибки могут исчезнуть сами.

Рассмотрим пункты меню окна редактора модели.

- Подменю «файл»:
  - Пункт «открыть файл» (клавиша Ctrl + O) открывает произвольный текстовый файл и помещает его на вкладку в правой части панели (рис. 333). Обычно так открывают файлы, каким-либо образом связанные с моделью – например, файлы заголовков, включенные в модель командой «#include» препроцессора языка C. В заголовке вкладки отображается имя файла, в верхней ее части – имя с полным путем. Файл на вкладке можно просматривать и редактировать, для его сохранения служит кнопка в левой верхней части вкладки. Если имя файла упоминается где-либо в тексте модели, его также можно открыть сочетанием клавиш Ctrl + Enter, если текстовый курсор находится внутри имени файла. Например, если в тексте модели есть строчка «#include <RdsFunc.h>», файл «RdsFunc.h» можно открыть, щелкнув на его имени (это поместит текстовый курсор в точку щелчка) и нажав Ctrl + Enter.

  Рис. 333. Вкладка открытого файла в редакторе модели

  - Подменю «модели» содержит список всех автокомпилируемых моделей, которые обслуживаются этим же модулем. Выбор в этом списке имени модели откроет ее окно редактора. Текущая открытая модель помечена в этом списке галочкой.
  - Пункт «сохранить» (клавиша Ctrl + S) сохраняет изменения в файле модели, открытом в окне редактора.
  - Пункт «сохранить как» записывает открытую модель в файл с другим именем и привязывает все блоки, использующие данную модель, к новому файлу. Действие этого пункта отличается от действия кнопки «сохранить как» в окне параметров блока – та кнопка подключает к модели, сохраненной под другим именем, только один конкретный блок, а этот пункт меню – все блоки загруженной схемы, использовавшие прежнюю модель.
  - Пункт «вернуться к сохраненному» отменяет все изменения в модели, сделанные с момента последнего ее сохранения.
  - Пункт «сохранить текст C++» позволяет записать в отдельный, выбранный пользователем, файл текст программы на языке C++, формируемый модулем для передачи компилятору. При желании, пользователь может проанализировать этот текст, чтобы понять, как именно модуль вставляет в текст программы написанные пользователем фрагменты, и какие описания добавляются в текст автоматически. Этот текст можно также просмотреть на отдельной вкладке окна, выбрав пункт меню «модель | показать текст C++».
  - Пункт «сохранить как шаблон» записывает текст открытой в редакторе модели в качестве одного из шаблонов для создания новых моделей (имя файла задается в появляющемся диалоге сохранения). Шаблоны моделей должны быть записаны в папке «Common» внутри стандартной папки шаблонов RDS – в открывающемся при выборе данного пункта меню диалоге эта папка выбрана по умолчанию. Хотя диалог и позволяет сохранить шаблон модели в другую папку, модуль автокомпиляции в этом случае его не увидит, и он не появится в списке шаблонов при создании модели (см. рис. 320). При создании модели по шаблону вместо создания нового пустого файла модели в качестве этого нового файла будет скопирован выбранный файл шаблона, и пользователь сможет не создавать модель «с нуля», а изменять или дописывать уже созданные фрагменты.
- Подменю «редактирование»:
  - Пункт «отменить» (клавиша Ctrl + Z) позволяет отменить одну последнюю операцию редактирования в тексте программы на текущей открытой вкладке. Этот пункт никак не связан с одноименным пунктом главного меню RDS с тем же сочетанием клавиш. Общая отмена операций в RDS позволяет последовательно отменить несколько действий пользователя, отмена в окне редактора модели – только одно, самое последнее, и только редактирование исходного текста. Изменение списка переменных, настроечных параметров и т.п отменено быть не может (можно просто закрыть окно редактора, не сохранив модель – это отменит все изменения, внесенные в нее с момента последнего сохранения).
  - Пункт «вырезать» (клавиша Ctrl + X) помещает выделенный на вкладке текст фрагмента программы в буфер обмена, одновременно удаляя его с вкладки.
  - Пункт «копировать» (клавиша Ctrl + С) помещает в буфер обмена либо выделенный текст на вкладке фрагмента программы, если активно поле редактирования текста, либо имя переменной, если на левой панели окна выделена какая-либо переменная.
  - Пункт «вставить» (клавиша Ctrl + V) вставляет в позиции текстового курсора на вкладке фрагмента программы текст из буфера обмена.
  - Пункт «удалить» (клавиша Delete) стирает выделенный на вкладке текст программы. Этим пунктом нельзя удалить переменную или параметр на левой панели, для этого на панели есть специальные кнопки.

  Рис. 334. Окно поиска текста

  - Пункт «найти» (клавиша Ctrl + F) позволяет найти среди всех введенных фрагментов программы заданный текст. При его выборе открывается окно (рис. 334), в котором вводится текст для поиска и устанавливаются флажки, управляющие этим поиском. На панели «параметры» можно включить или выключить поиск с учетом регистра символов или по целым словам, на панели «где искать» можно выбрать поиск по всем фрагментам программы или только по тем, вкладки которых в данный момент открыты (открытие вкладок фрагментов, отвечающих за различные описания и реакции на события, описано §3.5.4). Вкладка с найденным текстом становится текущей и этот текст выделяется. Если выбран поиск по всем страницам (вкладкам), и вкладка с найденным текстом закрыта, она откроется автоматически.

  Рис. 335. Окно поиска и замены текста

  - Пункт «найти и заменить» (клавиша Ctrl + R) ищет среди всех введенных фрагментов программы один заданный текст и заменяет его на другой. При его выборе открывается окно (рис. 335) в котором задаются оба фрагмента текста и устанавливаются флажки управления поиском. Флажки на панелях «параметры» и «где искать» действуют аналогично пункту меню «поиск», а флажки «подтверждение замены» и «заменить все вхождения» управляют производимой заменой фрагментов: включение первого будет требовать от пользователя подтверждения замены, включение второго выполнит не одну замену найденного фрагмента, а будет заменять все найденные.
  - Пункт «найти далее» (клавиша F3) повторяет последний выполненный поиск или замену.
- Подменю «модель»:
  - Пункт «компилировать» (клавиша Alt + F9) компилирует модель, если с момента последней компиляции в нее были внесены какие-либо изменения (если изменений не было, об этом выдается сообщение). После компиляции новая функция модели в полученном файле DLL подключается ко всем связанным с этой моделью блокам, и блоки получают статические переменные, заданные в модели. Если одновременно запущено несколько копий RDS, в которые загружены схемы, использующие одну и ту же модель, компиляция завершится с ошибкой: модуль не сможет заменить старый файл DLL на новый, только что скомпилированный, поскольку старый файл будет заблокирован другими схемами.
  - Пункт «принудительно компилировать» компилирует модель, даже если время изменения файла DLL этой модели позднее, чем время последнего изменения самой модели (то есть после последней компиляции изменений в модели не было). Этот пункт меню может быть полезен при отказе системных часов, из-за которого времена изменения файлов определяются неверно. Также он может пригодиться при изменениях настроек модуля автокомпиляции: эти изменения не влияют на файл модели, но, тем не менее, требуют ее повторной компиляции, поскольку меняется сам способ формирования программы из файла модели.
  - Пункт «показать текст C++» открывает в окне дополнительную вкладку, на которой будет показан формируемый модулем исходный текст программы на языке C++, передаваемый компилятору для создания исполняемого файла DLL. Анализ этого текста может помочь пользователям, желающим изучить принципы написания моделей блоков без использования модуля автокомпиляции.
  - Пункт «показать отчет компилятора» запускает компиляцию модели, после чего открывает в окне дополнительную вкладку, на которой отображаются командные строки, переданные компилятору и редактору связей, их параметры, а также все сообщения, выданные этими программами в процессе работы. Этот текст бывает полезен при настройке модуля автокомпиляции на нестандартный компилятор, в нем будет присутствовать полный список всех выданных компилятором и редактором связей ошибок. В большинстве случаев ошибки разбираются модулем автокомпиляции автоматически и показываются пользователю в нижней части окна редактора (см. рис. 332), однако, для этого модуль должен быть правильно настроен на разбор возвращаемых компилятором сообщений. В процессе этой настройки необходимо видеть эти сообщения, чтобы заложить в параметры модуля их структуру. Кроме того, в этом тексте можно увидеть, правильно ли передаются компилятору параметры, введенные в настройках модуля.
  - Пункт «следующая страница» (клавиша Ctrl + PgDn) делает активной следующую по счету открытую вкладку редактора.
  - Пункт «предыдущая страница» (клавиша Ctrl + PgUp) делает активной предыдущую по счету открытую вкладку редактора.
  - Пункт «закрыть страницу» (клавиша Ctrl + F4) закрывает текущую активную вкладку. Закрыть вкладку можно также кнопкой с крестиком в правой верхней ее части.
  - Пункт «настройка модуля автокомпиляции» открывает окно настройки модуля, который обслуживает открытую в редакторе модель. Это то же самое окно, которое открывается по двойному щелчку на названии этого модуля в списке всех модулей, установленных в RDS. Подробно настройка модуля описана в §3.8.
  - Пункт «установка параметров блоков» открывает окно групповой установки для всех блоков, к которым подключена эта модель. Это окно позволяет одновременно установить различные параметры блоков с этой моделью, подробнее работа с ним описана в §3.5.8.
  - Пункт «текстовые константы» служит для добавления в программу модели именованных текстовых констант, значения зависят от текущего языка интерфейса пользователя (см. §4.7.1).
  - Пункт «параметры модели» открывает окно настройки модели, в котором можно включить или выключить различные автоматически добавляемые в модель возможности, задать список связанных с этой моделью дополнительных файлов и ввести текст описания модели. Настройка модели описана в §3.5.7.
- Подменю «вид»:
  - Пункт «переменные и события» включает и выключает отображение дополнительной панели редактора, расположенной в левой части окна (см. рис. 332). На этой панели задаются переменные, параметры и функции блока, включаются реакции на события и т.п. Убрав эту панель, можно увеличить площадь области текста программы (когда потребуется, например, изменить переменные блока, ее можно будет снова включить).
  - Пункт «список ошибок» включает и выключает отображение списка ошибок последней компиляции в нижней части окна (см. рис. 332). Этот список также можно закрыть кнопкой с крестиком в его правой верхней части.

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

Кнопка | Выполняемое действие и пункт меню | Клавиши
--- | --- | ---
| Сохранение изменений в модели (пункт меню «файл | сохранить») | Ctrl + S
| Переместить выделенный текст в буфер обмена (пункт меню «редактирование | вырезать») | Ctrl + X
| Копировать выделенный текст или имя переменной в буфер обмена (пункт меню «редактирование | копировать») | Ctrl + C
| Вставить текст из буфера обмена (пункт меню «редактирование | вставить») | Ctrl + V
| Отмена последнего изменения на текущей вкладке редактора (пункт меню «редактирование | отменить») | Ctrl + Z
| Включает/выключает боковую панель редактора (пункт меню «вид | переменные и события») | нет
| Показывает/скрывает список ошибок компиляции (пункт меню «вид | список ошибок») | нет
| Вызывает групповую установку параметров блоков, связанных с этой моделью (пункт меню «модель | установка параметров блоков») | нет
| Открывает окно параметров модели (пункт меню «модель | параметры модели») | нет
| Запускает компиляцию модели, если в нее были внесены изменения (пункт меню «модель | компилировать») | Alt + F9
| Открывает на отдельной вкладке текст программы, автоматически формируемой модулем, который передается компилятору при каждой компиляции модели (пункт меню «модель | показать текст C++») | нет

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