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

Описания RDS

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

Глава 2. Интерфейс пользователя

§2.7. Создание и изменение связей

§2.7.3. Подключение связей к полям структур и элементам массивов

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

## Глава 2. Интерфейс пользователя

### §2.7. Создание и изменение связей

#### §2.7.3. Подключение связей к полям структур и элементам массивов

Описывается подключение связей к отдельным элементам сложных переменных блоков.

Если вход или выход блока представляет собой структуру, матрицу или массив, связи можно подключать не только к этой переменной целиком, но и к отдельным ее полям или элементам. Так можно «собирать» сложные переменные из простых компонентов на входах блоков и, наоборот, «разбирать» их на выходах.

(а)

(б)

Рис. 72. Соединение поля выхода с другим блоком

Если вход или выход блока – структура, то в меню со списком переменных, открывающемся при подключении к нему связи, попадут не только сами входы и выходы, но и их поля. Например, у стандартного блока сложения комплексных чисел входы «x1», «x2» и «x3» и выход «y» представляют собой структуру типа «Complex» с двумя вещественными полями «Re» и «Im». Если, удерживая нажатой клавишу Ctrl, нажать на этом блоке левую кнопку мыши (это один из стандартных способов начать связь), то в открывшемся меню (см. рис. 72 а) будут перечислены не только сами переменные блока, но и все их поля: «y.Re», «y.Im», «x1.Re», «x1.Im» и т.д. Поля каждой переменной перечисляются в меню после нее самой, имя поля, как всегда в RDS, отделяется от имени переменной точкой. Выбрав в меню одно из таких полей, можно соединить его с любым вещественным входом любого блока (рис. 72 б).

(а)

(б)

Рис. 73. Соединение вещественного выхода с полем структуры

Точно так же, если, проводя связь от вещественного выхода какого-либо блока, щелкнуть на сумматоре комплексных чисел, то в меню переменных будут перечислены все поля всех его входов (рис. 73). Сами входы в меню не попадут: связь тянется от вещественного выхода, а соединение вещественного числа и структуры невозможно.

Рис. 74. Выбор поля структуры в
полном списке переменных блока

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

Если вход или выход блока является массивом или матрицей, то в меню списка переменных, помимо имени самой переменной, добавляется специальный пункт, позволяющий присоединить связь к элементу массива или матрицы с конкретными индексами (для матрицы задается два индекса, для массива – один). Этот дополнительный пункт выглядит как имя переменной, к которому добавлены пустые квадратные скобки. При его выборе открывается окно, в котором нужно ввести значения индексов присоединяемого элемента. Как всегда, состав пунктов списка переменных при присоединении связи будет зависеть от того, подключена уже создаваемая связь к какой-нибудь переменной, или еще нет – если связь уже куда-то подключена, в список не попадут переменные с типами, не совместимыми с уже подключенной переменной. В результате может оказаться так, что само имя массива или матрицы не будет присутствовать в списке, а дополнительный пункт для элемента этой переменной – будет. Например, при присоединении связи от какого-либо вещественного выхода к массиву вещественных чисел с именем «A» в меню будет только пункт «A[ ]», а пункт «A» будет отсутствовать. Далее будут отдельно рассмотрено присоединение связи к элементу массива и элементу матрицы – эти два случая отличаются видом окна ввода индекса элемента.

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

Допустим, необходимо присоединить поле ввода ко входу с индексом 3 многовходового сумматора вещественных чисел. Это можно сделать двумя способами: начать связь от поля ввода и протянуть ее к сумматору, или начать связь от сумматора и протянуть ее к полю ввода. Рассмотрим сначала первый способ (рис. 75).

(а)

(б)

(в)

Рис. 75. Создание связи от поля ввода к элементу массива сумматора: протягивание связи к сумматору (а),
выбор индекса элемента (б), готовая связь (в)

Сначала следует обычным образом начать связь от единственного выхода поля ввода и протянуть линию к сумматору. При щелчке на сумматоре откроется меню его переменных рис. 75 а, в котором, кроме пункта «список», будет присутствовать только пункт «X[ ]» (входной массив сумматора называется «X»). Имя самого массива будет отсутствовать в списке, поскольку массив не может быть подключен к вещественному выходу поля ввода. После выбора пункта «X[ ]» откроется окно, изображенное на рис. 75 б – в нем необходимо указать индекс конкретного соединяемого элемента (в данном случае – «3») и нажать «OK». По умолчанию в этом окне всегда устанавливается индекс, на единицу больший самого большого индекса соединенного элемента, т.е. при первом присоединении связи к элементу массива «X» там будет находиться число 0, если оставить его без изменения, при следующем присоединении там будет находиться 1, и.т.д. Это удобно при последовательном присоединения связей к элементам: если не изменять индекс в окне и сразу нажимать «OK», индекс элемента будет автоматически увеличиваться.

