python-CST MWS自动采样

  • 前言
    • (==未经允许不要转载,更不要抄袭,谢谢。==) 做天线设计的时候经常会用到cst进行仿真,有时候需要大量的CST仿真数据,一部分结构参数要求是随机生成的或者是指定的数据组合,这样就没办法使用扫参功能。CST自带了vba编程环境,可以使用vba来控制cst实现自动仿真,而python驱动CST仿真的方法就是在history list中添加vba block。我写了一个简单的采样代码,虽然执行之后在CST 的history list中有被标红,但是是可以执行的。如果有大佬能提供一些指导,感激不尽!
  • 一、天线结构
  • 二、使用步骤
    • 1.引入库
    • 2.生成采样点
    • 3.连接CST并设置采样频率
    • 4.开始采样
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:

(未经允许不要转载,更不要抄袭,谢谢。)
做天线设计的时候经常会用到cst进行仿真,有时候需要大量的CST仿真数据,一部分结构参数要求是随机生成的或者是指定的数据组合,这样就没办法使用扫参功能。CST自带了vba编程环境,可以使用vba来控制cst实现自动仿真,而python驱动CST仿真的方法就是在history list中添加vba block。我写了一个简单的采样代码,虽然执行之后在CST 的history list中有被标红,但是是可以执行的。如果有大佬能提供一些指导,感激不尽!

提示:以下是本篇文章正文内容,下面案例可供参考

一、天线结构

天线的整体结构如下图所示:

二、使用步骤

1.引入库

import sys
sys.path.append(r"path\CST Studio Suite 2020\AMD64\python_cst_libraries")#找到cst的安装位置并找到相应的文件夹位置
import os
import numpy as np
import cst.interface
from smt.sampling_methods import LHS
import pandas as pd

