Описание пользователя
Глава 2. Интерфейс пользователя
§2.7. Создание и изменение связей
Описываются стандартные действия по соединению блоков связями.
§2.7.1. Общие принципы создания связей
Описываются виды связей между блоками и способ создания таких связей.
Связи соединяют между собой выходы и входы блоков и в режиме расчета передают данные между ними. Связь может соединять между собой один выход и один вход – в этом случае она называется простой, или один выход и несколько входов – в этом случае она называется разветвленной (рис. 42). Создание связи, соединяющей несколько выходов блоков, невозможно – при передаче данных получателей может быть много, но источник должен быть единственным.
Рис. 42. Простые (слева) и разветвленные (справа) связи
На рабочем поле схемы связь изображается набором точек (узлов) и соединяющих их отрезков прямых или кривых линий. В простейшем случае простая связь состоит из двух конечных узлов (точек соединения с блоками) и линии между ними. Узлы, присоединенные ко входам блоков, всегда помечается стрелками, при этом рядом с ними и с узлами, присоединенными к выходам, обычно отображается имя связанной переменной блока. Таким образом, по внешнему виду связи сразу можно определить, что с чем она соединяет. Например, связь, изображенная в левом нижнем углу рис. 42, соединяет выход «y» правого блока с входом «x1» левого. Цвет, толщина, стиль линии и размеры стрелок могут задаваться индивидуально для каждой связи в окне ее параметров. Отображение имен переменных возле конечных узлов может быть отключено как для всей подсистемы, так и для конкретного узла связи. Связь, изображенная в левом верхнем углу рис. 42, соединяет выход «edit» поля ввода (левого блока) с входом «x» правого, однако, отображение имени «edit» рядом с узлом запрещено, так как у поля ввода есть только один выход, и его имя можно не показывать.
Кроме конечных узлов в связи могут также присутствовать промежуточные узлы, служащие точками излома или разветвления связи. Они не соединены с блоками и нужны только для придания связи желаемого внешнего вида. В точках разветвления обычно изображается жирный кружок (см. рис. 42 справа), позволяющий отличить разветвление от точки, в которой линии двух независимых связей пересекаются без соединения. Толщина этого кружка может быть задана в окне параметров связи. Линии, соединяющие узлы, могут быть прямыми или кривыми Безье. Исходно все связи рисуются прямыми линиями, но после рисования в контекстном меню уже созданной линии можно переключать ее тип.
Создание связи начинается с выбора одного из ее конечных узлов, то есть с выбора входа или выхода одного из блоков, которые будет соединять связь. Для начала рисования связи следует в режиме редактирования подвести курсор мыши к точке на границе изображения блока, к которой будет подходить связь, а затем либо нажать правую кнопку мыши и выбрать в контекстном меню пункт «» (рис. 43 а), либо нажать левую кнопку мыши при нажатой клавише Ctrl (рис. 43 б). В обоих случаях откроется дополнительное меню, в котором будут перечислены входы и выходы блока, которые его разработчик пометил как основные.

(а)

(б)
Рис. 43. Начало создания связи через контекстное меню (а) или при помощи щелчка мыши с нажатой клавишей Ctrl (б)
Точка на изображении блока, к которой будет подходить связь, может выбираться произвольно – в RDS нет специальных правил, требующих, например, располагать входы блока слева, а выходы – справа, или специальных точек соединения на изображениях блоков. Работа связи будет определяться не положением ее точки присоединения к блоку, а именем переменной, к которой связь подключается. Не обязательно указывать точку точно на границе изображения блока – главное, чтобы она оказалась внутри прямоугольной области, занимаемой этим изображением. В момент начала создания связи RDS автоматически переместит ее начальную точку на ближайшую границу описывающего прямоугольника блока. При необходимости, эту точку можно будет переместить в любое положение внутри этого прямоугольника позже, когда вся связь будет уже нарисована.
В меню, открывающемся при начале рисования связи, следует выбрать имя переменной блока, к которой будет подключена создаваемая связь. Назначение этих переменных обычно приводится в описании каждого библиотечного блока, кроме того, если разработчик блока предусмотрел пояснения к переменным, такие пояснения выводятся в этом же меню после имени каждой переменной. В меню перечисляются сначала выходы блока, потом, после горизонтальной черты – входы. Связь можно начинать рисовать как от выхода ко входу, так и от входа к выходу – направление передачи данных определяется ролью соединяемых переменных в блоках, а не последовательностью их задания при рисовании связи.
Рис. 44. Полный список переменных блока
Следует помнить, что в меню перечислены только основные входы и выходы, то есть те переменные, для которых разработчик блока явно указал необходимость включения в меню создания связи. В блоке могут быть и другие, скрытые входы и выходы – чтобы увидеть полный список переменных блока, следует, вместо имени переменной, выбрать в меню пункт «». При этом откроется окно, в котором будут перечислены имеющиеся в блоке переменные с указанием их типа и числа уже подключенных к ним связей (рис. 44). В этом окне можно либо выбрать переменную в списке, либо вручную ввести ее имя в поле ввода в нижней части, и подтвердить свой выбор нажатием кнопки «» (кнопка «» прерывает создание связи). По умолчанию в окне показываются только переменные, к которым связь может быть подключена: например, если создается связь от выхода какого-то блока, при подключении этой связи к другому блоку в окне списка переменных будут отображаться только входы этого блока. Чтобы увидеть в списке все переменные блока, включая те, к которым нельзя присоединить данную связь, следует включить флажок «» под списком.
После того, как первая соединяемая переменная выбрана в меню (рис. 43) или в окне списка переменных (рис. 44), курсор мыши принимает форму перекрестия и за ним начинает тянуться линия к выбранной начальной точке связи (рис. 45 а). Для создания простейшей связи достаточно переместить курсор на изображение блока, содержащего вторую соединяемую переменную, и нажать левую кнопку мыши. При этом откроется меню, содержащее основные (то есть специально помеченные разработчиком блока) переменные, к которым может быть подключена эта связь (рис. 45 б).

