Руководство программиста
Глава 1. Устройство RDS
§1.2. Блоки RDS и их типы
Описываются типы блоков, из которых состоит схема RDS, и особенности каждого из этих типов.
Схема в RDS состоит из набора блоков, соединенных друг с другом (см. §1.2 описания пользователя). Блоку может ставиться в соответствие функция-модель во внешней библиотеке (DLL), определяющая его реакцию на различные события и действия пользователя (при вызове модели ей передается одна из констант RDS_BFM_*, соответствующая произошедшему событию). У большинства блоков есть набор статических переменных, то есть переменных, которые, как правило, создаются вместе с блоком, и не изменяют свою структуру в процессе его работы. Они служат для хранения данных и передачи их между блоками. Статическая переменная может быть входом блока, выходом или внутренней. Выход одного блока может соединяться со входами нескольких других при помощи связи, которая изображается как линия (возможно, разветвленная) со стрелками в местах соединения со входами блоков. Каждая связь может быть подключена только к одному выходу блока и к произвольному числу входов. К одному входу блока может быть подключено несколько связей, в этом случае на вход будут переданы данные той связи, которая сработала последней. Связь не может реагировать на какие-либо события или изменять передаваемые данные, вся обработка должна осуществляться в блоках, к которым подключена эта связь. Кроме обычных связей в схеме могут присутствовать шины – группы связей, изображаемых одной линией (как правило, жирной). Шина состоит из независимых друг от друга каналов передачи данных, к которым снаружи могут подключаться обычные связи (одна ко входу канала, произвольное число к выходу).
Все блоки в RDS принадлежат к одному из пяти типов:
- Простой блок. Это – самый распространенный тип блока (рис. 1). Его поведение определяется только его параметрами и моделью в DLL. Статические переменные простого блока чаще всего задаются при его создании и более не изменяются, поэтому внутри функции модели к ним можно обращаться непосредственно по адресам. Структура этих переменных может быть любой, но первые две переменных любого простого блока всегда жестко зафиксированы: первая из них является входом, управляющим запуском модели блока, а вторая – выходом, сигнализирующим о срабатывании модели и разрешающим передачу данных по связям. Особенности работы с этими переменными будут описаны в §1.3.
- Подсистема – блок, содержащий внутри себя другие блоки и связи (рис. 2). Каждая подсистема отображается в отдельном окне. Статические переменные подсистемы появляются и исчезают при редактировании ее содержимого, поэтому обращение к ним из функции модели нежелательно. Схема всегда содержит хотя бы одну подсистему – корневую (главную). В корневой подсистеме содержатся все остальные блоки схемы.
- Внешний вход – блок, служащий для передачи данных внутрь подсистемы. Он имеет единственную статическую переменную-выход, при этом ей всегда соответствует статическая переменная-вход того же типа в родительской подсистеме (то есть в подсистеме, внутри которой находится этот блок). Для того, чтобы передать данные внутрь подсистемы, необходимо присоединить связь к переменной-входу в этой подсистеме, затем найти внутри нее внешний вход, соответствующий этой переменной, и продолжить связь от него.
- Внешний выход – блок, служащий для передачи данных изнутри подсистемы наружу. Он имеет единственную статическую переменную-вход, при этом ей всегда соответствует статическая переменная-выход того же типа в родительской подсистеме. Для передачи данных наружу необходимо присоединить связь к единственной переменной внешнего выхода, а затем продолжить ее от соответствующего выхода самой подсистемы.
- Ввод шины – блок, позволяющий соединить шину внутри подсистемы с шиной снаружи (рис. 3). Соединенные шины имеют один и тот же набор каналов и обеспечивают передачу данных между подсистемами. Для того, чтобы соединить внутреннюю и внешнюю шины, необходимо добавить в подсистему ввод, соединить с ним внутреннюю шину, а затем соединить внешнюю шину с подсистемой, указав имя этого ввода (можно действовать и в обратной последовательности).
Рис. 1. Простой блок
с подключенными связями
Рис. 2. Подсистема с внешними
входами «Input1» и «Input2» и
выходом «Output1»
Рис. 3. Ввод шины в подсистему
Блоки можно сохранять в отдельные файлы для использования в других схемах. Именно так устроены библиотека и панель стандартных блоков RDS: это просто набор отдельных файлов в соответствующих папках. Простые блоки, внешние входы и выходы, вводы шин обычно сохраняются в файлы с расширением «.blk», а подсистемы – в файлы с расширением «.rds». Это же расширение имеют и схемы, поскольку файл схемы – это, по сути, корневая подсистема схемы, сохраненная в файл. Таким образом, сохраненные схемы можно, при желании, использовать как блоки в других схемах.