CST-Python二次开发分享(实例)

CST脚本发展现状

目前CST软件能支持的脚本语言为VB何Python。其中,VB是此前比较成熟的,在CST里面也内置了各种VB菜单和脚本示例,但是呢,大家都知道,脚本语言的王,最近几年最火的就是Python了,所以CST软件在大概2019版开始也就逐步引入了Python脚本,目前更新到了2023版(查了一下文档,其实内容模块还是较少)。
PS:这里吐槽一下,CST到现在主要还是靠VB脚本为主,这点远不如HFSS和ABAQUS好。特别是对比于ABAQUS,都是达索的,差距还是有点大啊,ABAQUS的脚本功能太强大。
好了,废话不多说,上货。主要步骤如下:

环境准备工作

1、安装CST studio suite。这个步骤就不演示了,具体怎么安装这个软件可以百度,网上教程较多。
我是按照了最新版的CST 2023(主要想着脚本可能更新了,结果也没更新啥),默认路径安装。
在这里插入图片描述

2、安装Python。这里要注意一点,Python更新了很多版本,但是CST并不是所有版本都支持,目前是也最高支持3.9版本,所以我就安装了3.9的Python。具体支持的版本可以查阅CST 帮助文档。
在这里插入图片描述

3、验证。验证Python能不能调用cst脚本,很简单的,允许以下程序。(路径改成CST的安装路径)

import sys
sys.path.append( r"C:\Program Files (x86)\CST Studio Suite 2023\AMD64\python_cst_libraries")
print(cst.__file__)

如果出现下面的即为成功了。
在这里插入图片描述

程序目的和建模

  • 目的。该程序主要是实现了自动调用CST软件和优化变量数值的方法。利用给定的变量值和范围,让程序自己去调用CST循环计算,最终达到我们的标定值即结束。
  • 建模。建了一个较小的模型,设置了2个变量gap和dis。如图所示
    在这里插入图片描述
    PS:模型后续会上传,大家有需要的可以自行下载。

程序主体

  1. 环境导入
import sys
sys.path.append(
    r"C:\Program Files (x86)\CST Studio Suite 2023\AMD64\python_cst_libraries")
import cst.results
import cst.interface
import cst
import math

print(cst.__file__)
# cst文件路径
Project_path = r"D:\testmodel\dipole1.cst"

如图所示,首先导入CST路径,引入它的包模块,并分别导入了result模块和interface模块,顾名思义,就是一个是跟仿真结果有关的,另一个是界面交互有关的。

  1. CST_script类:
class CST_script:
    def __init__(self) -> None:
        self.cst_full_path = Project_path

    # 打开CST。若已经打开了,则判断是不是我们需要打开的项目
    def opencst(self):
        allpids = cst.interface.running_design_environments()
        is_open = False
        for pid in allpids:
            current_DE = cst.interface.DesignEnvironment.connect(pid)
            for project_path in current_DE.list_open_projects():
                # print(project_path)
                if self.cst_full_path == project_path:
                    current_project = MyCurrentDE.get_open_project(
                        project_path)
                    is_open = True
                    break
        if is_open == False:
            current_DE = cst.interface.DesignEnvironment()
            current_project = current_DE.open_project(self.cst_full_path)
            is_open = True
        return current_DE, current_project

    # 更改变量
    def change_para(self, para_name, para_value, CurrentProject):
        command = 'Sub Main ()\nStoreDoubleParameter("%s", "%.2f")\nRebuildOnParametricChange (bfullRebuild, bShowErrorMsgBox)\nEnd Sub' % (para_name, para_value)
        # 执行修改变量脚本
        res = CurrentProject.schematic.execute_vba_code(command, timeout=None)
        return res

    def go(self, para_name, original_value, judge_value):
        current_DE, current_project = self.opencst()
        cst.interface.DesignEnvironment.in_quiet_mode = False
        current_project.modeler.run_solver()
        new_value=original_value[0]
        for n in range(original_value[2]):
            result_project = cst.results.ProjectFile(self.cst_full_path, allow_interactive=True)
            ids=result_project.get_3d().get_all_run_ids()
            S11 = result_project.get_3d().get_result_item(r'1D Results\S-Parameters\S1,1',ids[-1])
            res = [20*math.log10(math.sqrt(math.pow(i.real, 2)+math.pow(i.imag, 2))) for i in S11.get_ydata()]
            thetas = S11.get_xdata()
            min_value = min(res)
            min_freq = thetas[res.index(min_value)]
            print(new_value,min_freq,min_value)
            if judge_value[0] < min_freq < judge_value[1]:
                print("上面的值满足要求了,停止计算!")
                current_project.close()
                current_DE.close()
                break
            else:
                #  修改变量值
                new_value += original_value[1]
                self.change_para(para_name, new_value, current_project)
                current_project.modeler.run_solver()
                print("......")

该类主要是实现了基础的一些调用CST方法,第一个函数是打开CST界面和project文件,第二个函数是执行更改变量数值的操作(由于目前CST的python脚本还不是和完善,只能采用调用VB语句执行的方式去完成),第三个则是主控程序,控制整体的循环计算和获取数值等。

  1. 接下来就是调用执行了。
test = CST_script()
original_value = [1, 0.1, 15]
judge_value = [2.7, 2.71]
test.go("dis", original_value, judge_value)

如图所示,我们要去优化dis的数值,给定的原始值是1,步进0.1,一共循环计算15次,直到满足我们的条件。
判断程序是否继续优化的条件是设置为S11参数最小的db值是在2.7GHZ和2.71GHZ之间。

运行程序和结果

点击run之后,我们会发现,程序会自动打开和调用CST窗口,不停循环计算,并且在得到需要的值后即停止和退出。
在这里插入图片描述
如图所示,循环8次后,程序停止,也就是dis数值在1.8的时候,满足了需求,最低db对应的频点在2.706GHZ。我们再看CST软件里面的结果,如下图
在这里插入图片描述
可以清楚的看到,随着dis值增加,我们的最低db对应的频点一直在左移。
自此,程序运行结束。下面附上完整的程序运行过程视频,感兴趣的朋友可以自行观看。

CST脚本演示

总结和建议

总结:从样例来看,我们发现,Python调用CST的程序是可行的,程序中的例子较简单,仅优化了一个变量,但一法通万法通,对于多变量的模型自动优化肯定也是可行的。如果你有以下需求,建议可以尝试一下python开发CST脚本。

  1. 自动建模。当工程文件每次建模的步骤都相近时候,可以考虑开发一款自动建模的脚本工具。利用python嵌入VB脚本是完全可以实现的。
  2. 结果后处理。python脚本目前已经内置 了PCB和result等模块,在处理复杂的后处理任务时,能提升不少效率和准确性。此外,python的数值计算功能非常强大,做后处理数据分析也非常方便。
  3. 参数优化。类似于样例那样,多变量,多目标的优化,也可以通过脚本控制来完成,理论上只要计算资源足够,我们就能在程序里面加入类似人工判断和优化的方法。同样,更精细化的仿真也能给我们带来更好的仿真结果(例如人工优化的步进都较有限,程序不停计算可以将多个变量值都优化的更极致)。
  4. 综合性工具开发。包含以上3点的全部需求,整合为一款真正可以为设计助力和提升效率的工具。

建议:其实可以看到,目前此类脚本应用的文献和内容都较少,由于行业闭塞性,每个行业的需求都会不尽相同,建议大家多去尝试,多去发现,随着数字化,AI等行业的发展,相信此类应用后续会发展的越来越好。

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值