Проектирование внутренних интерфейсов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Проектирование внутренних интерфейсов



Основой нашей программы составляет 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

Тип данных в С++   Значения, возвращаемые TypeSignal
char 1
unsigned char 2
short 3
unsigned short 4
int 5
unsigned int 6
float 7
double 8

Если возвращаемое значение равно 0, то был задан номер несуществующего сигнала.

Таблица 2.2 – Соответствие форматов сигнала в Simulink значениям элемента FormatSignal структуры rtS

Тип данных в С++   Значения возвращаемые FormatSignal
Scalar 1
Vector 2
Matrix 3

Если возвращаемое значение равно 0, то был задан номер несуществующего сигнала.

Для доступа к входным и выходным значениям математической процедуры необходимо знать принцип размещения выходных значений Dll в памяти. Размещение элементов вектора в памяти. Первая строчка – адреса, вторая – элементы.

                   + se*1                                …                 + se*(N-1)

a a a

 

где , + se*1, …, + se*(N-1)– адреса элементов вектора;

N – размер вектора;

se – размер одного элемента вектора;

a , a , …, a  - элементы вектора.

Размещение элементов матрицы [N;M] в памяти. Первая строчка – адреса, вторая – элементы.

               + 1*se                                 …                 +(M-1)*se

a a a

 

+ 1*M*se   + 1*M*se+1*se                    …                 + 1*M*se+(M-1)*se

a a a

 

………………………………………………………

+ (N-1)*M*se + (N-1)*M*se+1*se           …                  + (N-1)*M*se+(M-1)*se

a a a

 

где , + 1*se, …, +(M-1)*se, …, + (N-1)*M*se+(M-1)*se – адреса элементов матрицы;

M – количество столбцов матрицы;

N – количество строк матрицы;

se – размер одного элемента матрицы;

a , a , …, a , … a  - элементы матрицы.

Например, матрица размером [2;2] должна быть размещена в памяти следующим образом:

     +1   +2    +3                                                                               

a a a a

  

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 приведен в приложении Г.


Рисунок 2.7 – Механизм обмена данными с Dll



Поделиться:


Последнее изменение этой страницы: 2021-03-10; просмотров: 79; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.202.54 (0.01 с.)