(а)

(б)

(в)
Рис. 45. Рисование связи после выбора первой соединяемой переменной:
перемещение курсора ко второму блоку (а), выбор соединяемой переменной (б), готовая связь (в)
Поскольку первая соединяемая переменная уже выбрана, в это меню попадут только переменные, совместимые с ней по типу и роли в блоке. Если рисование связи было начато от выхода блока, в меню попадут только входы, поскольку два выхода не могут быть соединены между собой. Если рисование было начато от входа, в меню попадут и входы и выходы. При этом будут показаны только переменные тех типов, соединение которых допустимо и не вызовет потери данных. Например, если указанный в качестве начальной точки связи выход блока имеет тип «double» (вещественное число двойной точности), логические входы блока, на изображении которого была нажата левая кнопка мыши, не попадут в меню. Точно так же, в меню не попадут никакие переменные, кроме массивов и матриц, если указанный выход – массив. Полный список переменных всегда можно получить, выбрав пункт меню «» – при этом откроется уже знакомое окно со списком всех переменных блока (см. рис. 44). В нем можно указать вторую соединяемую переменную вручную, даже если это вызовет потерю данных. В списке переменных рядом с их именами отображаются цветные метки: зеленая, если соединение возможно без потерь; желтая, если соединение возможно, но при этом может произойти потеря точности или информации; красная, если соединение невозможно в принципе. При выборе переменной в списке непосредственно под ним выводится сообщение о возможных проблемах в данном соединении (на рис. 44 под списком отображается «OK» – соединение возможно без потери точности).
После выбора имени переменной в меню готовая связь отобразится на рабочем поле схемы (рис. 45 в). Конечная точка связи, как и ранее начальная, будет автоматически перемещена к ближайшей границе изображения блока. Внешний вид связи (толщина линии, цвет и т.п.) будет взят из набора стилей согласно типу соединяемых переменных.
Если связь должна изображаться не одним отрезком прямой, а ломаной линией, в процессе рисования в нее можно добавить промежуточные узлы, просто нажимая левую кнопку мыши в той точке свободного места рабочего поля, в которую нужно поместить такой узел. При этом линия, тянущаяся за курсором мыши, будет все время соединять его с последним добавленным узлом (рис. 46).

(а)

(б)

(в)

(г)
Рис. 46. Последовательность создания связи с промежуточными узлами
Заканчивается рисование связи, как и в предыдущем случае, щелчком на изображении блока и выбором переменной из списка. Следует помнить, что промежуточный узел при рисовании связи не может быть размещен на изображении какого-либо блока, поскольку щелчок на изображении любого блока считается концом связи и открывает список переменных. При необходимости, любое количество промежуточных узлов может быть добавлено в связь позже, когда она уже создана, и эти узлы могут быть перемещены куда угодно, в том числе и на изображения других блоков. Тем не менее, пересечение связью изображения «постороннего» блока не рекомендуется из соображений лучшей читаемости схемы.
Отменить начатое рисование связи можно нажав правую кнопку мыши (при этом последний участок рисуемой ломаной линии будет удален) или сделав двойной щелчок на свободном месте рабочего поля. Если для связи уже было указано несколько промежуточных узлов, такая связь не будет автоматически стерта, а останется соединенной только с одной переменной, с которой было начато рисование. Второй конец связи будет «висеть в воздухе» и она не будет передавать никаких данных. Незаконченную связь можно дорисовать в любой момент, нажав на ее оборванном конце левую кнопку мыши, удерживая клавишу Ctrl, или нажав на нем правую кнопку и выбрав в контекстном меню пункт «». Следует помнить, что состав пунктов контекстного меню связи зависит от того, куда пришелся щелчок правой кнопки мыши: пункт «» будет присутствовать в меню только при щелчке на конечный узел оборванной связи.
Описанным выше способом создаются простые связи. Для того, чтобы создать разветвленную связь, следует сначала создать одну из ее ветвей как простую связь, а затем по очереди добавлять к ней остальные ветви. Для этого нужно выбрать на уже созданной связи точку, в которой она разветвится (не важно, будет это узел или какая-либо произвольная точка на одной из линий) и либо нажать левую кнопку мыши, удерживая клавишу Ctrl, либо нажать правую кнопку и выбрать в контекстном меню пункт «» (рис. 47). После этого курсор мыши примет форму перекрестия, и за ним, как и при рисовании простой связи, будет тянуться линия от выбранной точки ветвления. Дальше рисование связи осуществляется обычным образом – щелчки на свободном месте рабочего поля добавляют промежуточные узлы, щелчок на изображении блока открывает меню со списком совместимых со связью переменных, выбор одной из которых завершает рисование ветви связи.

(а)

(б)

(в)

(г)
Рис. 47. Последовательность создания ответвления связи
Чтобы проще было проводить строго горизонтальные и строго вертикальные линии, в процессе рисования связи можно расширить перекрестие курсора мыши, нажав клавишу Shift. Пока она нажата, на рабочем поле будут отображаться горизонтальная и вертикальная линии, пересекающиеся в точке под курсором. Увидев, как эти линии проходят по изображениям блоков, можно представить себе, как будет выглядеть будущая связь, если вставить промежуточный узел в данной точке. В некоторых случаях в момент присоединения к блоку RDS автоматически делает линию строго горизонтальной или вертикальной, если взаимное положение последнего узла и соединяемого блока это допускает.
Связи также можно вводить внутрь подсистем и выводить из них наружу, эти действия описываются в §2.11.2.