![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Проектирование внутренних интерфейсовОсновой нашей программы составляет Dll, которая содержит создаваемые и используемые нами математические процедуры. Эта Dll создается программой КМС, верифицируется программой ТМС и используется в программе МОПИ. Далее мы опишем интерфейс нашей Dll. Dll экспортирует две функции, с помощью которых можно создать экземпляр класса System, который предоставляет доступ к COM-интерфейсу, через который можно использовать содержащуюся в Dll математическую процедуру: 1) CreateSystem. Функция, создающая в программе экземпляр класса System. BOOL CreateSystem (System **sys); Параметры: sys – указатель на указатель на виртуальный класс System. Возвращаемое значение - true, если экземпляр класса System создан и false – если нет. 2) DestroySystem. Функция, удаляющая в программе экземпляр класса System. void DestroySystem(System *sys); Параметры: sys – указатель на виртуальный класс System. Класс System предназначен для управления математической процедурой, содержащейся в Dll: class System { public: virtual void __stdcall Initialize() = 0; virtual void __stdcall UnInitialize() = 0; virtual void __stdcall Operate(LPVOID *pin, LPVOID *pout) = 0; virtual void __stdcall Reset() = 0; virtual void __stdcall ModelName(char** MN) = 0; virtual void __stdcall ModelInfo(char** MI) = 0; virtual void __stdcall GetNumberInput(int* NumberIn) = 0; virtual void __stdcall GetNumberOutput(int* NumberOut) = 0; virtual void __stdcall GetInputInfo(unsigned n, rtS* S) = 0; virtual void __stdcall GetOutputInfo(unsigned n, rtS* R) = 0; }; Описание функций класса System: 1) void Initialize(); Функция инициализации модели. 2) void UnInitialize(); Функция деинициализации модели. 3) void Operate(LPVOID *pin, LPVOID *pout) Функция обмена данными с моделью: pin – указатель на входные значения; pout – указатель на выходные значения. 4) void Reset(); Функция приведения внутреннего состояния модели в исходное состояние. 5) void ModelName(char** MN); Функция, возвращающая имя модели. MN – строка, содержащая имя модели. 6) void ModelInfo(char** MI); Функция, возвращающая описание модели. MI – строка, содержащая описание модели. 7) void GetNumberInput(int* NumberIn); Функция, возвращающая количество входов модели. NumberIn – число используемых входов. 8) void GetNumberOutput(int* NumberOut); Функция, возвращающая количество выходов модели. NumberOut – число используемых выходов. 9) void GetInputInfo(unsigned n, rtS* S); Функция, возвращающая параметры входных сигналов: n – номер входного сигнала, параметры которого должны быть получены; S – структура типа rtS, содержащая информацию о входном сигнале, с номером n. 10) void GetOutputInfo(unsigned n, rtS* R); Функция, возвращающая параметры выходных сигналов: n – номер выходного сигнала, параметры которого должны быть получены; S – структура типа rtS, содержащая информацию о выходном сигнале, с номером n. В экспортируемых функциях используется структура rtS, предназначенная для получения из Dll параметров входных и выходных сигналов. Она используется как возвращаемое значение в функциях GetInputInfo и GetOutputInfo. rtS { int TypeSignal; int FormatSignal; int Size [2]; }; Структура, содержащая информацию о входных сигналах: ־ TypeSignal – тип используемого сигнала (в соответствии с таблицей 2.1); ־ FormatSignal – формат используемого сигнала (в соответствии с таблицей 2.2); ־ Size [2] – массив, содержащий информацию о размерности сигнала, первый элемент обозначает количество строк, второй – столбцов. При формате данных Scalar массив имеет размерность [1;1]. При формате данных Vector одно из значений должно быть равным 1, а другое - быть большим 1. При формате данных Matrix – оба элемента должны быть больше 1. Если массив заполнен нулями, значит, задан несуществующий номер входа или выхода. Выравнивание для структуры равно 8 байтам. Таблица 2.1 – Соответствие типов данных сигнала в Simulink значениям элемента TypeSignal структуры rtS
Если возвращаемое значение равно 0, то был задан номер несуществующего сигнала. Таблица 2.2 – Соответствие форматов сигнала в Simulink значениям элемента FormatSignal структуры rtS
Если возвращаемое значение равно 0, то был задан номер несуществующего сигнала. Для доступа к входным и выходным значениям математической процедуры необходимо знать принцип размещения выходных значений Dll в памяти. Размещение элементов вектора в памяти. Первая строчка – адреса, вторая – элементы.
где N – размер вектора; se – размер одного элемента вектора; a Размещение элементов матрицы [N;M] в памяти. Первая строчка – адреса, вторая – элементы.
………………………………………………………
где M – количество столбцов матрицы; N – количество строк матрицы; se – размер одного элемента матрицы; a Например, матрица размером [2;2] должна быть размещена в памяти следующим образом:
1 строка 2 строка
Теперь рассмотрим механизм обмена данными с Dll. Для передачи данных в Dll и приема данных в систему используется функция Operate. В качестве ее параметров используется указатель на массив указателей на первые элементы передаваемых сигналов. В качестве примера на рисунке 2.7 показана передача данных в Dll c тремя входами разных форматов (1-скаляр, 2-вектор, 3-матрица). Пример работы с Dll приведен в приложении Г.
|
||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-03-10; просмотров: 83; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.221.116 (0.006 с.) |