Руководство программиста
В этой главе рассматривается основные принципы работы RDS: модули, из которых состоит приложение, внутреннее устройство блоков схемы, режимы работы, способы взаимодействия блоков с пользователем. Вводятся основные термины, которые будут использованы в следующих главах.
Кратко описывается структура RDS как приложения Windows: перечислены основные папки и файлы приложения.
Описываются типы блоков, из которых состоит схема RDS, и особенности каждого из этих типов.
Описываются три режима работы RDS и циклический вызов моделей блоков в режиме расчета.
§1.4. Параметры и внешний вид блоков
Описывается внутренняя структура блоков RDS, способы задания их внешнего вида в окне подсистем, возможности взаимодействия блоков с пользователем.
§1.5. Статические переменные блоков, входы и выходы
Описывается структура и возможные типы статических переменных блока, то есть тех переменных, которые обычно существуют все время жизни блока и не создаются и не уничтожаются в процессе работы схемы. Входы и выходы блока, к которым могут присоединяться связи, всегда являются статическими переменными. Описывается способ формирования строки типа, используемой для проверки правильности структуры переменных.
§1.6. Взаимодействие блоков между собой
Описываются способы взаимодействия блоков друг с другом через динамические переменные, которые создаются в процессе работы одним блоком подсистемы и автоматически становятся доступными для других блоков. Использование динамических переменных для передачи данных не загромождает подсистему лишними связями и не требует запуска режима расчета, что иногда может оказаться очень удобным.
§1.7. Реакция на действия пользователя
Описываются способы реакции модели блока на действия пользователя: нажатие кнопок и перемещение курсора мыши, нажатие и отпускание клавиш клавиатуры. Также описывается создание собственных пунктов меню блока и функции настройки параметров.
§1.8. Открытие окон в модели блока
Описываются особенности открытия модальных (блокирующих доступ к остальным окнам приложения до своего закрытия) и немодальных (позволяющих переключаться в другие окна) окон из программы модели блока и связанные с этим проблемы, на которые следует обратить внимание. Различные примеры работы с окнами в моделях блоков приведены в §2.7.
Глава 2. Создание моделей блоков
В главе подробно разбираются различные аспекты написания моделей блоков, реакции на системные события, вызов сервисных функций RDS. Приводятся примеры исходных текстов моделей на языке C++ с подробным описанием работы этих моделей.
Описывается общий принцип размещения моделей в динамически подключаемых библиотеках (DLL) и способ компиляции примеров моделей, рассматриваемых в этой главе.
§2.2. Главная функция DLL и файлы заголовков
Описывается главная функция DLL, которую должна иметь каждая библиотека с моделями блоков, а также реализация взаимодействия программы модели с главной программой RDS при помощи сервисных функций. Приводится пример использования макроса, позволяющего получить доступ ко всем функциям RDS сразу.
§2.3. Структура функции модели блока
Рассматривается общая структура функции модели блока на языке C/C++, объясняется смысл ее параметров. Описывается структура данных, которую RDS хранит для каждого блока.
§2.4. Инициализация и очистка данных блока
Описывается событие инициализации RDS_BFM_INIT – самое первое событие в «жизни» модели блока, и событие очистки RDS_BFM_CLEANUP – самое последнее. Приводится пример модели, отводящей себе память под личные нужды при инициализации и освобождающей ее при очистке.
§2.5. Статические переменные блоков
Описывается работа со статическими переменными блоков (то есть переменными фиксированной структуры), которые могут служить им входами и выходами. Рассматриваются особенности работы с сигнальными переменными, матрицами и массивами, структурами, строками произвольной длины, а также с переменными, меняющими свой тип в процессе работы. Приводятся примеры моделей блоков, иллюстрирующие доступ к переменным каждого типа.
§2.5.1. Доступ к статическим переменным и работа в режиме расчета
Описывается способ чтения и записи значений статических переменных блока. Рассматривается событие проверки допустимости типа статических переменных RDS_BFM_VARCHECK и событие выполнения такта расчета RDS_BFM_MODEL. Приводится пример блока, выдающего в режиме расчета на выход разность двух вещественных входов. В примере предусмотрена проверка значений входов блока на специальное значение, символизирующее ошибку вещественных вычислений.
§2.5.2. Особенности использования сигналов
Описываются особенности работы с переменными сигнального типа, то есть с переменными, используемыми для передачи информации о факте наступления какого-либо события. Использование сигналов позволяет организовать сложное логическое взаимодействие блоков. Приводится пример модели блока-счетчика, увеличивающего значение своего выхода на единицу при каждом поступлении сигнала на вход.
§2.5.3. Доступ к матрицам и массивам
Описываются особенности работы с матрицами и массивами: их размещение в памяти, макросы для доступа к ним, сервисные функции для изменения размера матриц. Приводится пример блока, умножающего вход-матрицу на вход-число и выдающего результат на выход.
Описываются особенности работы с переменными-строками произвольной длины и сервисные функции для их создания, уничтожения и сложения. Приводится пример блока, преобразующего поступившее на вход целое число в строку.
Описываются особенности работы с переменными-структурами, их размещение в памяти и способ доступа к их полям при помощи макросов. Приводится пример блока, суммирующего два комплексных входа, в котором комплексные числа представлены структурами с двумя вещественными полями Re и Im.
§2.5.6. Работа с переменными произвольного типа
Описываются особенности работы с переменными, тип которых может изменяться в процессе работы системы. Приведен пример блока – универсального выключателя, пропускающего или не пропускающего значение входа произвольного типа на выход в зависимости от дополнительного логического входа. Также приводится пример блока, выдающего на выходы разные значения в зависимости от типа значения, поступившего на вход. В третьем примере модель меняет тип выхода в зависимости от значения целого числа на входе.
§2.5.7. Использование входов со связанными сигналами
Описывается работа с входами блока, для которых заданы связанные сигналы – по этим сигналам можно понять, какие из входов блока сработали в данном такте расчета. Приводится пример модели блока, вычисляющей произведение минимального элемента первой входной матрицы и максимального элемента второй входной матрицы. Анализируя связанные сигналы входов, эта модель вычисляет максимальный или минимальный элемент только для изменившейся матрицы, экономя тем самым процессорное время.
§2.5.8. Использование выходов с управляющими переменными
Описывается использование управляющих переменных, которые позволяют запретить передачу по связям значения конкретного выхода блока, а также активировать связь, подключенную к конкретному элементу выхода-массива. Приведен пример модели переключателя с двумя выходами, передающего входное значение на один или на оба выхода в зависимости от значения дополнительного входа (работа неактивного выхода блокируется управляющей переменной). Также приведен пример демультиплексора на произвольное число выходов (активный выход выбирается целой управляющей переменной массива).
Описывается работа с динамическими переменными, то есть с переменными, которые модели блоков создают и уничтожают в процессе работы. Модели могут создавать такие переменные в корневой или родительской подсистеме блока, поэтому несколько блоков могут получать доступ к одной и той же динамической переменной и использовать ее для связи.
§2.6.1. Использование динамических переменных
Описываются общие принципы работы с динамическими переменными – их создание, уничтожение, получение доступа к созданным («подписка»). Описаны основные сервисные функции RDS, относящиеся к динамическим переменным.
§2.6.2. Подписка на динамическую переменную
Приводится пример модели блока, получающего доступ к стандартной динамической переменной времени «DynTime», создаваемой блоком-планировщиком, и используемой большинством библиотечных блоков. Блок в примере вычисляет синус от времени, умножает его на значение входа и выдает на выход. В примере также рассматривается реакция модели на событие RDS_BFM_DYNVARCHANGE, сигнализирующее о том, что динамическая переменная изменилась.
§2.6.3. Создание и удаление динамической переменной
Описываются сервисные функции создания и удаления динамических переменных. Приводится пример двух блоков, организующих связь между разными частями схемы при помощи динамической переменной, создаваемой в корневой подсистеме. В примере также рассматривается событие перехода в режим моделирования RDS_BFM_CALCMODE и событие запуска расчета RDS_BFM_STARTCALC.
§2.6.4. Работа с несколькими динамическими переменными
Рассматриваются особенности работы модели блока с несколькими динамическими переменными одновременно. Приводится пример, в котором блок перемещается в окне подсистемы с заданной скоростью и в заданном направлении, при этом скорость и направление он берет из динамических переменных, созданных в подсистеме другим рассматриваемым в примере блоком, а время – из динамической переменной «DynTime» стандартного библиотечного блока-планировщика.
§2.6.5. Работа со сложными динамическими переменными
Рассматривается работа с динамическими переменными сложных типов: матрицами, структурами и т.п. Приводится пример, в котором два блока передают друг другу матрицу вещественных чисел через динамическую переменную в корневой подсистеме.
§2.7. Настройка параметров блока
Описываются способы предоставления пользователю интерфейса для настройки параметров блока. Рассматриваются возможности открытия моделью блока модальных окон, возникающие при этом проблемы и их решения. Рассматривается использование специальных вспомогательных объектов RDS, позволяющих без особых усилий формировать модальные окна с полями ввода. Также рассматривается способ хранения параметров блока в файле схемы, не требующий введение в модель дополнительных реакций – запись значений параметров значения по умолчанию статических переменных блока.
§2.7.1. Функция настройки блока и открытие модальных окон
Описывается реакция модели на функцию настройки блока (RDS_BFM_SETUP), возможность вызова которой встроена в пользовательский интерфейс RDS. С помощью этой реакции в блоки, описанные в §2.6.3 (приемник и передатчик, организующие связь через динамическую переменную), добавлен интерфейс для настройки.
§2.7.2. Использование объектов-окон RDS
Рассматривается использование вспомогательных объектов RDS, облегчающих создание и открытие модальных окно с полями ввода, описаны сервисные функции для работы с этими объектами. С их помощью в один из ранее описывавшихся блоков добавлен простой пользовательский интерфейс. Во другом примере рассматривается блок-генератор, выдающий на выход синусоиду, косинусоиду или прямоугольные импульсы по выбору пользователя, при этом некоторые поля в его окне настройки, формируемом при помощи вспомогательного объекта RDS, разрешаются или запрещаются в зависимости от значений других полей.
§2.7.3. Расширенные возможности функции обратного вызова
Рассматривается рисование произвольных изображений в модальном окне, формируемом вспомогательным объектом RDS. Для этого в окно настроек блока из предыдущего примера добавляется изображение внешнего вида формируемой генератором функции.
§2.7.4. Хранение настроечных параметров в переменных блока
Описывается хранение настроечных параметров блока в значениях по умолчанию его статических переменных. Этот способ не требует введения в модель новых реакций, к тому же, он позволяет пользователю выбирать: задавать ли ему параметр вручную в окне настроек блока или подключить к нему связь и передавать ему значение откуда-нибудь из схемы. Приведен пример блока, вычисляющего y=K×x+C, где x – вход, а K и C могут либо задаваться в окне настройки, либо получать свои значения по связям от других блоков.
§2.7.5. Открытие модальных окон средствами Windows API
Рассматривается пример модели блока, позволяющего выбрать произвольный цвет при помощи стандартного диалога Windows и выдающего выбранный цвет на выход в виде целого числа. Пример иллюстрирует открытие модальных окон (в данном случае – стандартного диалога) средствами Windows API.
§2.7.6. Открытие модальных окон в режиме расчета
Рассматриваются особенности открытия модальных окон в режиме расчета. Блок из предыдущего примера модифицируется так, чтобы модальное окно в режиме расчета не вызывало проблем. Описывается сервисная функция RDS rdsUnlockAndCall.
§2.8. Сохранение и загрузка параметров блока
Рассматриваются процедуры сохранения и загрузки личных параметров блока в файле схемы. Описывается более простой двоичный способ сохранения и более сложный – текстовый. Для текстового режима приводятся разные способы хранения данных: формат с ключевыми словами и формат, аналогичный стандартным INI-файлам («имя=значение»). Рассматриваются вспомогательные объекты RDS, упрощающие разбор текста.
§2.8.1. Способы хранения параметров блока
Рассматриваются двоичный и текстовый форматы хранения личных данных блока в файле или буфере обмена, указываются преимущества и недостатки обоих форматов.
§2.8.2. Сохранение параметров в двоичном формате
Рассматривается сохранение и загрузка личных данных блока в двоичном формате, описываются соответствующие реакции модели (RDS_BFM_SAVEBIN и RDS_BFM_LOADBIN соответственно). В один из ранее описанных примеров добавляется сохранение и загрузка параметров в двоичном формате.
§2.8.3. Сохранение параметров в текстовом формате
Рассматривается сохранение и загрузка параметров блока в текстовом формате, описываются соответствующие реакции модели (RDS_BFM_SAVETXT и RDS_BFM_LOADTXT). В модель ранее описанного в примерах блока-генератора добавляются процедуры для хранения его параметров в текстовом виде.
§2.8.4. Поиск ключевых слов с помощью объекта RDS
Рассматривается вспомогательный объект RDS, облегчающий поиск ключевых слов в текстовом формате хранения личных данных блока. Модель из предыдущего примера переписывается с использованием этого объекта.
§2.8.5. Сохранение параметров блока в формате INI-файла
Рассматривается вспомогательный объект RDS, позволяющий организовать хранение личных данных блока в текстовом формате, похожем на стандартные INI-файлы Windows («имя=значение»). В один из предыдущих примеров добавляются процедуры сохранения и загрузки параметров с использованием этого объекта.
Рассматривается использование таймеров – объектов RDS, позволяющих организовать вызов модели блока через определенные промежутки времени. Описываются циклические таймеры, вызывающие модель постоянно с заданным интервалом, и однократные, вызывающие модель один раз через указанный промежуток времени и требующие явного перезапуска. Отдельно рассматриваются особенности работы модели блока с несколькими таймерами одновременно.
Описывается создание таймеров в RDS, режимы их работы и возможные способы вызова модели блока при срабатывании таймера.
Описывается циклический таймер, постоянно вызывающий модель блока через заданный интервал времени. Рассматривается пример блока, изображающего мигающую индикаторную лампочку.
§2.9.3. Однократно срабатывающий таймер
Описывается таймер, однократно вызывающий модель блока по истечении заданного интервала. Рассматривается пример блока, изображающего мигающую индикаторную лампочку, длительность горения которой не равна длительности паузы (после каждого срабатывания таймер перезапускается с новой задержкой).
§2.9.4. Несколько таймеров в одной модели
Рассматриваются особенности работы модели блока с несколькими таймерами одновременно. Приводится пример блока, изображение которого вращается (для чего используется первый таймер) и мигает (по сигналу от второго таймера).
§2.10. Программное рисование внешнего вида блока
Рассматриваются способы программного рисования внешнего вида блоков в окне подсистемы и вывод дополнительных изображений поверх блоков. Также рассматривается создание в окнах подсистем специальных панелей, на которых блоки блоки могут размещать элементы управления Windows или использовать их для вывода изображений, формируемых сторонними библиотеками. В частности, приводится пример построения на панели трехмерного изображения при помощи библиотеки OpenGL.
§2.10.1. Рисование изображения блока в окне подсистемы
Рассматривается программное рисование внешнего вида блоков на примере простого вертикального индикатора уровня и построения графика зависимости значения входа блока от системной переменной времени.
§2.10.2. Оптимизация рисования
Рассматриваются различные способы ускорения программного рисования внешнего вида блоков. Два из этих способов используются для улучшения работы графика из примера, описанного в §2.10.1.
§2.10.3. Дополнительное рисование
Рассматривается рисование дополнительных элементов поверх изображения блока. В описанный ранее график добавляется рисование иконки, указывающей на отсутствие доступа к необходимой ему переменной времени.
§2.10.4. Панели блоков в окне подсистемы
Рассматривается создание панелей – отдельных окон, принадлежащих блокам и находящихся внутри окна подсистемы. Такие панели нужны для размещения в них полей ввода или привязки к ним вывода внешних библиотек. Приводится пример блока, создающего пустую панель, которую пользователь может открывать, закрывать и перемещать. Затем этот пример модифицируется, и с панелью связывается область вывода трехмерной библиотеки OpenGL, а блок становится индикатором трех угловых координат, рисующим на панели поворачивающийся трехмерный объект.
§2.11. Отображение всплывающих подсказок к блокам
Рассматривается вывод различных текстов во всплывающих подсказках к блокам. Приводятся примеры отображения в подсказке настроечных параметров блока-генератора и координат ближайшей к курсору точки графика.
§2.12. Реакция блоков на действия пользователя
Рассматриваются различные способы организации взаимодействия блоков схемы с пользователем: реакция на мышь и клавиатуру, добавление новых пунктов в контекстное меню блока и системное меню RDS. Отдельно описываются реакции на действия пользователя при редактировании схемы: добавление блоков, их удаление, изменение их размеров и т.п.
Рассматриваются возможные реакции модели блока на действия пользователя мышью. Приводится пример блока, позволяющего щелчками по верхней и нижней части его изображения увеличивать и уменьшать значение его выхода. Затем в модель блока добавляется реакция на щелчки по активным элементам векторной картинки.
§2.12.2. Захват мыши, реакция на перемещение курсора
Рассматривается реакция модели блока на перемещение курсора мыши и захват мыши – режим, в котором блок реагирует на мышь даже при выходе курсора за его изображение. Приводится пример блока, изображающего рукоятку, которую можно двигать мышью по двум координатам, изменяя таким образом значения выходов блока.
§2.12.3. Реакция на мышь в блоках сложной формы
Рассматриваются особенности реакции на мышь в перекрывающихся блоках сложной формы, в которых часть изображения одного блока просматривается сквозь изображение другого. Приводится пример блока с «отверстием», которое может открываться и закрываться, разрешая или запрещая тем самым щелчки мышью по полю ввода, видимому в отверстии.
§2.12.4. Реакция блоков на клавиатуру
Рассматривается реакция модели блока на нажатие и отпускание клавиш. В один из рассмотренных ранее примеров добавляется возможность увеличивать и уменьшать значение выхода блока нажатием клавиш.
§2.12.5. Реакция окон подсистем на мышь и клавиатуру
Рассматривается возможность реакции модели подсистемы на действия мышью и нажатие и отпускание клавиш в ее окне, если ни один из внутренних блоков не среагировал на это событие. Приводится пример модели подсистемы, которая перемещает окно по курсорным клавишам и меняет свой масштаб по щелчку правой кнопкой мыши.
§2.12.6. Добавление пунктов в контекстное меню блока
Рассматривается добавление дополнительных (постоянных и временных) пунктов в контекстное меню блока, вызываемое по правой кнопке мыши. В созданный ранее блок, имитирующий двухкоординатную рукоятку, добавляется возможность фиксировать одну из координат рукоятки, включаемая и выключаемая через контекстное меню. В другой блок, управляющий полем ввода, также добавляется возможность переключения состояния блока пунктом контекстного меню.
§2.12.7. Добавление пунктов в системное меню RDS
Описывается возможность добавления моделями блоков собственных пунктов в меню «». Рассматривается пример блока, открывающего окно своей подсистемы при выборе пункта системного меню или при нажатии связанной с этим пунктом «горячей клавиши».
§2.12.8. Реакция на действия пользователя при редактировании схемы
Рассматриваются различные реакции модели на действия пользователя, связанные с редактированием схемы: добавлением и удалением блоков, изменением их размера и т.п. В рассмотренные ранее примеры добавляются новые функции, влияющие на редактирование схемы пользователем.
Рассматриваются различные способы вызова функций блоков, то есть вызова модели какого-либо блока из модели другого блока. Приводятся примеры использования этого механизма для организации сложного взаимодействия между блоками схемы.
§2.13.1. Общие принципы вызова функций блоков
Рассматриваются общие принципы вызова функций блоков. Описывается регистрация функций блоков в RDS, необходимая для их работы, простейший способ вызова функций, а также включение в модель блока реакции на вызов такой функции.
§2.13.2. Прямой вызов функции одного блока
Рассматривается вызов функции блока, идентификатор которого известен вызывающей модели. Приводятся примеры использования функции «Common.ControlValueChanged», которая используется блоками пользовательского интерфейса из библиотеки «Common.dll» для общения между собой. В двухкоординатную рукоятку и блок увеличения/уменьшения, созданные ранее, добавляется поддержка этой функции, что позволяет соединять их со стандартными полями ввода и синхронно изменять значения блоков в режиме моделирования.
§2.13.3. Прямой вызов функции всех блоков подсистемы
Рассматривается вызов функции всех блоков одной подсистемы. В созданную ранее модель блока, управляющего полем ввода, добавляется возможность одновременного открытия, закрытия и переключения состояния всех таких блоков, находящихся в одной и той же подсистеме.
§2.13.4. Пример использования функций блоков для поиска пути в графе
Рассматривается пример использования функций блоков для поиска в ориентированном графе, состоящем из блоков и соединяющих их связей, кратчайшего пути между двумя узлами. Используется вызов функций с параметрами и без них, вызов функции конкретного блока и всех блоков подсистемы.
§2.13.5. Отложенный вызов функций блоков
Рассматривается отложенный вызов функций блоков, позволяющий избежать переполнения стека при глубокой рекурсии вызовов. В примере, рассмотренном в §2.13.4, прямые вызовы заменяются на отложенные.
§2.13.6. Регистрация исполнителя функции
Рассматривается механизм регистрации блока в качестве исполнителя какой-либо функции, позволяющий остальным блокам схемы легко находить его идентификатор и вызывать эту функцию. В приводимом примере один блок регистрируется как исполнитель функции вывода сообщения, а другой выводит сообщение с его помощью.
§2.14. Программное управление расчетом
Рассматриваются сервисные функции, позволяющие останавливать, перезапускать и сбрасывать расчет. С их помощью можно выполнять сложные итерационные вычисления.
§2.14.1. Запуск и остановка расчета
Описывается использование сервисных функций для запуска и остановки расчета. Приводится пример блока, запускающего и останавливающего расчет при нажатии кнопки мыши на его изображении, а также останавливающего расчет поступлении сигнала на вход.
§2.14.2. Сброс подсистемы в начальное состояние
Описывается программный сброс расчета, то есть способ возврата какой-либо подсистемы или всей схемы в начальное состояние. Рассматриваются два примера, использующих программный сброс расчета: поиск угла возвышения метательной машины, при котором снаряд летит на заданную дальность, и построение графика зависимости дальности полета снаряда от угла возвышения этой машины.
§2.14.3. Сохранение и загрузка состояния блоков
Описывается механизм возврата блоков в запомненное состояние. Рассматривается пример, в котором запоминание состояния подсистемы и возврат к этому состоянию производятся по команде пользователя.
§2.14.4. Отдельный расчет подсистемы
Рассматривается механизм временной остановки расчета всей схемы кроме одной единственной подсистемы. Приводится пример блока, переводящего родительскую подсистему в режим отдельного расчета для того, чтобы цепочка блоков в этой подсистеме не создавала паразитных задержек.
Рассматриваются способы обмена данными между схемами, работающими на разных машинах. Приводятся примеры моделей блоков, осуществляющих такой обмен.
§2.15.1. Общие принципы обмена данными по сети в RDS
Рассматривается механизм обмена данными по сети между блоками RDS. Описываются основные сервисные функции и структуры и способ их использования.
§2.15.2. Пример использования функций передачи и приема данных
Приводятся примеры моделей блоков, позволяющих организовать передачу вещественного значения между схемами, работающими на разных машинах. В дополнение к ним описывается модель блока, добавление которого в схему включает серверные функции в RDS.
§2.15.3. Способы снижения нагрузки на сеть
Рассматриваются два способа снижения нагрузки на сеть: ограничение минимального интервала между моментами передачи данных и объединение передаваемых данных в один блок. Приводятся примеры реализации этих способов.
§2.16. Программное изменение схемы
Рассматриваются способы программной модификации схемы. Приводятся примеры блоков, изменяющих свою структуру переменных, а также добавляющих в схему и удаляющих из нее другие блоки и связи.
§2.16.1. Изменение структуры переменных блока
Рассматриваются функции для программного изменения структуры статических переменных блока из его модели. Модель одного из ранее рассмотренных блоков изменяется так, чтобы она сама корректировала переменные, если они ей не подходят. Описывается модель блока, предоставляющего пользователю интерфейс для ограниченного редактирования своих переменных.
§2.16.2. Добавление и удаление блоков и связей
Рассматриваются функции для программного добавления в схему новых блоков и связей и для их удаления. Приводится пример блока, который по двум текстовым файлам, содержащим список блоков и соединений между ними, создает в подсистеме новый фрагмент схемы.
Глава 3. Создание модулей автоматической компиляции
Описывается принцип создания модулей автокомпиляции, которые по введенному пользователем тексту могут формировать и компилировать модель блока. Рассматривается пример такого модуля для создания простых моделей в синтаксисе языка C.
§3.1. Принцип работы модулей автокомпиляции
Рассматривается структура данных модуля автокомпиляции и его функции, описывается последовательность вызовов функции модуля при подключении и отключении моделей и выполнении компиляции.
§3.2. Инициализация, очистка и настройка параметров модуля
Рассматривается пример модуля автоматической компиляции, функция которого реагирует пока только на самые основные вызовы: инициализацию данных, очистку данных и вызов окна настройки. Созданный модуль регистрируется в RDS.
§3.3. Подключение моделей к блокам и вызов редактора
В созданный в §3.2 модуль автоматической компиляции добавляются функции, необходимые для подключения моделей к блокам. Рассматривается простой пример текстового формата модели, в модуль добавляется редактор таких моделей.
Описывается способ формирования исходного текста модели блока на языке C и вызова для этого текста внешнего компилятора.
§3.5. Поиск совместимых модулей
Рассматривается создание модуля-заглушки, который ищет среди зарегистрированных настроенный модуль, работающий с моделями с той же строкой формата.