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

Описания RDS

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

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

§2.8. Использование шин

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

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

### §2.8. Использование шин

Описывается создание шин и использование их для передачи данных.

Шины используются для того, чтобы большое количество разветвленных пересекающихся связей не загромождало сложные схемы. В RDS шина – это набор независимых каналов передачи данных. Ее можно представить себе как «пучок» связей, заключенных внутрь одной линии, где эти связи никак не взаимодействуют между собой. Линия шины может быть разветвленной и проходить через все рабочее поле схемы, другие связи могут подходить к ней и отходить от нее в любой точке, соединяясь с каналами этой шины и получая от них или передавая им данные. Технически шина в RDS является связью сложной структуры, поэтому ее редактирование очень похоже на описанное в §2.7.1 редактирование связи – шины можно разветвлять, продолжать, перемещать, удалять в них узлы и т.п. – за исключением того, что связи начинают рисовать от входов или выходов блоков, а шины обычно рисуют, начиная их в произвольной точке рабочего поля (см. ниже). Шины также можно вводить внутрь подсистем и выводить из них наружу при помощи специальных блоков-вводов, эти действия описываются в §2.11.3.

Соединения блоков с использованием шин отличаются от обычных соединений только внешним видом, на передачу данных прохождение их через шину не влияет. На рис. 81 изображены одни и те же соединения с использованием шины и без него. В данном случае не очень принципиально, соединены изображенные на рисунке блоки непосредственно или через шину, однако, если бы блоки 3, 4 и 5 находились на другом конце рабочего поля подсистемы, между ними и блоками 1 и 2 пришлось бы тянуть семь параллельных связей вместо единственной шины. Кроме того, каналам шины можно давать имена, отражающие смысл передаваемых данных. На рисунке изображены условные блоки, поэтому и имена каналов тоже условные: здесь имя «bNyM» означает, что этот канал передает данные выхода «M» блока «M». Тем не менее, даже в этом условном примере по именам каналов в правой части рисунка проще понять, что на вход «x3» блока 5 поступают данные с выхода «y1» блока 1 – связь между входом блока и шиной сделана короткой, и пользователь сразу видит имя канала «b1y1» на другом конце этой связи.

(а)

(б)

Рис. 81. Соединение блоков при помощи разветвленных связей (а)
и при помощи шины (б)

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

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

Рис. 82. Начало рисования шины

Начать рисование шины можно в любой точке рабочего поля подсистемы. Для этого следует в режиме редактирования нажать правую кнопку мыши в точке, где начнется шина, в контекстном меню выбрать пункт «создать», а в открывшемся подменю – пункт «начать шину» (рис. 82). После этого курсор мыши примет форму перекрестия, и от выбранной точки за ним будет тянуться прямая линия (рис. 83). Щелчками левой кнопкой можно добавлять в шину промежуточные узлы, двойной щелчок завершает рисование. После двойного щелчка курсор мыши снова примет форму стрелки, и на рабочем поле появится шина, цвет и толщина линии которой будут взяты из установок для шин в наборе стилей.

Можно начать рисование шины и другим способом: вместо щелчка правой кнопкой мыши на рабочем поле для вызова контекстного меню можно в главном меню RDS выбрать пункт «редактирование | создать | начать шину», после чего щелкнуть левой кнопкой мыши в точке начала шины. Далее рисование производится уже описанным выше способом.

(а)

(б)

(в)

Рис. 83. Добавление в шину промежуточного узла (а),
завершение рисования шины (б), готовая шина (в)

Созданная таким образом шина не содержит ни одного канала передачи данных. Можно сразу добавить необходимые каналы в окне параметров шины или добавлять их по одному в процессе подключения к ней связей. Сначала рассмотрим окно параметров шины и возможности, которые оно предоставляет.

Рис. 84. Вкладка «внешний вид»
окна параметров типичной шины

Для вызова окна параметров шины следует в режиме редактирования либо дважды щелкнуть на любой из линий шины, либо нажать на ней правую кнопку мыши и выбрать в контекстном меню пункт «параметры». Окно содержит три вкладки: «внешний вид», «имя и каналы» и «соединения».

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

