18620856065
索 取 报 价
资   讯   中   心

基于 Python 语言的 CST 二次开发

来源: | 作者:thinks | 发布时间: 2025-02-27 | 228 次浏览 | 分享到:

CST STUDIO的早期版本中,便已经支持使用脚本语言VBA编写宏命令的方式控制CST进行常见任务的自动化。不过,随着计算机系统的更新换代,利用VBA从外部调用应用程序的方式逐渐被别的语言取代,比如Python。随着CST STUDIO 2021版本的推出[1],CST进一步地增强了对Python语言的支持。现在通过Python能够实现连接CST项目操作CST项目的历史列表,在CST中运行宏命令,读取CST项目的仿真结果等功能。支持Python版本为3.6,3.7,3.8[2]。

 

基于 Python 语言的 CST 二次开发 

1. 二次开发的程序结构

 

Python语言来进行CST二次开发的主要思路如图1所示。用户通过用户界面和模型前处理程序将模型数据和仿真所需的设置参数(如仿真频率范围,网格密度等)提供给CST控制程序。在CST完成仿真之后,控制程序读取仿真结果并将之传递给后处理程序。利用传统的优化算法或者机器学习,不断地迭代仿真,从而达到改善产品性能,优化产品设计

的目的。

 

Python是目前最受欢迎的编程语言之一。利用Python编程的CST控制程序可以被很方便地移植到各种平台,或者被别的编程语言调用。常见的是在网页或者本地窗口上为用户提

 

供设置参数的界面,将设置参数保存到数据文件或者数据库,再调用Python控制流程来进

行仿真。用户界面编写所用的语言可以使用Python语言本身或者别的编程语言,比如C或者Java,只要能调用Python函数均可。这样便可以将设计流程封装成软件或者网页,集成到更大的设计平台中,比如达索公司的3DEXPERIENCE平台[3]。在仿真结果后处理方面,Python语言更是有着完善的优化算法与机器学习的函数库,在数据处理相关领域有着大量的成熟案例[4]。利用后处理程序和控制程序的交互,可以实现从“仿真”到“优化”的反复迭代过程,或者用于训练机器学习网络。比如在文章[5]利用CST优化天线布局,文章[6]利用CST进行可穿戴天线的优化设计,文章[7]利用CST和集成学习实现对电缆布线控制点的优化。而且Python还有标准数据库接口支持大部分的主流数据库。

 

而核心的CST控制程序的具体流程如图2所示。获取CST项目是指利用Python库函数创建,打开或连接CST项目。整个流程均由Python语言实现,而具体的宏命令则由VBA语言构成。对于原本具有完善的宏命令的功能模块(图3所列出的),只需要使用Python控制CST项目运行宏命令就可以实现对应的功能。而对于CST PCB Studio等功能模块,CST提供了使用Python直接控制的方法,流程与图2类似,不过运行宏命令变为运行Python函数。

 

基于 Python 语言的 CST 二次开发 

2. 支持宏命令的功能模块的 Python 控制流程

 

基于 Python 语言的 CST 二次开发 

3. 支持宏命令的功能模块

 

基于 Python 语言的 CST 二次开发 

4. CST 用户界面

 

2. 宏命令的生成

在了解基于Python的二次开发之前,首先要知道如何编写宏命令。图4为CST STUDIO2021的用户界面,宏命令相关的功能(Macros)包含在如图4中紫框所示的按钮中。在Macros里能够直接运行宏代码文件(后缀为.mcr或者.mcs),或者打开CST的宏编辑器进行宏命令的编辑和调试。CST的宏命令由VBA语言编写而成。详细CST的宏命令可以参考帮助文件的《Automation and Scripting | Visual Basic (VBA)》目录下的信息。除此之外,CST还提供了一种生成宏命令的简易方法。

 

CST Microwave Studio或者其他支持建模器的模块,即具有“3D”界面的模块,均有一个历史列表功能(History List),如图4中的黑框所示。CST会记录执行仿真的过程中所有重要的动作,并以VBA宏命令的方式保存在这个列表中。所以,我们只要在CST中执行一遍要做的命令,在历史列表中就会记录下对应的宏命令。比如图5中,左边是创建一个方块时参数设置窗口,右边是创建方块之后历史列表里对应生成的宏命令。在Edit HistoryList Item窗口中,宏命令里的Brick的每个属性都可以和左边的参数一一对应。如果修改了宏命令的参数,CST项目也会跟着做出变化。通过这种方式,我们可以快速地生成想要的宏命令。

 

基于 Python 语言的 CST 二次开发 

5. 创建方块

 

3. 利用 Python 控制 CST

CST STUDIO 2021版本中一共提供了三个Python库用于控制CST。“cst.interface”中包含了从获取CST项目到开始仿真的所有功能。“cst.result”提供了直接读取0D/1D仿真结果所需的接口。PCB仿真相关的控制命令则在“cst.eda”里,本文中不会涉及。

 

3.1 从获取 CST 项目到开始仿真

