Общее сопряжение программного обеспечения для применения с различными программными комплексами моделирования
G.1 Описание метода
Описание всех применяемых моделей в обобщенной форме невозможно по следующим причинам:
- в модели присутствует функциональность, отсутствующая в общей модели;
- в модели присутствует конфиденциальная информация, не подлежащая разглашению;
- предполагается, что модель является точной копией реальной реализации управления и содержит оригинальный исходный код регулятора.
При применении таких моделей, возможно, потребуется:
- использовать модель в условиях иной программной среды;
- использовать модели различных изготовителей, предназначенные для различных программных сред.
Применение общего программного сопряжения позволяет использовать одну и ту же модель в объектном коде как в различных программных средах, так и в сочетании с моделями из других источников. В зависимости от программной среды такие характеристики, как последовательность вызова процедур, алгоритмы интегрирования, передача параметров, могут использоваться по-разному. Концепция общего сопряжения гарантирует, что модель будет функционировать и давать корректные результаты в указанных условиях. Некоторыми главными требованиями являются:
- поддержка как внутренних (в модели), так и внешних расчетных механизмов (состояний и их производных, получаемых из модельной среды);
- поддержка нескольких экземпляров модели;
- необязательная поддержка моделирования с переменным шагом;
- необязательная поддержка итерационного расчета параметров потокораспределения мощности;
- необязательная поддержка функциональности, связанной с графическим представлением для пользователя (ввод, вывод и отображение наименований параметров);
- необязательная поддержка изменений параметров.
Общее программное сопряжение обеспечивает полную функциональность при построении моделей в различных модельных средах. Описание сопряжения выполнено на языке программирования Си, поскольку он является наиболее распространенным языком программирования, однако в нем нет каких-либо ограничений для построения моделей на других языках программирования (например, на языке Фортран и т.п.).
Хорошим способом построения моделей для различных программных сред является использование динамических библиотек объектных модулей (DLL), которые обеспечивают защиту авторских прав и воспроизводимость результатов. Важной чертой применения динамических библиотек при решении различных задач моделирования является гибкость сопряжения, которая предоставляет возможность выполнить требования различных моделирующих систем. Сопряжение расширенной среды моделирования (РСМ-сопряжение) удовлетворяет этим требованиям. В данном приложении приведены его структуры данных и функции.
G.2 Описание программного сопряжения
G.2.1 Описание структур данных
G.2.1.1 Общие положения
Для передачи данных через РСМ-сопряжение используются следующие структуры данных (на языке программирования Си).
G.2.1.2 StaticExtSimEnvCapi
Описание: Содержит общие данные о модели.
typedef struct | |||
{ | const uint8_T | APIRelease[4]; | // Release number of the API used during |
// code generation | |||
const char_T * const | ModelName; | // Model name | |
const char_T * const | ModelVersion; | // Model version | |
const char_T * const | ModelDescription; | // Model description | |
const char_T * const | VersionControlInfo; | // Version control information | |
const char_T * const | GeneralInfоrmation; | // General info - - here some RTW info | |
const char_T * const | ModelCreated; | // Model created on | |
const char_T * const | ModelCreator; | // Model created by | |
const char_T * const | ModelLastModifiedDate; | // Model last modified on | |
const char_T * const | ModelLastModifiedBy; | // Model last modified by | |
const char_T * const | ModelModifiedComment; | // Model modified comment | |
const char_T * const | ModelModifiedHistory; | // Model modified history | |
const char_T * const | CodeGeneratedOn; | // Code generated on | |
const char_T * const | IncludedSolver; | // Solver name (can be empty) | |
const real64_T | FixedStepBaseSampleTime; | // Base sample time | |
const int32_T | NumlnputPorts; | // Number of inputs | |
const StaticESEInputSignal * const | InputPortslnfo; | // Pointer to input signal description array | |
const int32_T | NumDutputPorts; | // Number of outputs | |
const StaticESEOutputSignal * const | OutputPortslnfo; | // Pointer to output signal description | |
// array | |||
const int32_T | NumParameters; | // Number of parameters | |
const StaticESEParameter* const | ParametersInfo; | // Pointer to parameter description array | |
const int32_T | NumContStates; | // Number of continuous states | |
const int32_T | SizeofMisсStates; | // Size of work variables / misc states | |
const uint32_T | ModelChecksum[4]; | // Simulink model checksum | |
const char_T | *LastErrorMessage; | // Error string pointer | |
const uint8_T | EMT_RMS_Mode; | // Mode: EMT = 1, RMS =2, | |
// EMT & RMS = 3, | |||
// otherwise: 0 | |||
const uint8_T | LoadflowFlag; | // Model contains a loadflow function; | |
// 0 = no, 1 = yes | |||
ESEExtension | Extension; | // Provided for extensions | |
}StaticExtSimEnvCapi; |