(SMT)是一个Python包,它包含代理建模方法、采样技术和基准功能。这个包提供了一个代理项库简单易用并有助于实现其他方法的模型。(https://www.cnpython.com/pypi/smt)

2.生成采样点

# 采样变量
nums = 80  # 样本个数
v_nums = 5  # 变量个数
# 改变s、y0、lf、wp、lp
xlimits = np.array([[0.1, 1.0], [5.0, 13.0], [5.0, 20.0], [30.0, 40.0], [20.0, 30.0]])  # 变量范围
sampling = LHS(xlimits=xlimits)  # 生成样本
x_data = sampling(nums)  # LHS生成采样点
data_sample = np.zeros([nums, v_nums + 1])  # 用于保存采样结果

采样方法为拉丁超立方采样,能够同时保持小样本数量和样本均匀性。

3.连接CST并设置采样频率

# 模型监视器频率
f_min = 2.5;
f_max = 3.5;# 目标cst文件路径
project_path = (r'path\example.cst')
line_break = '\n'  # 换行符,后面用于VBA代码的拼接用# 连接接口
cst = cst.interface.DesignEnvironment()
mws = cst.open_project(project_path)
modeler = mws.modeler  # 此种类为3D建模器提供了接口# 设置频率
sCommand = 'Solver.FrequencyRange "%f","%f"' % (f_min, f_max)
modeler.add_to_history('define frequency', sCommand)# 设置远场监视
sCommand = ['With Monitor','.Reset','.Domain "Frequency"','.FieldType "Farfield"','.ExportFarfieldSource "False"','.UseSubvolume "False"','.Coordinates "Structure"','.SetSubvolume "-35", "28", "-25", "25", "-2.3", "9.2"','.SetSubvolumeOffset "10", "10", "10", "10", "10", "10" ','.SetSubvolumeInflateWithOffset "False" ','.SetSubvolumeOffsetType "FractionOfWavelength" ','.EnableNearfieldCalculation "True" ','.CreateUsingLinearStep "%f", "%f", "%f"' % (f_min, f_max, 0.1),'End With']
sCommand = line_break.join(sCommand)
modeler.add_to_history('define farfield monitor (using linear step)', sCommand)

4.开始采样

for i in range(len(x_data)):
# 删除当前结果modeler.add_to_history('delete result', 'DeleteResults')mws.save()#保存# 修改参数并更新sCommand = 'StoreParameter("s", %f)' % x_data[i][0]y0Command = 'StoreParameter("y0", %f)' % x_data[i][1]lfCommand = 'StoreParameter("lf", %f)' % x_data[i][2]wpCommand = 'StoreParameter("wp", %f)' % x_data[i][3]lpCommand = 'StoreParameter("lp", %f)' % x_data[i][4]modeler.add_to_history('change parameter s', sCommand)modeler.add_to_history('change parameter y0', y0Command)modeler.add_to_history('change parameter lf', lfCommand)modeler.add_to_history('change parameter wp', wpCommand)modeler.add_to_history('change parameter lp', lpCommand)#modeler.add_to_history('Update Structure','RebuildOnParametricChange("True","False")')#modeler.add_to_history('Update Structure','Parametric Update')#更新,F7modeler.run_solver()  # 开始仿真# 获取结果S参数保存到文件夹SparameterssCommand = ['SelectTreeItem ("1D Results\S-Parameters\S1,1")','With ASCIIExport','.Reset','.FileName ("path\\Sparameters%d.csv")' %i,'.Execute','End With']sCommand = line_break.join(sCommand)modeler.add_to_history('Get S-parameters', sCommand)

总结

在采样部分注释掉的两个语句RebuildOnParametricChange和Parametric Update都是用来代替在cst中修改参数之后按f7对结构进行更新的操作,但是两种办法都不能执行,大概意思是这两个语句不能在控制宏中使用,但是matlab中是能够直接使用RebuildOnParametricChange语句的。

虽然有一些问题,但是整个模型是能够实现自动采样的,在设置好的文件夹中能够看到采样好的文件。后续如果有好办法能够解决上述问题的话我会继续更新的。

python-CST MWS自动采样相关推荐

  1. jupyter分割代码块_科研分享—Python根据关键词自动抓取Pubmed文献标题(附全部代码)文末有福利...

    写在前面:接触Python应该是8月初的一篇公众号文章,大致内容是使用py爬取数据库并汇总到本地.正好手头需要对某个领域的文献进行调研,不妨学习一下. 什么是Python? 百度说:Python (计 ...

  2. python安装过程中关机_1234567,Python帮女神自动来关机

    在日常使用电脑的过程中,很多小伙伴都有让电脑定时自动关机的需求.通常而言,大家一般都会有几种选择. 假如哪一天,你女神问你,有没有什么定时关机的好方法,你怎么告诉她? 文章首发州的先生博客:使用Pyt ...

  3. Python实现信息自动配对爬虫排版程序(附下载)

    授权自AI科技大本营(ID:rgznai100) 本文约2800字,建议阅读7分钟. 本文为你介绍Python实现信息自动配对爬虫排版程序. 公众号(DatapiTHU)后台回复"20200 ...

  4. 利用Python模拟鼠标自动完成MM32-LINK程序下载

    简 介: 编写了利用Python控制MM32-LINK自动下载程序,这可以减少在开发过程中的操作. MM32-LINK在打开程序过程中,对话框的标题出现错误,"Load form file& ...

  5. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  6. python编写木马攻击_用Python写一个自动木马程序

    电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...

  7. 使用Python及Selenium自动发表文章

    本文的主要内容是使用Python及Selenium自动发表文章到思否的实现思路及方式的介绍并为读者提供参考的源代码. 目录 实现思路 在自动发表文章时,我们的实现思路大致如下: 对Markdown文章 ...

  8. python 实现截图自动存入Excel表

    python 实现截图自动存入Excel表 首先我先在桌面新建一个test.xls文件 import keyboard #监听按键库 from PIL import ImageGrab #图像处理库 ...

  9. Go 服务进行自动采样性能分析的方案设计与实现

    线上服务的性能分析,一直以来都是比较难的点,主要是难在无法在性能出现异常的当时捕捉到现场信息.有人可能会说,这有什么难的,直接用 Go 工具集里的 pprof 访问一下,进行采样拿下来分析就行了.话虽 ...

最新文章

  1. 入选Gartner全球AI魔力象限,阿里云解读AI工程化为什么需具备这三大基础能力?...
  2. spring boot配置logback日志
  3. 在Anaconda中安装TensorFlow1.14.0与TensorFlow2.0.0
  4. OTT 端性能优化建设之 Weex 实践之路
  5. ASP.NET组件与开发之复合控件的事件处理
  6. ionic3 创建和启动
  7. 执行查看linux端口命令 9083 端口发现被占用 Hive安装过程遇到的问题
  8. 良好的代码风格之if else?
  9. 最近华为笔试题(9.1)第二题
  10. 迅捷图片格式转换器v1.00.1中文免费版
  11. 我妈打电话过来叫我不要搀扶路边摔倒的老奶奶——续 暨《南风窗》某文章读后感
  12. 基于JSP动漫论坛的设计与实现
  13. 二十年前割麦的童年(看哭了)
  14. 如何在微信开发者工具中插入图片
  15. 基于Java毕业设计大学生校园兼职系统源码+系统+mysql+lw文档+部署软件
  16. EasyExcel 读取excel表 解决Empty row EasyExcel末尾出现非常多空白行跳过 EasyExcel跳过末尾空白行
  17. 野路子解决微信服务器超时会把接口重新调起n次的方法
  18. sql外键需要输入吗_关于sql:为什么在没有连接的情况下可以联接,为什么需要主-外键关系?...
  19. RTMP推流协议视频直播点播平台/人脸识别系统EasyDSS 定制标签检索功能检索数据出错的问题排查
  20. VMware 8.0 安装 FC5 的VMware tools

热门文章

  1. 2022年5篇图神经网络最新的研究综述
  2. Android新手上路
  3. 登陆mysql的命令行
  4. Vue响应式原理(看这一篇就够了)
  5. [分块] 分块入门1~4
  6. DNS服务未响应的简单解决办法
  7. 静态链接库(Lib)和动态链接库(DLL)
  8. VUE+element 上传视频
  9. 抖音直播监测——2分钟了解知音数据小程序
  10. 数据有效性高级应用——制作二级下拉菜单