“cst.interface”中,将CST各个界面定义为不同的类,它们的包含关系如图6所示。其中整个CST的用户界面对应被称为“DesignEnvironment”的类,即设计环境。这个类提供CST主前端的接口,允许连接和打开新的设计环境实例,允许打开或创建CST项目。在界面中具体的一个个仿真项目对应被称为“Project”的类,即项目。这个类提供CST项目的实时接口,提供保存和关闭项目的功能。而一个“Project”的类中包含“Modeler”和“Schematic”两个子类,分别对应CST界面中的“3D”界面和“Schematic”界面,如图4中的红框和绿框,即建模器和原理图两个子模块。

 

基于 Python 语言的 CST 二次开发 

6. cst.interface 库中类的包含关系

 

利用“DesignEnvironment”类中提供的函数如connect_to_any_or_new(连接到任何现有设计环境,如果没有打开设计环境,则打开一个新的设计环境),open_project(打开指定路径给出的项目),get_open_projects(以实例列表的形式连接当前打开项目的列表)等,可以实现新建仿真项目,打开仿真项目或者连接已经打开的仿真项目,即实现获取CST项目。在获取到的CST项目实例的子类“Modeler”与“Schematic”中就可以运行宏命令和开始仿真了。要注意的是,“Modeler”与“Schematic”中运行宏命令和开始仿真的方式有所不同。在“Modeler”中,我们通过操作历史树的方式控制CST。

 

比如,add_to_history函数可以直接往历史列表中直接添加宏命令。并且可以使用run_solver或者start_solver函数直接开始仿真。不过,目前CST还不支持删除历史列表中历史步骤。另一方面,由于“Schematic”界面没有历史列表功能,所以只能使用execute_vba_code运行宏命令,并且只能通过宏命令来运行原理图界面中对应的仿真。常用的函数如表1。

 

1. cst.interface 库中的常用函数

基于 Python 语言的 CST 二次开发 

 

由于Python函数中调用的宏命令是以字符串的形式存在的,所以可以很方便地利用Python自带的函数进行编辑。这里分享一个小技巧,可以将事先编写好的宏命令保存成模板文件。将需要编辑修改的参数用关键词进行替换。之后,当需要运行某个宏命令时,只需要以字符串的形式读取对应模板文件,用Python中的变量值替换模板中的关键词,然后就可以用函数调用这个字符串。这种方法也适用于将多个宏命令拼接在一起执行。

 

3.2 读取仿真结果

读取CST项目仿真结果的方法有两种。一种是利用宏命令的接口访问仿真结果,再导出为文本文件供Python程序读取。这种方法可以访问到包括2D和3D的大部分仿真结果,但是非常繁琐,不够灵活。另一种是利用“cst.result”直接读取仿真结果。这种方法只能读取到CST项目文件的0D和1D结果,如点数据和一维结果曲线。不过这一方法在大多数情况下已经够用。

 

“cst.interface”库不同的是,只需要得到CST项目文件的路径,“cst.result”库直接读取该项目,获得仿真结果,不需要打开CST用户界面。“cst.result”库中类的包含关系如图7所示。通过库中的ProjectFile类,可以创建出CST项目结果的实例。利用类中的get_3d和get_schematic函数可以分别获得CST项目的“3D”与“Schematic”界面中的仿真结果,创建对应的“ResultModule”类。如果想要读取图4中蓝框所示的仿真项目参数列表ParameterList可以使用“ResultModule”类中的get_parameter_combination函数。

 

而这个类中包含的get_tree_items函数则可以返回图4中橙框所示的仿真结果的列表,列表中是仿真结果的路径。将想要结果的路径传递给get_result_item函数可以返回该结果生成的“ResultItem”实例。实例中包含了仿真数据和采样点数等仿真结果的关键信息。对于利用了优化功能进行仿真的项目,有多组的“ResultModule”,用run_id来进行区分

 

基于 Python 语言的 CST 二次开发 

7. cst.result 库中类的包含关系

常用的函数如表 2。

 

2 cst.result 库中的常用函数

基于 Python 语言的 CST 二次开发 

基于 Python 语言的 CST 二次开发 

 

4. 总结

达索公司在CST STUDIO 2021中提供了更加完善的Python库,用于实现CST的自动化

和脚本化。得益于Python语言的兼容性,基于Python语言开发的CST控制程序可以快速地移植到各种平台。而丰富的数据处理Python库能够很好地实现各种后处理功能。核心的CST控制程序利用“cst.interface”库中的函数实现创建或打开CST项目,然后通过运行宏命令的方式间接地控制CST项目。并且利用“cst.result”库中的函数,控制程序可以直接读取0D和1D的仿真结果。可以说,目前CST已具备了用Python语言进行二次开发的条件。

 

不过,由于核心控制程序依然要通过宏命令来控制大部分的CST功能,开发人员不但要对CST和Python语言相当熟悉,还需要对VBA语言有所了解,有一定开发门槛。

 

资料来源:达索官方

 主 营 产 品
cst
Abaqus
Powerflow
Xflow
simpack
CATIA
最 新 内 容
热 门 文 章
知 识 科 普
方 案 解 析
  • 汽车交通
  • 风能电源
  • 船舶机械
  • 生物医疗
  • 土木建筑
  • 新能源
  • 高科技