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

в 8:20, , рубрики: cst, Matlab, microwave, remote control, studio, vba, visual basic for applications, высокая производительность, Разработка систем связи, метки: , ,

Введение

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

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. Открыть в ModelingHistory 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 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js