Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Matlab и FEKO или CST Microwave Studio
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
Demonis
Есть ли возможность простой передачи данных из Matlab в FEKO или CST Microwave Studio и считываныя оных из результатов этих программ. Что необходимо сделать: в Матлабе планируется написание программы для оптимизации посредством генетического алгоритма, в связи с этим надо передавать значения параметров в указанные программы, а потом считывать результаты. Среди результатов интерес представляет входное сопротивлени, КНД, по возможности вид диаграммы в Е и Н плоскостях.
DesNer
В программном мире есть стандартная технология взаимодействия программ, COM Automation называется. Суть ее в том что одна программа (COM-клиент) может получить доступ к объектам и методам другой программы (COM-Server). MATLAB данную технологию поддерживает. Т. е. он может выступать в качестве COM клиента. Насколько я знаю данную технологию точно поддерживает CST, насчет FEKO не уверен. Еще ее поддерживает MWO Office. Вообще, тут много чего почитать надо. В документации по MATLAB есть пару примеров подключения к COM-Serverу.
Вот такая строчка в MATLABе запускает COM server программы Microwave Office к примеру.

e = actxserver('MWOapp.MWOffice');

Вобще технология стандартная и любой нормальный программист ее в принципе знает.
Demonis
Может любой програмист это и знает, но я то занимаюсь разработкой СВЧ устройст. Поэтому если можно, то дайте немного дополнительной информации (только если можно в стиле "как сделать", а не голая теория для программистов).

Заранее спасибо
DesNer
Ну тут работы прилично. Ну давайте пробовать на примере СST. Там в хелпах есть информация по написанию на VBA скриптов к CST. Так вот скрипты - это тоже самое, только надо их перелолжить на MATLAB. Имена функций и методов такие же, различия в способе их вызова и передаче аргументов. Пробуете вызвать CST из MATLAB
Код
e = actxserver('MWStudio.Application');

Ха blink.gif у меня не получается. Хотя должно бы
type library not found
Попробуйте, если не получится, будем думать дальше.
VitaliyZ
Цитата(DesNer @ Oct 17 2006, 08:07) *
Вобще технология стандартная и любой нормальный программист ее в принципе знает.


Если так, то девелоперов ЦСТ можно назвать НЕнормальными программистами.

Любой кто пробовал через СОМ добратся до ЦСТ знает, что все не так просто. (не рассматриваем программы со встроенным бейсиком как Эксель от Микрософт).
Грабли в том, что у ЦСТ нет публичных свойств и методов, значит надо доставать их "не публичными"
методами. Это становится проблематичным, если нужно достать массив данных, как нужно Demonis.



Цитата(DesNer @ Oct 17 2006, 14:27) *
Пробуете вызвать CST из MATLAB
Код
e = actxserver('MWStudio.Application');

Ха blink.gif у меня не получается. Хотя должно бы
type library not found
Попробуйте, если не получится, будем думать дальше.


Зависит от версии ЦСТ.
e = actxserver('MWStudio.Application'); для ЦСТ 5 и старше.
Для новых ЦСТ вызывайте ("CSTStudio.Application")
Demonis
Вечером попробую, работает ли это у меня. А сейчас вот возникла идея, что в принципе для успешной работы я могу ограничить себя следующими операциями:
1. Изменять из матлаба значение параметра в ЦСТ
2. Запускать расчет
3.По окончании расчета заставлять ЦСТ автоматом экспортировать необходимые данные в текстовый формат, который потом обрабатывать в Матлабе (если получится, конечно) и закрывать окно ЦСТ.
Demonis
e = actxserver('CSTStudio.Application') работает.
Вот среди VBA Objects нашел следующие
1. StoreDoubleParameter ( string name, double value )

Creates a new double parameter or changes an existing one, with the specified double value.

2.ASCIIExport Object

Export 1D data as a ASCII file.

Methods

Default Settings

Example

Methods

Reset

Resets the export options to the default.



FileName ( filename filename )

Sets the name of the exported file.



Mode ( enum type )

Use a fixed step width or a fixed number of samples for your data export.

type can have one of the following values:

"FixedNumber"
Fixed number of samples

"FixedWidth"
Fixed step width




Step ( int steps / double stepwidth )

Number of steps or step width in all directions. Use the .Mode method before.



StepX ( int steps / double stepwidth )

StepY ( int steps / double stepwidth )

StepZ ( int steps / double stepwidth )

