Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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 в памяти. Размещение элементов вектора в памяти. Первая строчка – адреса, вторая – элементы. + se*1 … + se*(N-1)
где , + se*1, …, + se*(N-1)– адреса элементов вектора; N – размер вектора; se – размер одного элемента вектора;
a , a , …, a - элементы вектора. Размещение элементов матрицы [N;M] в памяти. Первая строчка – адреса, вторая – элементы. + 1*se … +(M-1)*se
+ 1*M*se + 1*M*se+1*se … + 1*M*se+(M-1)*se
……………………………………………………… + (N-1)*M*se + (N-1)*M*se+1*se … + (N-1)*M*se+(M-1)*se
где , + 1*se, …, +(M-1)*se, …, + (N-1)*M*se+(M-1)*se – адреса элементов матрицы; M – количество столбцов матрицы; N – количество строк матрицы; se – размер одного элемента матрицы; a , a , …, a , … a - элементы матрицы. Например, матрица размером [2;2] должна быть размещена в памяти следующим образом: +1 +2 +3
1 строка 2 строка +(1*M+0)*se +(0*M+1)*se +(1*M+1)*se
Теперь рассмотрим механизм обмена данными с Dll. Для передачи данных в Dll и приема данных в систему используется функция Operate. В качестве ее параметров используется указатель на массив указателей на первые элементы передаваемых сигналов. В качестве примера на рисунке 2.7 показана передача данных в Dll c тремя входами разных форматов (1-скаляр, 2-вектор, 3-матрица). Пример работы с Dll приведен в приложении Г.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-03-10; просмотров: 80; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.172.210 (0.013 с.) |