На вкладке «имя и каналы» (рис. 85 а) задается имя шины и отображается список ее каналов. Имя шины не выводится на рабочем поле – фактически, единственная функция в RDS, которая его использует, это выделение по критерию: пользователь может автоматически выделить в подсистеме шины с похожими именами. Задается это имя в поле ввода в верхней части вкладки, имя шины должно быть уникальным в данной подсистеме. По умолчанию RDS дает шинам имена «Шина1», «Шина2» и т.д.

(а)

(б)

Рис. 85. Вкладки «имя и каналы» (а) и «соединения» (б) окна параметров типичной шины

Список каналов занимает большую часть вкладки и состоит из четырех колонок: имя канала, тип канала, число связей на его входе и число связей на выходе. На рис. 85 а изображена вкладка окна параметров шины с рис. 81 б – в списке можно видеть все семь каналов, к которым подключаются связи, изображенные на рисунке. В данном случае к входу каждого канала подключена одна связь (подключение двух и более было бы ошибкой – источник данных должен быть один, а отсутствие связей на входе сделало бы канал бессмысленным – ему неоткуда было бы брать данные для передачи), к выходам – по одной или по две. Справа от списка находятся кнопки, позволяющие изменить параметры выбранного в списке канала или добавить новый:

Кнопка | Действие
--- | ---
| Переместить выбранный канал на одну позицию вверх по списку
| Переместить выбранный канал на одну позицию вниз по списку
| Изменить имя и тип выбранного канала
| Добавить новый канал
| Удалить выбранный канал

Номер канала в списке, изменяемый первыми двумя кнопками, не влияет на передачу данных. Последовательность каналов определяет только внешний вид меню подключения связи к шине (см. рис. 88 ниже) – обычно наиболее употребительные каналы стараются поднять в списке повыше, чтобы соответствующие им пункты меню были первыми.

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

(а)

(б)

Рис. 86. Окно добавления канала при задании простого типа переменной (а)
и матрицы (б)

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

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

Если для схемы заданы какие-либо классы объектов, в окне параметров шины будет присутствовать вкладка «классы» (рис. 87), на которой можно включить эту шину в один или несколько классов схемы. При отсутствии в схеме классов эта вкладка не отображается.

Рис. 87. Вкладка «классы» окна параметров шины

Большую часть вкладки занимает список классов схемы, в котором галочками отмечены те из них, к которым принадлежит данная шина. Шина, как и любой объект схемы, может одновременно принадлежать к нескольким классам или не принадлежать ни к одному, на рис. 87 она принадлежит к классам «вычислительные» и «логические». Кнопки «включить все» и «выключить все» внизу вкладки устанавливают и сбрасывают все галочки соответственно, кнопка «классы» открывает окно редактирования классов схемы.

Все изменения, сделанные на вкладках окна параметров шины, вносятся в схему только при нажатии кнопки «OK». Если в настройках RDS разрешена отмена действий пользователя, эти изменения можно отменить нажатием Ctrl + Z.

Подключение связей к шине во многом похоже на подключение их к блокам, но меню подключения и дополнительные окна несколько отличаются. Если начать связь от выхода блока и дотянуть ее до шины, при щелчке на шине появится меню (рис. 88 а) с перечислением имен всех каналов, совместимых с данным типом выхода, и еще не имеющих соединенных с ними выходов блоков (в меню также будут присутствовать пункты «список» и «добавить», которые будут описаны ниже).

(а)

(б)

Рис. 88. Подключение к шине выхода блока: меню
соединения (а) и готовая связь (б)

Если же начать связь от входа блока, совместимые по типу каналы шины будут перечислены в меню подключения два раза (рис. 89 а): сначала – как выходы (с иконками «круг и стрелка от него»), а затем – как входы (с иконками «круг и стрелка к нему»). При этом во второй части списка будут присутствовать только те каналы, к которым еще не подключены связи от выходов блоков – например, в меню на рис. 89 а в нижней части отсутствует канал «Chn_2», поскольку к нему уже подключена связь от выхода поля ввода.

(а)

(б)

Рис. 89. Подключение к шине входа блока: меню
соединения (а) и готовая связь (б)

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

