Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

ГЛАВА 1. ПРОБЛЕМА МАТЕМАТИЧЕСКОГО СОПРОВОЖДЕНИЯ ПСИХОЛОГИЧЕСКОГО ИССЛЕДОВАНИЯ | Экспериментальная психология как набор инструментов и принципов психологического исследования | Математическое обеспечение психологического исследования | Обзор существующих аналогов | Используемые программные технологии | Архитектурное проектирование программного средства | Реализация и эксплуатация программного средства | Модернизация программного средства | Анализ и оценка напряженности трудового процесса пользователя | Расчет затрат на разработку программного средства |


Читайте также:
  1. II. АНАТОМИЯ ВНУТРЕННИХ ОРГАНОВ
  2. III. Повреждение внутренних структур органов полости рта.
  3. Административные процедуры как форма реализации компетенции органов внутренних дел.
  4. АНАТОМИЯ ВНУТРЕННИХ ОРГАНОВ
  5. Архитектурное проектирование программного средства
  6. Были представлены: Школа лидерства, Социальное проектирование, Командообразование и Журналистика.
  7. Вопрос №25 Министерство внутренних дел: правовой статус, структура и функции.

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

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

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

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

Если возвращаемое значение равно 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


Дата добавления: 2015-11-14; просмотров: 38 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Обоснование выбора средств разработки| Проектирование пользовательского интерфейса

mybiblioteka.su - 2015-2024 год. (0.013 сек.)