Введение
Перед многими инженерами в области электромагнитного моделирования часто встают вопросы дальнейшей обработки и использования результатов моделирования задачи в других средах или, наоборот, передачи параметров из одной среды в другую. Казалось бы, нет никакой проблемы экспортировать результаты в понятную другой программе форму и пользоваться ими, либо ввести данные вручную. Однако часто встают задачи, требующие выполнения данной последовательности действий N раз и производительность выполнения данных действий устремляется к нулю. Если вам интересна тема обозначенная в заголовке, тогда прошу под кат.
Современные тенденции в обработке данных привели радиоинженеров к повсеместному использованию для достижения своих целей мощного инструмента Mathworks Matlab. Данный пакет позволяет решать задачи цифровой обработки сигналов, моделирования ПЛИС и систем связи в целом, проектирования радиолокационных моделей и многое другое. Всё это делает Matlab незаменимым помощником практически любого радиоинженера.
Специалисты по высокоточному электродинамическому моделированию чаще оперируют другими специфическими пакетами программ, одним из которых является CST Microwave Studio. О данном продукте изложено множество статей на сайте компании «Евроинтех». Потому оспаривать его лидирующие аспекты нет необходимости.
Перед автором недавно встала задача по одновременному использованию упомянутых выше пакетов. В этой статье хотелось бы отразить возможный путь решения данной задачи, а также спектра задач подобных.
Стратегия
В общем случае необходимо было провести моделирование проекта в Microwave Studio в частотном диапазоне, задаваемом некоторой функцией, выполняющейся в Matlab, и последующем использованию результатов моделирования коэффициентов передачи Sij в других расчетах.
Способ ручного ввода и вывода данных пал сразу, так как описанная последовательность действий должна была быть выполнена от 1 до нескольких тысяч раз.
Было принято решение пытаться наладить управление параметрами моделирования Microwave Studio непосредственно из функций Matlab. Анализ доступной справки CST и Matlab, а также интернет-ресурсов показал, что обе программы поддерживают использование фреймворка ActiveX.
ActiveX — фреймворк для определения программных компонентов, пригодных к использованию из программ, написанных на разных языках программирования. Программное обеспечение может собираться из одного или более таких компонентов, чтобы использовать их функциональность.
Впервые эта технология была внедрена в 1996 году компанией Microsoft как развитие технологий Component Object Model (COM) и Object Linking and Embedding (OLE) и теперь она широко используется в операционных системах семейства Microsoft Windows, хотя сама технология и не привязана к операционной системе.
Из описания CST Studio следует, что любой ее компонент может выступать в качестве управляемого OLE сервера. OLE — технология связывания и внедрения объектов в другие документы и объекты, разработанная корпорацией Майкрософт. Тем самым вот оно решение Microsoft Windows, Matlab, CST Microwave Studio + технология OLE.
Теперь необходимо разобраться, как же все это реализовать в Matlab.
Базовые функции для управления CST из Matlab
Из [1] можно выделить несколько базовых функций, необходимых для работы с ActiveX интерфейсом:
actxserver
– создать локальный или удаленный сервер;
invoke
– вызвать метод для объекта ActiveX.
Проще говоря, суть команды actxserver сводится к инициализации (открытию) программы, выступающей в качестве управляемой, invoke – к обращению к тем или иным разделам управляемой программы.
Пример:
сst = actxserver('CSTStudio.Application')
– команда привязывает к переменной «cst» управляемый с помощью OLE объект «CSTStudio.Application». В данном случае название «CSTStudio.Application» является уникальным именем в среде ActiveX, позволяющим понять, к какой именно программе мы хотим обратиться.
mws = invoke(cst , 'NewMWS')
— позволяет перемещаться между основными меню программы, в данном случае отправляет команду в переменную «cst», связанную с приложением CST Studio, на создание нового пустого файла проекта;
invoke(mws, 'OpenFile', '<Путь к файлу>')
– отправляет команду на открытие конкретного файла находящегося по адресу <Путь к файлу> в только что созданной пустой вкладке, с которой связана переменная «mws»;
solver = invoke(mws, ‘Solver’)
–данная команда присваивает переменной solver обращение к вкладке решателя во вкладке проекта, связанного с переменной «mws» Microwave Studio;
invoke(solver, 'start')
– данная команда обратившись к CST Studio к открытому проекту войдет во вкладку решателя и запустит расчет модели.
Если обратиться к вкладке Workspace в Matlab и посмотреть значения(Value) переменных: cst, mws, solver, можно заметить следующее:
- Переменная cst имеет значение <1x1 COM.cststudio_application>. Это означает, что переменная cst связана с главным окном Microwave Studio, и в нем можно создавать файлы, закрывать его и т.д. Если создание файла происходит с помощью функции invoke(cst, 'NewMWS'), то закрытие осуществляется командой
invoke(cst, 'quit')
- Переменная mws имеет значение <1x1 Interface.cststudio_application.NewMWS>. Это означает, что переменная mws связана с конкретной вкладкой проекта в главном окне CST. Во вкладке проекта можно открывать готовые проекты, сохранять и закрывать их, а также переходить к вкладкам для работы над проектом.
Примеры команд:
invoke(mws, 'save')
– сохранить текущий проект;
invoke(mws, 'quit')
– закрыть текущий проект;
invoke(mws,’SelectTreeItem’,’1D ResultsS-ParametersS1,1’)
– выбрать файл в древе папок рабочего пространства, таким образом можно обратиться к любому файлу из «древа». Данная функция при задании пути к файла чувствительна к регистру.
brick = invoke(mws, 'brick ')
– переходит к вкладке создания куба;
units = invoke(mws, 'units')
– переходит к окну изменения величин измерений проекта.
- Переменная solver и переменные brick и units, созданные в предыдущем пункте, имеют значение <1x1 Interface.cststudio_application.NewMWS.solver>, <1x1 Interface.cststudio_application.NewMWS.brick> и <1x1 Interface.cststudio_application.NewMWS.units> соответственно, что означает — все эти переменные связаны с оконечным окном по заданию тех или иных свойств объектов. К примеру, при обращении к переменной brick набором команд:
invoke(brick,'Reset'); invoke(brick,'name','matlab'); invoke(brick,'layer','PEC'); invoke(brick,'xrange','-10','10'); invoke(brick,'yrange','-10','10'); invoke(brick,'zrange','-10','10'); invoke(brick,'create');
Мы создадим куб размерами 20x20x20 текущих единиц проекта из материала «PEC» с именем «matlab».
Иерархия управляемых объектов
На основе вышесказанного можно выделить некоторую иерархию управляемых элементов, которую придется соблюдать для доступа к CST Studio из Matlab.
Рисунок 1 – Иерархия управляемых элементов CST Studio
Как видно из рисунка 1, чтобы поменять какой-либо параметр в проекте необходимо: во-первых инициализировать главное окно CST Studio, во-вторых обратиться к конкретной вкладке проекта, в третьих обратиться к окну изменения свойств конкретного объекта интерфейса (вычислителя, геометрии, единиц измерения и т.д.).
Алгоритм поиска команд для управления
Если с инициализацией главного окна и вкладки проекта все просто, то набор окон для ввода и изменения параметров очень велик, и все способы обращения к ним привести в одной статье кажется невозможным. В полном объеме они доступны в справочных материалах, поставляемых с пакетом программ CST Studio Suite. Но более простым представляется следующий алгоритм поиска формата всех команд по обращению к любому месту CST Studio.
Рассмотрим предыдущий пример по созданию куба размерами 20x20x20. Создадим такой же куб, но с помощью графического интерфейса в CST Studio и найдем во вкладке Modeling кнопку History List.
Рисунок 2 – Окно вызова History List
Откроем пункт Define brick и обратимся к его содержимому и коду в Matlab, позволяющему повторить данную последовательность действий.
Рисунок 3 – Окно Define brick и код Matlab
Из рисунка 3 видно, что код в Matlab является практически копией пункта из History List. Таким образом понять к какому оконечному объекту следует обращаться после выбора вкладки проекта (после второй строки кода Matlab) можно, образовав связь между объектом интерфейса CST, в данном случае Brick, и последовательно отправить в этот объект команды прямо из History List.
Однако не все команды в History List имеют такой синтаксис. Например, задание частотного диапазона для расчета осуществляется с помощью следующей строки:
Рисунок 4 – Задание частотного диапазона в History List
Здесь опять же очевидным образом присутствует название объекта, которому следует отправлять команды – Solver. Тогда команда для изменения частотного диапазона из Matlab будет выглядеть следующим образом:
solver = invoke(mws,'Solver');
invoke(solver,'FrequencyRange','150','225');
Сформулируем алгоритм поиска имен объектов и формата команд для управления CST Studio из Matlab:
- Необходимо выполнить все действия, которые хочется автоматизировать в Matlab, из графического интерфейса CST Studio;
- Открыть в ModelingHistory List текст требуемой операции («define brick», «define frequency range» и т.д.);
- С помощью команд, представленных ниже, связаться с CST Studio из Matlab и открыть требуемый файл:
сst = actxserver('CSTStudio.Application') mws = invoke(cst , 'NewMWS') invoke(mws, 'OpenFile', '<Путь к файлу>')
- Инициализировать связь с объектом CST Studio, параметры которого необходимо изменять, по заголовку из History List с помощью команды:
<переменная> = invoke(mws, '<Имя объекта>')
- Построчно ввести команды, описанные в History List для объекта:
invoke(<переменная>, '<команда>', '<значение1>', '<значение2>')
Данный алгоритм действий методом проб и ошибок приводит к решению задачи управления CST Studio посредством кода Matlab.
Вывод результатов анализа
После написанного выше можно уже отправить читателя разбираться дальше самому, но в самом начале статьи задача была поставлена как ввод параметров частотного диапазона из Matlab в CST и импорт результатов моделирования в виде S-параметров передачи обратно в Matlab. К тому же операции экспорта результатов в History List не отображаются.
С помощью графического интерфейса это осуществляется следующим образом:
- После расчета выбираем файл в «древе» папок для его отображения;
- 2 Экспортируем его в ASCII файл через вкладку Post ProcessingImport/ExportPlot Data(ASCII).
Теперь с помощью команд Matlab нужно осуществить то же самое.
Выше уже была упомянута команда
invoke(mws,'SelectTreeItem','1D Results/S-Parameters/S1,1')
позволяющая выбрать необходимый файл в «древе» рабочего поля. Для вывода результатов в ASCII воспользуемся встроенной функцией CST «ASCIIExport».
Из справки к CST для выполнения данной функции необходимо послать CST следующие команды:
export = invoke(mws,'ASCIIExport')
— инициализация функции экспорта с переменной export
invoke(export,'reset')
— сброс всех внутренних параметров на значения по умолчанию;
invoke(export,'FileName','C:/Result.txt')
— задание пути сохранения и имени файла;
invoke(export,'Mode','FixedNumber')
— выбор метода сохранения точек. FixedNumber – выводит строго заданное количество точек, FixedWidth – выводит точки через заданный шаг;
invoke(export,'step','1001')
– число точек для вывода/ширина шага;
invoke(export,'execute')
– команда на вывод.
Данный набор команд позволит вывести значения коэффициента отражения S11 в размере 1001 точки в файл расположенный на диске C с именем Results.txt
Тем самым поставленная изначально задача была полностью решена.
Используемая литература
[1] Потемкин, Валерий Георгиевич Введение в MATLAB / В.Г. Потемкин. — Москва: Диалог-МИФИ, 2000. — 247 с.: табл. — ISBN 5-86404-140-8
[2] Справочные материалы, поставляемые с пакетом программ CST Studio Suite
Автор: rnj2000