Связи можно подключать не только к вертикальным линиям шин, как на рис. 81, 88 и 89, но и к горизонтальным и диагональным (рис. 90). Однако, подключение к вертикальным линиям обычно позволяет получить схему, выглядящую более компактно.

Рис. 90. Подключение связей к шине с разных сторон

Рис. 91. Окно списка каналов шины при
присоединении связи

Наверху в меню подключения связи к шине всегда располагается пункт «список», открывающий окно, в котором можно выбрать канал из полного списка каналов шины (рис. 91). Это окно в целом похоже на окно списка переменных, используемое при подключении связи к блоку (см. рис. 44), но, в отличие от последнего, у окна списка каналов шины две вкладки: на вкладке «входы» каналы перечислены с точки зрения использования их как получателей данных от связи, а на вкладке «выходы» – с точки зрения использования их как источников данных. Если связь тянется от выхода блока, следует выбирать вкладку «входы»: у связи уже есть источник данных (выход блока), и канал может быть только получателем. Если же связь тянется от входа блока, можно выбрать любую вкладку: при выборе канала на вкладке «выходы» связь будет получать от него данные, при выборе его же на вкладке «входы» он будет получать данные от связи. Если соединение канала со связью по тем или иным причинам невозможно (несовместимый тип или у связи уже есть источник данных), при его выборе в списке в нижней части окна будет выведено сообщение об ошибке. В этом же окне можно добавить в шину новый канал и подключить к нему связь, нажав кнопку «новый». Это действие полностью аналогично выбору в меню подключения (рис. 88, 89) пункта «добавить», описанного ниже.

На втором месте в меню подключения связи к шине всегда находится пункт «добавить» – при его выборе, а также при нажатии кнопки «новый» в окне списка каналов, открывается окно добавления канала к шине (рис. 92). Это окно похоже на окно добавления канала в параметрах шины, описанное ранее (см. рис. 86) – в нем точно так же вводится имя канала и выбирается его тип. Но в этом окне тип уже будет исходно установлен согласно типу переменной, от которой тянется подключаемая связь, а в его нижней части располагаются два дополнительных флажка, управляющих подключением связи ко входу или выходу канала (если связь тянется от выхода блока, флажок «подключить к выходу» будет не активен, так как связь не может соединять два выхода). По нажатию кнопки «OK» в шину будет добавлен новый канал и связь будет подключена к нему.

Рис. 92. Окно добавления канала к шине при подключении связи

Если в шине уже есть каналы, можно начать рисование связи от самой шины. Для этого следует выбрать точку на линии шины, от которой начнется связь, щелкнуть на ней правой кнопкой мыши и выбрать в контекстном меню пункт «начать связь» (вместо вызова контекстного меню можно, как и при рисовании связи от блока, щелкнуть в выбранной точке левой кнопкой мыши при нажатой клавише Ctrl). При этом откроется меню, в котором можно будет выбрать имя канала, с которым будет соединена создаваемая связь. Это меню содержит двойной список каналов шины: сначала для использования их как выходов, затем – как входов. Оно похоже на изображенное на рис. 89, только в нем не будет пункта «добавить». После выбора в меню нужного канала (или указания канала в окне списка, вызываемого пунктом «список», см. рис. 91), рисование связи производится обычным образом.

Как и связь, шина может быть продолжена (рис. 93) или разветвлена (рис. 94) в любой точке при помощи тех же действий и тех же пунктов меню, которые используются при редактировании связи. Все остальные действия по редактированию шины (добавление и перемещение узлов, перемещение отрезков, удаление узлов, линий и ветвей) тоже совпадают с аналогичными действиями для связи и здесь не приводятся.

(а)

(б)

(в)

Рис. 93. Продолжение шины: начало (а), окончание (б), готовая шина (в)

(а)

(б)

(в)

Рис. 94. Ответвление шины: начало (а), окончание (б), готовая шина (в)

Следует учитывать, что при перемещении всей шины или отдельных ее узлов все точки соединения связей с этой шиной будут двигаться так, чтобы оставаться на шине, поэтому после такого перемещения форма связей может измениться (рис. 95).

(а)

(б)

Рис. 95. Перемещение узла шины (а) и вызванное им изменение внешнего вида связей (б)