Описание пользователя
Глава 2. Интерфейс пользователя
§2.14. Создание и изменение структур
Описывается создание структур – сложных типов переменных, состоящих из произвольного набора полей. Структуры позволяют объединять разнородные данные в одной переменной.
Структура в RDS – это специальный тип переменной, состоящий из произвольного количества полей, каждое из которых имеет собственное имя и тип. Чаще всего структуры используются для работы с какими-либо сложными данными: комплексными числами, векторами, кватернионами и т.п. Использовать структуры в таких случаях предпочтительнее, чем, например, матрицы. Во-первых, структура, в отличие от матрицы, всегда имеет постоянный размер в памяти, поэтому RDS работает с ней быстрее. Во-вторых, поля структуры, в отличие от элементов матрицы, имеют собственные имена, и пользователю легче запомнить, что вещественная часть комплексной переменной – это «a.Im», а не «a[0]». В-третьих, в структуре могут присутствовать поля различных типов, а все элементы матрицы или массива всегда имеют один и тот же тип.
Типы полей структуры могут быть любыми, кроме массивов (вместо них следует использовать матрицы), произвольных типов и тех структур, в которые в качестве поля входит данная структура (в этом случае структура включала бы сама себя). Каждая структура имеет уникальное имя типа, по которому к ней обращается пользователь. Для блоков RDS имя типа структуры и имена ее полей обычно не имеют значения, они опознают структуру исключительно по типам ее полей. С точки зрения модели блока, все структуры, имеющие, например, два поля, первое из которых имеет тип double, а второе – int, будут эквивалентны, как бы ни назывались типы этих структур и их поля.
Рис. 228. Окно списка структур
Структура может быть в любой момент создана или отредактирована пользователем при помощи пункта главного меню RDS «». При этом следует иметь в виду, что, если эта структура уже используется в каких-либо блоках схемы, или в качестве типа поля в других структурах, схема может перестать работать: связи, подключенные к отдельным полям структур, отключатся при переименовании этих полей; модели, ожидающие конкретного порядка и состава полей структуры, откажутся работать при изменении порядка или типов ее полей, и т.п. По этой причине к редактированию полей уже использующихся в схеме структур следует подходить с осторожностью, и RDS предупреждает пользователя при попытке сделать это.
При выборе в главном меню RDS пункта «» открывается окно со списком уже имеющихся в схеме структур (рис. 228). Если схема не загружена, в этом окне будет показан набор структур по умолчанию, хранящийся в файле «types.dat» в папке настроек RDS – этот набор автоматически добавляется к каждой создаваемой схеме. Список состоит из двух колонок: в колонке «» отображается имя типа структуры, в колонке «» – общее число блоков загруженной схемы, в которых эта структура уже используется. Если в колонке «» выводится какое-либо число, неаккуратное редактирование этой структуры может привести к неработоспособности схемы.
В нижней части окна находятся кнопки «», записывающая текущий список структур в файл «types.dat» в качестве набора по умолчанию, и «», закрывающая окно. Справа от списка располагаются кнопки для добавления, удаления, редактирования и изменения порядка структур:
| Кнопка | Действие |
|---|---|
| Переместить выбранную структуру на одну позицию вверх по списку. | |
| Переместить выбранную структуру на одну позицию вниз по списку. | |
| Редактировать выбранную структуру (вместо нажатия этой кнопки можно сделать двойной щелчок на имени структуры в списке). | |
| Добавить новую структуру. | |
| Удалить выбранную структуру. |
Порядок структур в списке влияет только на порядок их отображения в выпадающих списках при задании типов переменных – обычно часто используемые структуры размещают в начале списка. Этот порядок не влияет на работу схемы и может быть свободно изменен.
При нажатии кнопки редактирования структуры или при двойном щелчке на ее имени открывается окно для ввода имени ее типа и состава ее полей (рис. 229). Если изменяемая структура используется в блоках схемы или в качестве типа поля в какой-либо другой структуре, перед открытием окна будет выведено предупреждение о возможных проблемах из-за редактирования этой структуры, при этом пользователь может отказаться от редактирования или продолжить его, несмотря на ожидаемые последствия.
Рис. 229. Окно редактирования структуры
В верхней части окна редактирования структуры находится поле для ввода имени ее типа. Имя типа структуры может содержать только буквы латинского алфавита, цифры и знак подчеркивания, и при этом оно не должно начинаться с цифры (эти же требования предъявляются к именам, например, в синтаксисе языка C). Имя типа должно быть уникальным, нельзя дать структуре имя типа, уже данное другой структуре. Имена типов, как и имена переменных в RDS, чувствительны к регистру: «Complex», «complex» и «COMPLEX» будут считаться разными типами.
Основную площадь окна занимает список полей структуры, фактически представляющий собой сокращенный вариант списка, используемого для задания переменных блока. Список содержит следующие колонки:
- «» – отображает смещение переменной в байтах от начала области памяти, которую занимает структура. Это число используется программистами при обращении к полям структуры из функции модели. Пользователь может не обращать внимания на эту колонку, тем более, что в ней нельзя ничего изменить, смещение вычисляется автоматически.
- «» – имя поля структуры. Имена полей, как и имена переменных в RDS, должны удовлетворять тем же требованиям, что и идентификаторы в языке C: имя должно содержать только буквы латинского алфавита, цифры и знак подчеркивания, и при этом оно не должно начинаться с цифры. Имена чувствительны к регистру и должны быть уникальными в данной структуре. При желании, после имени поля можно ввести произвольный комментарий, отделив его от имени пробелом – этот комментарий будет отображаться в меню подключения связи к этому полю структуры.
- «» – тип поля структуры. Тип выбирается из выпадающего списка, в котором содержатся все стандартные типы переменных RDS, кроме массивов и произвольных типов, а также все имена структур, внутрь которых не входит редактируемая структура. Вместо массивов в структурах следует использовать матрицы, являющиеся, по сути, теми же массивами, но с двумя индексами. Произвольные типы, то есть переменные, фактический тип которым присваивается только программно или при срабатывании подключенных к ним связей, могут быть только переменными блока, и их использование в качестве полей структуры не разрешается. Другие структуры, в которые данная структура входит в качестве поля, тоже не могут быть использованы как тип ее поля, в противном случае нарушилась бы логика вложенности типов. Допустим, есть структуры «A» и «B», причем в структуре «A» одно из полей имеет тип «B». Включение в структуру «B» поля типа «A» привело бы к тому, что структура «A» содержала бы сама себя в качестве составной части поля типа «B». RDS не даст выбрать неразрешенный тип в качестве типа поля структуры.
- Колонка с изображением размерной стрелки – размер поля структуры в памяти. Значение в этой колонке выводится для справки и не может быть изменено, оно иногда используется программистами моделей блоков и не представляет для пользователя интереса.
- «» – значение поля структуры по умолчанию в стандартном синтаксисе RDS. Это значение присваивается полю структуры при ее создании или при сбросе расчета.
Непосредственно под списком полей отображается общее их число и строка типа – специальная строка, в которой каждому полю соответствует один или несколько символов. Эта строка используется программистами при написании моделей блоков (см. §2.5.1 руководства программиста). Справа от списка находятся кнопки, аналогичные кнопкам редактирования переменных блока, описанным в §2.9.2:
| Кнопка | Действие |
|---|---|
| Переместить выбранное поле на одну позицию вверх по списку. | |
| Переместить выбранное поле на одну позицию вниз по списку. | |
| Добавить поле перед выбранным (в списке появляется пустая строка, щелкнув на которой можно ввести имя поля). Добавить поле в конец списка всегда можно, щелкнув на пустой строке после последнего поля, специальной кнопки для этого не предусмотрено. | |
| Удалить выбранное поле. |
Следует помнить, что порядок полей в структуре важен для моделей блоков, и, если его изменить, модели могут отказаться работать.
Кнопка «» внизу окна запоминает внесенные изменения в списке структур схемы, кнопка «» закрывает окно без изменений. После закрытия окна редактирования структуры на экране снова появляется окно списка структур, изображенное на рис. 228. Если в настройках RDS разрешена отмена действий пользователя, после закрытия окна списка структур все внесенные изменения можно отменить, либо нажав Ctrl + Z, либо выбрав в главном меню RDS пункт «» (см. §2.1).