Теория систем автоматического регулирования


Архитектура математического ядра моделирующих программ с поточной моделью управления


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

Возможности современных версий языка Си++ позволяют решить поставленную задачу следующим образом. Пишется полиморфный класс CBlkTemplate с виртуальным методом Calc (см. табл. 1). Его наследуют классы, составляющие библиотеку математических функций. В частности, каждый потомок реализует метод Calc в виде уникальной математической функции. Уточним возможности, которые предоставляет подобная организация библиотеки.

Во первых, от каждого математического класса можно породить любое количество объектов. Это означает, что для обработки повторно встречающихся в модели математических функций будут использованы уникальные экземпляры объектов, каждый из которых будет иметь собственную область памяти для хранения возвращаемых значений Output[k]. В результате не будет наблюдаться "затирание" координат модели.

Во вторых, в силу действующих стандартов для компиляторов языка Си++, объекты порожденные от разных потомков полиморфного класса (CBlkTemplate) будут иметь реализации виртуальной таблицы функций (vtbl) одной размерности. Это означает, что их можно присвоить элементам одного массива MathBlock[i] (см. рис. 3). Что, в свою очередь, открывает возможности для создания автоматизированных процедур обслуживания объектов математического ядра. Так например, процедура исполнения шага симуляции модели в таких программах, как VisSim, Simulink, MBTY может иметь следующий вид:

Листинг 1

for (i=0; i < numBlock; i++) { MathBlock[i]->Calc(); }

Подобных процедур не много, и, в случае реализации математического ядра в виде COM-сервера, они образуют его интерфейсы (см.


- Начало -  - Назад -  - Вперед -



Книжный магазин