Number of steps or step width in x / y / z-direction. Use the .Mode method before.



Execute

Performs the ASCIIExport.

Default Settings

FileName ("")

Mode ("FixedWidth")

Step (-1)

Example

' The following script exports a file containing the electric field "e1" (if available)

' The file will show 9 columns:

' 3 for the positions (x, y, z) and

' 6 for the electric field vector (3 x Re/Im)



' Select the desired monitor in the tree.

SelectTreeItem ("2D/3D Results\E-Field\e1")



With ASCIIExport

.Reset

.FileName (".\example.txt")

.Mode ("FixedNumber")

.StepX (12)

.StepY (12)

.StepZ (8)

.Execute

End With

Обьясните пожалуйста, как можно выполнять эти инструкции из Матлаба, а я уже по аналогии попробую разобраться с другими обьектами.
VitaliyZ
Цитата(Demonis @ Oct 18 2006, 16:30) *
вот возникла идея, что в принципе для успешной работы я могу ограничить себя следующими операциями:
1. Изменять из матлаба значение параметра в ЦСТ
2. Запускать расчет
3.По окончании расчета заставлять ЦСТ автоматом экспортировать необходимые данные в текстовый формат, который потом обрабатывать в Матлабе (если получится, конечно) и закрывать окно ЦСТ.


Это уже ближе к реальности. Должно получиться.
Теперь по поводу неявного вызова. Запусти поиск в хелпе Матлаба по слову "implicit". Там найдешь страничку по поводу СОМ. На ней буквально пару обзацев об этом, но для начала должно хватить.
У меня сейчас получается открывать файл, запускать расчет и т.д.
Если не разберешься, пиши, вышлю конкретный пример обращения к обьектам ЦСТ.
Yuri Potapoff
Demonis

По завершеню ваших экспериментов вы не могли бы описать все проделанное в виде статьи? Материал будет востребован.
Demonis
to Vitaliy Z.

Все таки без конкретного примера обойтись не смогу. Если какой пример, то можно на Dmytro.Vasylenko*rub.de

to Yuri Potapoff

Сделаю.
VitaliyZ
Цитата(Demonis @ Oct 20 2006, 12:56) *
Все таки без конкретного примера обойтись не смогу. Если какой пример, то можно на Dmytro.Vasylenko*rub.de


ОК.
Хотя в хелпе вроде все понятно написано.
VitaliyZ
Цитата(Yuri Potapoff @ Oct 20 2006, 12:30) *
Материал будет востребован.


Почему-то сомневаюсь.
Почти два месяца назад я задавал на форуме (и не только в этой ветке) аналогичный вопрос и заинтересовавшихся не нашлось. glare.gif
Yuri Potapoff
Я имел в виду востребованность материала для публикации. Будет ли его кто читать - вопрос отдельный.
Myron
Цитата(Yuri Potapoff @ Oct 20 2006, 08:56) *
Я имел в виду востребованность материала для публикации. Будет ли его кто читать - вопрос отдельный.


Будет, если толково написано, без жаргона и не только для узкоспециализированных гуру. Считаю, что вопрос взаимодействия софта один из актуальных. Особенно пока пара компаний не поглотит всех остальных и не начнет выпускать всеобъемлющих монстров.
Demonis
Кстати, как показали дальнейшие эксперементы вызов команды открытия файла в 2006 ЦСТ приводит к ошибке в Матлабе (хотя файл в ЦСТ таки открывается) и после этого никакие команды уже не выполняются. Да и ЦСТ приходится закрывать после этого посредством убивания процесса. При этом с ЦСТ 5 все функционирует на ура. Версия Матлаба у меня 7.0.0.19920.

Пробовал связать ЦСТ 2006 с Матлабом 6.5 - так там вообще отказывается СОМ работать

Связка команд, приводящая к ошибке:
cst = actxserver('MWStudio.Application')
cst.invoke('OpenFile','C:\\Temp\\Temp\\bbb.mod');
Demonis
Пришлось таки после долгого перерыва вернуться к связке CST+Matlab (CST Microwave Studio 5+Matlab 2006b)

Кое-что получается

-открытие программы и изменение параметров
cst = actxserver('MWStudio.Application');
cst.invoke('OpenFile','C:\\GA\\Test\\test.mod');
cst.invoke('StoreDoubleParameter','L','25');

-запуск солвера
cst2 = actxserver('MWStudio.Solver');
cst2.invoke('Start');

