Навигация:
<< >> Оглавление Указатель

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

Глава 1. Необходимые сведения об устройстве RDS

§1.6. Коротко о других способах взаимодействия блоков

Описываются скрытые от пользователя механизмы, позволяющий блокам обращаться друг к другу минуя связи и динамические переменные, а также обмениваться данными с другими приложениями Windows. Подробно они рассматриваются в руководстве программиста, а здесь дается их краткий обзор.

Помимо передачи данных по связям и через динамические переменные, у блоков есть и другие возможности общаться друг с другом. В то время, как связи создаются пользователем и явно видны ему, динамические переменные и другие способы взаимодействия, как правило, скрыты от пользователя, если только разработчик блока не включит управление ими в пользовательский интерфейс блока. Например, окно настройки блоков работы с динамическими переменными, изображенных на рис. 13, позволяют задавать имя переменной и ее тип. Несмотря на то, что пользователь непосредственно не работает с большинством из альтернативных способов передачи данных между блоками, ему необходимо знать, что взаимодействие блоков в схеме может не ограничиваться связями, которые он видит, и в общих чертах представлять себе возможности этих блоков.

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

В качестве примера функции, поддерживаемой многими стандартными блоками, можно привести функцию с именем «Common.ControlValueChanged». Обычно ее поддержка реализуется разработчиками различных блоков пользовательского интерфейса – кнопок, полей ввода, рукояток и т.п. Вызов этой функции заставляет блок немедленно считать данные со своих входов, если они у него есть, изменить свое внутреннее состояние согласно полученным значениям (например, переместить рукоятку в новое положение), выдать эти же значения на выходы и вызвать у всех присоединенных блоков эту же функцию. Именно за счет этой функции блоки пользовательского интерфейса можно соединять в цепочки и кольца, работающие не только в режиме расчета, но и в режиме моделирования (см. рис. 5). В режиме моделирования передача данных по связям и автоматический запуск моделей блоков не производится, но, за счет принудительной активации выходных связей и вызова функции «Common.ControlValueChanged» у всех соединенных блоков, введенное пользователем значение распространяется по цепочке.

Сообщение, выводимое блоком обработки ошибок (слева) при делении на ноль

Рис. 14. Сообщение, выводимое
блоком обработки ошибок (слева)
при делении на ноль

Другим примером широко используемой функции может служить «Common.MathError» – эту функцию выполняют блоки, предназначенные для обработки ошибок математических вычислений. Такой блок помещается в схему (рис. 14, квадратный блок с красной буквой «Е» в левой части рисунка), после чего при возникновении математической ошибки где-либо в той же подсистеме или в одной из вложенных, блок, обнаруживший ошибку, находит блок-обработчик и вызывает его функцию, передавая ему свое имя и описание ошибки. Обработчик, в свою очередь, выполняет предусмотренные программистом действия – например, останавливает расчет и выводит пользователю сообщение, как на рис. 14. Без использования вызова функции блока пришлось бы либо предусматривать во всех блоках специальный выход ошибки и соединять его с блоком-обработчиком связями, что загромоздило бы схему, либо встраивать реакцию на математические ошибки в каждый блок, что сделало бы эту реакцию жесткой. Сейчас, заменив блок-обработчик на другой, можно изменить реакцию на ошибки во всей обслуживаемой им части схемы. Механизм, с помощью которого блоки находят обслуживающий их обработчик, подробно описан в §3.6.13.4 описания пользователя и §2.13.6 руководства программиста

Поскольку модель любого блока в RDS является функцией в динамически подключаемой библиотеке (DLL), которая обычно пишется на каком-либо языке высокого уровня, возможности блоков по взаимодействию с различными объектами за пределами RDS ограничены только знаниями программиста-разработчика: ему доступны все функции Windows API. Например, не так уж сложно создать блоки, которые будут передавать и принимать данные по сети, взаимодействовать с другими приложениями и т.п. Для облегчения жизни программисту в RDS встроены механизмы, стандартизующие некоторые действия по обмену с внешним миром – в частности, обмен данными между блоками по сети и работу схемы под управлением другого приложения Windows.

Встроенный в RDS механизм обмена данными по сети подробно описан в §2.15 руководства программиста. Пользователь имеет с ним дело, в основном, через стандартные сетевые блоки, использующие этот механизм. Эти блоки позволяют, назначив одну из машин в сети сервером RDS, передавать в этой сети данные между схемами, загруженными на разных машинах, просто подавая эти данные на входы блоков и снимая их с выходов (рис. 15).

Передача по сети вещественного числа при помощи стандартных блоков

Рис. 15. Передача по сети вещественного числа при помощи стандартных блоков

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


<< >> Оглавление Указатель