Статья опубликована в рамках: VIII Международной научно-практической конференции «Технические науки - от теории к практике» (Россия, г. Новосибирск, 19 марта 2012 г.)
Наука: Технические науки
Секция: Информатика, вычислительная техника и управление
Скачать книгу(-и): Сборник статей конференции
- Условия публикаций
- Все статьи конференции
дипломов
ОРГАНИЗАЦИЯ ОБМЕНА ДАННЫМИ МЕЖДУ ПРИЛОЖЕНИЯМИ MATLAB- DELPHI
Емельянов Валентин Юрьевич
канд. техн. наук, профессор БГТУ “Военмех” им. Д. Ф. Устинова, г. Санкт-Петербург
Шишкин Андрей Леонидович
студент, БГТУ “Военмех” им. Д. Ф. Устинова, г. Санкт-Петербург
E-mail: ferse2002@mail.ru
При создании программного обеспечения иногда приходится применять несколько сред разработки приложений. Это связано с тем, что каждая среда как средство разработки имеет свои преимущества и недостатки из-за специализации на решение определенного круга задач. Например, пакет прикладных программ Matlab используется для разработки приложений, теоретической основой которых являются сложные математические вычисления, а его надстройка Simulink- для имитационного моделирования процессов в динамических системах [5, с. 8]. Но существует ряд задач, для решения которых пакет Matlab/Simulinkне подходит, хотя решить задачи вполне возможно. К числу таких задач можно отнести спектр задач по визуализации работы объектов и процессов, создание интерфейса для приложений и др. Они весьма эффективно решаются в среде разработки программного обеспечения Delphi.
При использовании двух сред разработки приложений создавать программное обеспечение можно несколькими способами. Во-первых, путем создания DLL(DynamicLoadLibrary) в Matlab [3] и её использовании при создании приложения в Delphi. Другой способ состоит в том, чтобы создать два приложения, обменивающиеся данными. Первый способ имеет множество ограничений, например, на вывод графиков. Второй способ требует организации передачи данных между приложениями.
Существует несколько способов организации обмена данных между приложениями. К ним можно отнести динамический обмен данными (DDE), использование COM-объектов, передача данных с помощью сокетов (sockets) и сообщений. Ниже приведено описание первых двух способов.
Динамический обмен данными (DDE)
Использование технологии DDE(Dynamic Data Exchange) позволяет передавать данные от одного приложения к другому через глобальную память. При организации обмена данными одно приложение называется DDE-сервером, а другое DDE-клиентом. Какое приложение является серверов, а какое - клиентом, большого значения не имеет, хотя обычно сервер является более сложной программой, чем клиент.
Приведем простой пример передачи данных от приложения, созданного в среде Simulink, к приложению, созданному в среде Delphi. При запуске приложения-клиента, разработанного в Simulink(рис. 1), приложение-сервер, разработанное в Delphi(рис. 2), выводит на экран данные, полученные от первого приложения, а именно, значения модельного времени и зависимости (1):
y=sin (t) (1)
Рис. 1. Модель, созданная в среде Simulink
В приложении-клиенте, разработанном в среде Simulink, за передачу данных отвечает блок (S-функция) ddeout. Перед началом моделирования блок ddeoutзапускает приложение-сервер. Затем блок инициализирует канал связи между приложением-клиентом и приложением-сервером. Это происходит с помощью функции ddeinit [6]. Если канал не был инициализирован, или соединение было разорвано во время работы приложений, то выводится сообщение об ошибке. Во время моделирования каждые 0.1 секунду модельного времени блок передает данные с помощью процедуры ddepoke [6]. Частота передачи данных может регулироваться пользователем.
Рис. 2. Приложение, разработанное в Delphi
Приложение-сервер содержит два компонента, необходимые для получения данных: DDEServerConvи DDEServerItem. Эти компоненты организуют работу сервера DDE [4, c. 461]. При получении данных приложение-сервер должно обработать и вывести данные на экран. Перед приемом данных происходит событие OnPokeDataкомпонента DDEServerItem. Во время этого события должны быть произведены действия, необходимые для обработки принятых данных [1, c. 469]. При приеме сами данные являются выходным параметром свойства Textкомпонента DDEServerItem.
Стоит заметить, что данные передаются только строкового типа (string), то есть как текст. Поэтому данные других типов: логических, числовых, необходимо приводить к строковому типу.
Недостатком данной технологии является невозможность передавать данные от одного приложения к другому в случае, если он расположены на разных компьютерах, объединенных в сеть. Стоит отметить, что в современных операционных системах механизм DDEзамещается на более мощные механизмы передачи данных, например, на COM-объекты.
Использование COM-объектов
Другой способ передачи данных основан на технологическом стандарте COM(ComponentObjectModel) и базирующейся на этом стандарте технологии OLEAutomation. Технология OLEAutomationразработана для поддержки интерпретирующих языков Она позволяет передавать данные от одного приложения к другому и возвращать результат работы обратноREF И_Delphi_Com \h \* MERGEFORMAT 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D00000018045F00440065006C007000680069005F0043006F006D000000 . Развитием технологии OLEявляется технология ActiveX.
Разберем пример программы, разработанной в среде Delphi, которая управляет приложением, разработанным в среде Simulink. На рис. 3 представлена простая модель (апериодическое звено первого порядка с входным сигналом в форме ступенчатой функции), созданная в среде Simulink, а на рис. 4 представлено окно настройки приложения, созданного в среде Delphi. Cпомощью приложения, разработанного в Delphi, можно изменять время моделирования, коэффициент усиления и постоянную времени апериодического звена первого порядка (на рис. 3 блок “Zvenо”).
Рис. 3. Модель в среде Simulink
Рис. 4. Приложение, разработанное в Delphi
Обработчик события, возникающего при нажатии кнопки “Моделирование” запрограммирован следующим образом:
procedure TMainForm.ExecuteButtonClick(Sender: TObject);
var
path:string;
V:variant;
begin
V:=CreateOleObject('Matlab.Application'); //Запусксервераавтоматизации
path:='cd'+quotedstr(GetCurrentDir);//Установка рабочей директории
V.Execute(path);
V.Execute('open_system('+quotedstr('MyModel')+')');//Открытиемодели
V.Execute('set_param('+quotedstr('MyModel/Zveno')+','+quotedstr('Numerator')+','+quotedstr(KEdit.text)+')'); //Изменениепараметровмодели
V.Execute('sim('+quotedstr('MyModel')+')') //Запускмодели
end;
В данном фрагменте кода используется объект класса Variant. Данный класс необычен тем, что не обладает ни методом Execute, ни каким-либо другими, свойственными только ему, методами. Компилятор среды Delphiзапоминает обращения к серверу автоматизации (в этом случае Matlab) и проводит синтаксический анализ метода [2, c. 71]. Сервер автоматизации - это такой компонент приложения, который регистрируется системной реестре операционной системы и может быть использован другими приложениями.
Функция CreateOleObjectинициализирует сервер автоматизации среды Matlab. Стоит отметить, что эта функция находится в модуле ComObjсреды разработки Delphi. Метод Executeна самом деле является командой сервера автоматизации среды Matlab. Единственным параметром является переменная строкового типа, в которой записаны команды среды Matlab. С помощью командного режима [5, c. 324] управления моделью в среде Simulinkеё можно редактировать: открывать, сохранять изменения, изменять параметры, запускать процесс моделирования, получая результаты.
Такой способ позволяет организовывать передачу данных между приложениями, установленными на разных компьютерах. Это позволяет разрабатывать распределенные приложения [4].
Стоит отметить, что вышеописанные способы передачи данных между двумя приложениями работают только в операционных системах семейства Windows.
Предлагаемые способы организации управления моделями и визуализации результатов моделирования описаны для среды разработки ПО Delphi, но они осуществимы в других средах, таких как BorlandC++ Builderили MicrosoftVisualStudio.
Список литературы:
- Архангельский А. Программирование в Delphi7. - М.: ООО «Бином-Пресс», 2003. — 1152 с.
- Елманова Н., Трепалин С., Тенцер А. Delphiи технология COM. – СПБ “Питер” – 2003. – 698 с.
- Карапетьян В. А., Разработка DDL-библиотек в Matlabи использование их в приложениях Delphi: Методические указания. – Севастополь: Издательство “СевНТУ” – 2010. – 32 с.
- Коровкин М. В., Погожев С. В., Вопросы построения сетевых комплексов в Matlab/Simulink//Труды II научной конференции «Проектирование инженерных и научных приложений в среде MATLAB» - 2004 – С. 1524—1533.
- Черных И. В. Simulink. Среда создания инженерных приложений – М: ДИАЛОГ-МИФИ, 2004. – 496 с.
- Matlab 7.8.0.347: Product Help. The MathWork, Inc, 1984-2009
дипломов
Оставить комментарий