-экспорт S11 -параметров в формате TOUCHSTONE, хотя вот что-то SetNSamples как-то непонятно работает (просто скидывается вся точки расчета)

cst3 = actxserver('MWStudio.TOUCHSTONE');
cst3.invoke('Reset');
cst3.invoke('FileName','c:\\results');
cst3.invoke('Impedance','50');
cst3.invoke('Renormalize','True');
cst3.invoke('SetNSamples','20');
cst3.invoke('Write');


А вот попытка аналогично вызвать

cst5 = actxserver('MWStudio.ASCIIExport');

приводит к ошибке

??? Error using ==> actxserver
Server creation failed. Invalid ProgID 'MWStudio.ASCIIExport'

Как бы вызвать все-таки объект ASCIIExport??
nadie
Цитата
Demonis


Ваш опыт очень интересен, только насколько я знаю, нет открыто выложенных данных, как получить данные полей через COM интерфейс.

Работающий вариант, читать данные из бинарных файлов, которые находятся в директории Result (CST2008). Там есть как поля, так и 1D результаты. Проблема с полями возникает только в случае, если используются различные фичи типа Subgrigging, TST, так как поля в этом случае перестают быть просто 3Д матрицей.

Если у вас официальная лицензия, то как читать поля информацию вы можете получить у разработчиков. У остальных, знающих это, руки связаны соглашениями о не распространении информации, полученной от тех же самых разработчиков.
Demonis
Нашел вот второй способ управления ЦСТ из Матлаба. В самом Матлабе можно сформировать *.bas файл такого содержания

Sub Main ()
OpenFile("C:\GA\Test2\test.mod")
StoreDoubleParameter ("L", 50)
With Solver
.Start
End With
SelectTreeItem ("Tables\1D Results\S11dB")
With ASCIIExport
.Reset
.FileName ("c:\example.txt")
.Mode ("FixedNumber")
.Step (20)
.Execute
End With
End Sub

и запустить его из матлаба строкой

! "C:\LIBRARY\ENGINEERING\CST STUDIO SUITE 2006\CST DESIGN ENVIRONMENT.exe" -m C:\test3.bas

(для 5-го ЦСТ без ключа -m). Так по идее можно через родные VBA-функции добраться до любых резкльтатов (хотя в моих расчетах мне вполне достаточно S11, VSWR). Но при каждом запуске заново запускается приложение и по выполнению закрывается. А когда таких запусков свыше 1000, то слишком много времени на запуск приложения уходит.

В принципе сам ASCII-экспорт можно реализовать в виде макроса в ЦСТ. Вот только как его заставить выполняться после каждого расчета по типу как это делается в Template based postprocessing??? Это бы решило все проблемы

А может ли кто-то проверить как работает вот такой вот макрос на версии новее 2006. А то почему-то экспортируется полностью все данные, а не 20 элементов.

Sub Main ()
SelectTreeItem ("Tables\1D Results\S11dB")
With ASCIIExport
.Reset
.FileName ("c:\example.txt")
.Mode ("FixedNumber")
.StepX (20)
.Execute
End With
End Sub

UPDATE:
макрос удалось запустить камандой:
cst = actxserver('MWStudio.Application');
cst.invoke('RunMacro', 'S11_Export');

Так что связать Матлаб и ЦСТ более-менее получается
nadie
Цитата
связать Матлаб и ЦСТ более-менее получается


Мне кажется, что в вашем случае правильнее утверждать, что получается связать через экспорт результатов в виде текстовых файлов.

Только не очень понятно, зачем заниматься таким экпортом, если эти результаты уже есть в виде бинарных файлов? Чтение и запись текстовых файлов отнюдь не быстрое занятие, особенно если это касается данных полей.
navuho
CST 2008 Service Pack – Jan-18-2008 :

>General / Environment

>A DLL to read CST STUDIO SUITE™ results in MATLAB or in other external tools is available now. New Feature!
Demonis
Посмотрел - полезная вещь для считывания результатов измерений.

Вот только доступ из Matlab к CST2008 как-то изменился. То, что работало в 2006 не работает с 2008, хотя вроде бы изменения небольшие. Можно конечно это все написать макросами в самом ЦСТ и запускать уже их, но как-то это немного в обход получается.
Jack_Profit
Свежие книжки по моделированию радаров в МАТLАВ.

