Разработка модуля автокомпиляции для создания собственных блоков в среде программного комплекса РДС

М.Х. Дорри,

д.т.н., проф., dorrimax@lab49.ru,

А.А. Рощин,

к.т.н., доц., roshinaa@mail.ru,

ИПУ РАН, г. Москва

В докладе рассматриваются вопросы создания модуля автокомпиляции, облегчающего разработку собственных блоков, совместимых с программным комплексом РДС, разработанном в ИПУ РАН. Приводятся примеры создания моделей для решения ряда задач с помощью автокомпилируемых блоков.

 

The purpose of the report is to introduce the audience with automatically compiled module that facilitates the creation of own blocks which is compatible with the Software Tool RDS that was developed in the Institute of Control Sciences RAS. The examples of automatically compiled blocks are given.

Введение

Несмотря на наличие в РДС [1, 2, 3] большого количества специально заготовленных готовых блоков различного назначения, помогающих составлять блок-схемы широкого спектра для систем управления, всегда существует потребность в разработке собственных блоков, модели которых отличаются от уже имеющихся в библиотеке. Действительно, невозможно заранее предусмотреть все разновидности блоков, необходимых для исследования поставленной задачи. Готовые блоки не всегда удовлетворяют пользователя, и ему хочется разработать собственную модель и включить ее в исследуемую систему.

Практически все современные программные продукты позволяют подключать внешние, созданные пользователем модули. Они либо описываются внутри самой системы на каком-либо языке высокого уровня, либо подключаются как внешние исполняемые программы. Оба варианта имеют свои достоинства и недостатки. Универсальные языки программирования более распространены, и многие пользователи предпочли бы пользоваться знакомыми языками программирования для описания моделей блоков. По этой причине в программном комплексе РДС было принято решение опираться на универсальные языки программирования (в частности, в РДС принят язык С++) для создания собственных моделей блоков.

Разработка соответствующего программного модуля, названного модулем автокомпиляции, весьма трудоемкая задача. Чтобы разработчик, не будучи профессиональным программистом, смог, тем не менее, создавать собственные блоки, в комплекс инструментальных средств РДС были включены модули автоматической компиляции управляющих программ блоков. Такой модуль автоматически строит полный исходный текст программы по отдельным фрагментам, введенным разработчиком. Затем модуль вызывает один из внешних компиляторов, который, обработав сформированный текст, создает файл блока для динамической библиотеки. Эта библиотека затем автоматически подключается к РДС и начинает обслуживать блоки системы.

1. Взаимодействие модуля автокомпиляции с другими модулями программного комплекса РДС

Модуль автоматической компиляции должен:

1.  Обеспечивать ввод и редактирование фрагментов исходного текста программы блока, отвечающих за его поведение и реакцию на события. Как минимум, должен обеспечиваться ввод функции расчета значений выходов блока при поступлении данных на его входы. Допустимо использовать для этого внешнюю программу-редактор.

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

3.  Вызывать внешнюю программу-компилятор, которая преобразует исходный текст программы в исполняемый файл DLL.

4.  Взаимодействуя с комплексом, отключать на время компиляции блоки РДС от обслуживающих библиотек. Если этого не сделать, файлы библиотек будут заблокированы, и компилятор не сможет заменить их новыми.

На рис. 1 приведена блок-схема действий модуля автоматической компиляции в программном комплексе РДС.

рис. 1. Блок-схема действий модуля автоматической компиляции

По схеме видно, что модуль автокомпиляции включает в себя редактор модели, позволяющий пользователю вводить фрагмент программы, описывающий алгоритм работы блока, который сохраняется в файле модели блока. Далее модуль автокомпиляции автоматически создает полный файл (файл текста программы), который при помощи внешнего компилятора преобразуется в исполняемый модуль DLL. Файл модели блока и исполняемый модуль сохраняются на компьютере с расширениями mdl и dll соответственно.

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

2. Пример построения автокомпилируемого блока для отображения графика функции

На практике довольно часто хочется получить графический вид функции, задаваемой аналитическим выражением или алгоритмически. Для этой цели в РДС нетрудно построить универсальный автокомпилируемый блок. Его модель представлена на рис. 2.

Здесь:

x – значение аргумента функции;

a и b – задают значения начала и конца области изменения аргумента;

dx – шаг изменения аргумента;

n – номер очередного шага;

Fx – функция.

рис. 2. Автокомпилируемый блок для получения графика функции

Алгоритм фактически не требует комментариев. Первые два оператора формируют значение аргумента функции, третий – само значение функции. Последний оператор задает условие завершения расчета. На рис. 3 показана подсистема, решающая задачу отображения графического вида функции.

рис. 3. Результат работы схемы с функцией, заданной в блоке на рис. 2

Подсистема не меняется в случае, если необходимо получить график другой функции. Следует только задать новые значения a, b, dx и вставить в модель автокомпилируемого блока выражение новой исследуемой функции. Например, для приведенной ниже функции результат изображен на рис. 4.

 

рис. 4. Результат работы схемы со вновь заданной функцией

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

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

Заключение

Создание текста файла программы без использования модуля автокомпиляции даже для самых простых блоков, типа приведенных в разделе 2, требует осторожности. Необходимо предусмотреть массу малозаметных, но возможных ошибок при составлении и исполнении программы, которые могут привести к «зависанию» компьютера. Только очень опытный программист мог бы подготовить такой файл. Трудности, с которыми столкнулся бы пользователь при отсутствии модуля автокомпиляции, создающего такой файл автоматически, подробно рассматриваются в описании пользователя РДС [2]. Следует иметь в виду, что приведенный пример не дает полного представления о возможностях модуля автокомпиляции. Эти возможности гораздо шире и дают инструмент для построения сложных блоков, в которых используются такие понятия как «события», «функции», «настройки» и т.п. Использование всех возможностей модуля автокомпиляции позволяет пользователям, не имеющим достаточных навыков программирования, или желающим упростить свою работу, создавать на почти профессиональном уровне достаточно сложные программы. Представление о структуре файлов, рассмотрению которых посвящены многие параграфы описания пользователя помогает разработчику блока правильно распределить создаваемые фрагменты текста и получать качественные модели блоков.

Литература

1.  Рощин А.А. Расчёт Динамических Систем (РДС). Руководство для программистов. М: ИПУ РАН, 2012, - 671 с. 

2.  Дорри М.Х., Рощин А.А. Расчёт Динамических Систем (РДС). Описание пользователя. Часть I: устройство РДС и редактирование схем. М: ИПУ РАН, 2013, - 259 с. 

3.  Дорри М.Х., Рощин А.А. Расчёт Динамических Систем (РДС). Описание пользователя. Часть II: разработка собственных автокомпилируемых блоков. М: ИПУ РАН, 2013, - 361 с.