Описание пользователя
Глава 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++, формируемый модулем для передачи компилятору. При желании, пользователь может проанализировать этот текст, чтобы понять, как именно модуль вставляет в текст программы написанные пользователем фрагменты, и какие описания добавляются в текст автоматически. Этот текст можно также просмотреть на отдельной вкладке окна, выбрав пункт меню «».
- Пункт «» записывает текст открытой в редакторе модели в качестве одного из шаблонов для создания новых моделей (имя файла задается в появляющемся диалоге сохранения). Шаблоны моделей должны быть записаны в папке «Common» внутри стандартной папки шаблонов RDS – в открывающемся при выборе данного пункта меню диалоге эта папка выбрана по умолчанию. Хотя диалог и позволяет сохранить шаблон модели в другую папку, модуль автокомпиляции в этом случае его не увидит, и он не появится в списке шаблонов при создании модели (см. рис. 320). При создании модели по шаблону вместо создания нового пустого файла модели в качестве этого нового файла будет скопирован выбранный файл шаблона, и пользователь сможет не создавать модель «с нуля», а изменять или дописывать уже созданные фрагменты.
- Подменю «»:
- Пункт «» (клавиша Ctrl + Z) позволяет отменить одну последнюю операцию редактирования в тексте программы на текущей открытой вкладке. Этот пункт никак не связан с одноименным пунктом главного меню RDS с тем же сочетанием клавиш. Общая отмена операций в RDS позволяет последовательно отменить несколько действий пользователя, отмена в окне редактора модели – только одно, самое последнее, и только редактирование исходного текста. Изменение списка переменных, настроечных параметров и т.п отменено быть не может (можно просто закрыть окно редактора, не сохранив модель – это отменит все изменения, внесенные в нее с момента последнего сохранения).
- Пункт «» (клавиша Ctrl + X) помещает выделенный на вкладке текст фрагмента программы в буфер обмена, одновременно удаляя его с вкладки.
- Пункт «» (клавиша Ctrl + С) помещает в буфер обмена либо выделенный текст на вкладке фрагмента программы, если активно поле редактирования текста, либо имя переменной, если на левой панели окна выделена какая-либо переменная.
- Пункт «» (клавиша Ctrl + V) вставляет в позиции текстового курсора на вкладке фрагмента программы текст из буфера обмена.
- Пункт «» (клавиша Delete) стирает выделенный на вкладке текст программы. Этим пунктом нельзя удалить переменную или параметр на левой панели, для этого на панели есть специальные кнопки.
- Пункт «» (клавиша Ctrl + F) позволяет найти среди всех введенных фрагментов программы заданный текст. При его выборе открывается окно (рис. 334), в котором вводится текст для поиска и устанавливаются флажки, управляющие этим поиском. На панели «» можно включить или выключить поиск с учетом регистра символов или по целым словам, на панели «» можно выбрать поиск по всем фрагментам программы или только по тем, вкладки которых в данный момент открыты (открытие вкладок фрагментов, отвечающих за различные описания и реакции на события, описано §3.5.4). Вкладка с найденным текстом становится текущей и этот текст выделяется. Если выбран поиск по всем страницам (вкладкам), и вкладка с найденным текстом закрыта, она откроется автоматически.
- Пункт «» (клавиша Ctrl + R) ищет среди всех введенных фрагментов программы один заданный текст и заменяет его на другой. При его выборе открывается окно (рис. 335) в котором задаются оба фрагмента текста и устанавливаются флажки управления поиском. Флажки на панелях «» и «» действуют аналогично пункту меню «», а флажки «» и «» управляют производимой заменой фрагментов: включение первого будет требовать от пользователя подтверждения замены, включение второго выполнит не одну замену найденного фрагмента, а будет заменять все найденные.
- Пункт «» (клавиша F3) повторяет последний выполненный поиск или замену.
Рис. 334. Окно поиска текста
Рис. 335. Окно поиска и замены текста
- Подменю «»:
- Пункт «» (клавиша Alt + F9) компилирует модель, если с момента последней компиляции в нее были внесены какие-либо изменения (если изменений не было, об этом выдается сообщение). После компиляции новая функция модели в полученном файле DLL подключается ко всем связанным с этой моделью блокам, и блоки получают статические переменные, заданные в модели. Если одновременно запущено несколько копий RDS, в которые загружены схемы, использующие одну и ту же модель, компиляция завершится с ошибкой: модуль не сможет заменить старый файл DLL на новый, только что скомпилированный, поскольку старый файл будет заблокирован другими схемами.
- Пункт «» компилирует модель, даже если время изменения файла DLL этой модели позднее, чем время последнего изменения самой модели (то есть после последней компиляции изменений в модели не было). Этот пункт меню может быть полезен при отказе системных часов, из-за которого времена изменения файлов определяются неверно. Также он может пригодиться при изменениях настроек модуля автокомпиляции: эти изменения не влияют на файл модели, но, тем не менее, требуют ее повторной компиляции, поскольку меняется сам способ формирования программы из файла модели.
- Пункт «» открывает в окне дополнительную вкладку, на которой будет показан формируемый модулем исходный текст программы на языке 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 | |
| Открывает на отдельной вкладке текст программы, автоматически формируемой модулем, который передается компилятору при каждой компиляции модели (пункт меню «») | нет |
Окно редактора модели может быть закрыто в любой момент – для компиляции оно не требуется. При попытке закрыть окно редактора, не сохранив изменения в модели, пользователь получит сообщение об этом. Если при компиляции модели, редактор которой закрыт, возникнут ошибки, окно редактора откроется автоматически.