Рис. 76. Выбор переменной в
списке при создании связи от
сумматора к полю ввода

Если начать связь от сумматора, а не от поля ввода, в меню списка переменных будет присутствовать имя самого массива «X», поскольку связь еще ни к чему не присоединена, и для выбора доступны любые типы входов и выходов блока (рис. 76). После выбора в меню пункта «X[ ]» откроется то же самое окно ввода индекса (см. рис. 75 б), в котором нужно выбрать индекс «3» и нажать «OK» – далее рисование связи производится обычным образом. Созданная связь ничем не будет отличаться от связи, изображенной на рис. 75 в (порядок рисования связи, как уже объяснялось, никак не связан с направлением передачи данных).

(а)

(б)

Рис. 77. Ввод индексов присоединяемого
элемента матрицы (а) и готовая связь (б)

Присоединение связи к элементу матрицы отличается от присоединения ее к элементу массива только тем, что в окне ввода индексов необходимо указать сразу два индекса – сначала вводится индекс строки, затем – индекс столбца (рис. 77 а). При отображении имени переменной рядом с узлом готовой связи индексы строки и столбца, как принято в RDS, перечисляются через запятую (рис. 77 б).

Как и в случае присоединения связей к полям структуры, вместо выбора соответствующего элементу массива или матрицы пункта меню (имя переменной с пустыми квадратными скобками), можно выбрать пункт меню «список» и указать присоединяемый элемент в окне списка переменных блока (рис. 78). Слева от имени матрицы или массива располагается знак «+», при нажатии на который под именем переменной появляется символическое изображение ее элемента (на рисунке элементы обеих переменных уже раскрыты, поэтому оба знака «+» заменены на «–»). В отличие от полей структур, элементы массивов и матриц не имеют собственных имен, и их число может быть произвольным, поэтому в списке отображается единственный элемент, символизирующий все элементы массива и матрицы. После его выбора конкретное значение индекса (или двух индексов через запятую, в случае матрицы) необходимо ввести вручную в поле ввода внизу окна внутри автоматически проставленных квадратных скобок. Каким-либо другим способом ввести значения индексов в этом окне нельзя.

(а)

(б)

Рис. 78. Выбор элемента массива (а) и матрицы (б) в полном списке переменных блока

Если вход или выход блока представляет собой сложную конструкцию из массивов, структур и матриц, вложенных друг в друга (массив структур, структура с полями-матрицами и т.п.), то подключить связь к какому-либо глубоко вложенному элементу переменной можно только через пункт меню переменных «список» – в само меню попадают только поля структур и элементы матриц и массивов на первом уровне вложенности. Такие сложные входы или выходы, хотя и редко, но, все-таки, встречаются. Например, стандартный многовходовый сумматор комплексных чисел имеет вход, представляющий собой массив структур типа «Complex», к отдельным элементам которого подключаются комплексные числа для суммирования. Если вдруг возникнет необходимость подключить к вещественному полю «Re» второго по счету (т.е. с индексом 1) элемента этого массива связь от поля ввода вещественного числа, необходимо будет протянуть связь к сумматору, нажать на нем левую кнопку мыши, а затем выбрать в меню пункт «список» – он будет там единственным (рис. 79 а).

(а)

(б)

(в)

Рис. 79. Подключение связи к глубоко вложенному элементу переменной:
протягивание связи к сумматору (а), выбор элемента в окне списка и
корректировка индекса (б), готовая связь (в)

После этого откроется окно со списком переменных блока (рис. 79 б), в котором необходимо будет раскрыть нажатием на знак «+» содержимое массива «X» – появится обозначение элемента этого массива «[...] (Complex)». Элемент массива является структурой, ее тоже нужно раскрыть – появятся поля «Re» и «Im». Выбрав поле «Re», необходимо вручную откорректировать имя переменной в поле ввода внизу окна, введя индекс «1» внутрь квадратных скобок. В результате в поле ввода окажется имя соединяемой переменной в синтаксисе RDS: «X[1].Re», т.е. поле «Re» элемента с индексом 1 массива «X» (вместо манипуляций с элементами списка можно сразу ввести этот текст в поле ввода). После нажатия «OK» связь будет присоединена к указанной переменной.

Все примеры, приведенные выше, иллюстрируют подключение связи к отдельному элементу или полю сложной входной переменной блока. Точно таким же образом можно присоединять связи к полям и элементам сложных выходов. Например, на рис. 80 изображена последовательность подключения числового индикатора к одному из выходов демультиплексора, подающего значение входа «x» на элемент массива-выхода «Y», номер которого определяется входом «N».

(а)

(б)

(в)

Рис. 80. Подключение связи к элементу выхода: выбор элемента выхода в меню (а),
указание индекса элемента (б), готовая связь (в)