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:模型后续会上传,大家有需要的可以自行下载。
程序主体
- 环境导入:
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模块,顾名思义,就是一个是跟仿真结果有关的,另一个是界面交互有关的。
- 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语句执行的方式去完成),第三个则是主控程序,控制整体的循环计算和获取数值等。
- 接下来就是调用执行了。
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脚本。
- 自动建模。当工程文件每次建模的步骤都相近时候,可以考虑开发一款自动建模的脚本工具。利用python嵌入VB脚本是完全可以实现的。
- 结果后处理。python脚本目前已经内置 了PCB和result等模块,在处理复杂的后处理任务时,能提升不少效率和准确性。此外,python的数值计算功能非常强大,做后处理数据分析也非常方便。
- 参数优化。类似于样例那样,多变量,多目标的优化,也可以通过脚本控制来完成,理论上只要计算资源足够,我们就能在程序里面加入类似人工判断和优化的方法。同样,更精细化的仿真也能给我们带来更好的仿真结果(例如人工优化的步进都较有限,程序不停计算可以将多个变量值都优化的更极致)。
- 综合性工具开发。包含以上3点的全部需求,整合为一款真正可以为设计助力和提升效率的工具。
建议:其实可以看到,目前此类脚本应用的文献和内容都较少,由于行业闭塞性,每个行业的需求都会不尽相同,建议大家多去尝试,多去发现,随着数字化,AI等行业的发展,相信此类应用后续会发展的越来越好。