Pull to refresh

Управление CST MWS с помощью Matlab

Reading time7 min
Views11K

Введение


Перед многими инженерами в области электромагнитного моделирования часто встают вопросы дальнейшей обработки и использования результатов моделирования задачи в других средах или, наоборот, передачи параметров из одной среды в другую. Казалось бы, нет никакой проблемы экспортировать результаты в понятную другой программе форму и пользоваться ими, либо ввести данные вручную. Однако часто встают задачи, требующие выполнения данной последовательности действий 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 Results\S-Parameters\S1,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.

image

Рисунок 1 – Иерархия управляемых элементов CST Studio

Как видно из рисунка 1, чтобы поменять какой-либо параметр в проекте необходимо: во-первых инициализировать главное окно CST Studio, во-вторых обратиться к конкретной вкладке проекта, в третьих обратиться к окну изменения свойств конкретного объекта интерфейса (вычислителя, геометрии, единиц измерения и т.д.).

Алгоритм поиска команд для управления


Если с инициализацией главного окна и вкладки проекта все просто, то набор окон для ввода и изменения параметров очень велик, и все способы обращения к ним привести в одной статье кажется невозможным. В полном объеме они доступны в справочных материалах, поставляемых с пакетом программ CST Studio Suite. Но более простым представляется следующий алгоритм поиска формата всех команд по обращению к любому месту CST Studio.

Рассмотрим предыдущий пример по созданию куба размерами 20x20x20. Создадим такой же куб, но с помощью графического интерфейса в CST Studio и найдем во вкладке Modeling кнопку History List.

image alt

Рисунок 2 – Окно вызова History List

Откроем пункт Define brick и обратимся к его содержимому и коду в Matlab, позволяющему повторить данную последовательность действий.

image alt

Рисунок 3 – Окно Define brick и код Matlab

Из рисунка 3 видно, что код в Matlab является практически копией пункта из History List. Таким образом понять к какому оконечному объекту следует обращаться после выбора вкладки проекта (после второй строки кода Matlab) можно, образовав связь между объектом интерфейса CST, в данном случае Brick, и последовательно отправить в этот объект команды прямо из History List.

Однако не все команды в History List имеют такой синтаксис. Например, задание частотного диапазона для расчета осуществляется с помощью следующей строки:

image alt

Рисунок 4 – Задание частотного диапазона в History List

Здесь опять же очевидным образом присутствует название объекта, которому следует отправлять команды – Solver. Тогда команда для изменения частотного диапазона из Matlab будет выглядеть следующим образом:

solver = invoke(mws,'Solver');
invoke(solver,'FrequencyRange','150','225');

Сформулируем алгоритм поиска имен объектов и формата команд для управления CST Studio из Matlab:

  1. Необходимо выполнить все действия, которые хочется автоматизировать в Matlab, из графического интерфейса CST Studio;
  2. Открыть в Modeling\History List текст требуемой операции («define brick», «define frequency range» и т.д.);
  3. С помощью команд, представленных ниже, связаться с CST Studio из Matlab и открыть требуемый файл:

    сst = actxserver('CSTStudio.Application')
    mws = invoke(cst , 'NewMWS') 
    invoke(mws, 'OpenFile', '<Путь к файлу>')

  4. Инициализировать связь с объектом CST Studio, параметры которого необходимо изменять, по заголовку из History List с помощью команды:

    <переменная> = invoke(mws, '<Имя объекта>')
  5. Построчно ввести команды, описанные в History List для объекта:

    invoke(<переменная>, '<команда>', '<значение1>', '<значение2>')

Данный алгоритм действий методом проб и ошибок приводит к решению задачи управления CST Studio посредством кода Matlab.

Вывод результатов анализа


После написанного выше можно уже отправить читателя разбираться дальше самому, но в самом начале статьи задача была поставлена как ввод параметров частотного диапазона из Matlab в CST и импорт результатов моделирования в виде S-параметров передачи обратно в Matlab. К тому же операции экспорта результатов в History List не отображаются.

С помощью графического интерфейса это осуществляется следующим образом:

  1. После расчета выбираем файл в «древе» папок для его отображения;
  2. 2 Экспортируем его в ASCII файл через вкладку Post Processing\Import/Export\Plot 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
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+9
Comments1

Articles