Ваssеm R Маhаfzа, Аtеf Elshеrbеni. МАТLАВ Simulаtiоns for Rаdаr Systеms Dеsign, 2004.
Ваssеm R Маhаfzа. Rаdаr Signаl Аnаlysis аnd Рrоcеssing Using МАТLАВ , 2009.

См. линки в приложении
VitaliyZ
Цитата(Jack_Profit @ Jan 12 2010, 18:49) *
Свежие книжки по моделированию радаров в МАТLАВ.

Ваssеm R Маhаfzа, Аtеf Elshеrbеni. МАТLАВ Simulаtiоns for Rаdаr Systеms Dеsign, 2004.
Ваssеm R Маhаfzа. Rаdаr Signаl Аnаlysis аnd Рrоcеssing Using МАТLАВ , 2009.

См. линки в приложении


Спасибо за линки, только в этих книгах нет ничего о связке Matlab / FEKO и CST Microwave Studio.
Прим_Юрий
Цитата(Yuri Potapoff @ Oct 20 2006, 17:56) *
Я имел в виду востребованность материала для публикации. Будет ли его кто читать - вопрос отдельный.





Читать будут, убеждён!
Если есть результат-просьба выложить.
Sharh
Доброго времени суток, Вы не могли бы по подробнее описать с помощью какой команды возможно открыть проект CST из Matlab, запустить его и получить данные, с конкретным примером, желательно, а то никак не пойму что и как писать=((((
Demonis
Цитата(Sharh @ May 17 2011, 16:42) *
Доброго времени суток, Вы не могли бы по подробнее описать с помощью какой команды возможно открыть проект CST из Matlab, запустить его и получить данные, с конкретным примером, желательно, а то никак не пойму что и как писать=((((


bas_fid = fopen('c:\PROJECT\cst2008.bas', 'w');

fprintf(bas_fid,'Sub Main ()\n');
fprintf(bas_fid,'OpenFile("c:\\PROJECT\\vivaldi.cst")\n');
fprintf(bas_fid,'DeleteResults \n');

fprintf(bas_fid,'StoreDoubleParameter ("parameter1", %f) \n', par(1));
fprintf(bas_fid,'StoreDoubleParameter ("parameter2", %f) \n', par(2));

fprintf(bas_fid,'StoreDoubleParameter ("parameter3", %f) \n', par(3));


fprintf(bas_fid,'Rebuild \n');

fprintf(bas_fid,'With Solver \n');
fprintf(bas_fid,'.Start \n');
fprintf(bas_fid,'End With \n');

fprintf(bas_fid,'End Sub \n');

fclose(bas_fid);


! "C:\Program Files\CST STUDIO SUITE 2008\CST DESIGN ENVIRONMENT.exe" -m c:\PROJECT\cst2008.bas

Вот так все успешно работает и для CST 2010. Пути к файлам и их название, естественно, проставлять свои. parameter1, parameter2, parameter3 - это названия параметров, которые надо поменять в проекте, par(1), par(2), par(3) - это, соответственно, значение, которые вы им присваиваете из Матлаба.

Для считывания результата ищите в каком файле их хранит CST. Как правило формат этих файлов текстовый. Все результаты можно найти в папке Results проекта.
Sharh
Спасибо большое,попробую все это проделать, пока вроде все ясно)
Sharh
подскажите пожалуйста как формировать .bas файл?
Demonis
Цитата(Sharh @ May 21 2011, 12:57) *
подскажите пожалуйста как формировать .bas файл?


Так, собственно, в моем сообщении полностью описано как формировать bas-файл. Там открывается проект, удаляются старые результаты, меняются значения переменных, обновляется геометрия и запускается transient-solver. Если нужны какие-то другие функции, то ищем их в помощи по VBA и пробуем применять.
Sharh
fprintf(bas_fid,'Sub Main ()\n'); в этом месте у меня Matlab выдает ошибку, скажите, пожалуйста какие параметры необходимо указать
Demonis
Цитата(Sharh @ May 22 2011, 18:15) *
fprintf(bas_fid,'Sub Main ()\n'); в этом месте у меня Matlab выдает ошибку, скажите, пожалуйста какие параметры необходимо указать


А вы потрудились поменять пути на реально существующие на вашем компьютере?
bas_fid = fopen('c:\PROJECT\cst2008.bas', 'w');
Эта команда не создает папку, хотя при ее отсутствии не ругается.
Sharh
Конечно менял, вы простите меня за то что я так туплю, просто это чуть ли не первый мой опыт работы в этих программах
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.