使用python调用ads接口

  • 背景
  • 环境介绍
  • 具体操作过程
    • ads帮助文档
    • 配置环境以及测试
    • em生成仿真初始化文件
    • 开始仿真
    • 完整过程以及补充
    • 最后一点建议
  • 2022.3.9更新
    • 一个小bug
    • 改了改过程,把整体过程写的详细了些

背景

最近在做射频器件逆向设计,需要使用python调用ads生成数据,于是向师兄请教,在踩了很多坑之后终于成功了,记录一下整个过程

环境介绍

ads 2017(师兄用的是2021,俺估计2017及更新的版本都可以使用)
python3.6(主要是使用os)

具体操作过程

ads帮助文档


在ads的官方文档中,这篇文章是完整讲述如何使用ads接口(也就是用命令行的形式进行版图仿真),遇到啥问题找这里。

配置环境以及测试

在调用ads前,需要先修改系统环境变量;windows下的环境变量配置(我修改的是系统变量,不清楚修改用户变量是否有相同的效果)

set HPEESOF_DIR=<path_to_ADS_installation_directory> # for example: set HPEESOF_DIR=C:\Progam Files\Keysight\ADS2014_11
set ADS_LICENSE_FILE=<path_to_ADS_license_file_or_server> # for example: set ADS_LICENSE_FILE=C:\Program Files\Keysight\EEsof_License_Tools\licenses\license.lic
set PATH=%HPEESOF_DIR%\bin;%PATH%

注:不要直接在cmd控制台中直接使用这些命令,那样只是临时的变量,需要自己到环境变量中配置;

这里有个小坑是如果你在破解时没有lincense文件,那就不用配置证书的那条,只需配置第一三条就可以使用了(我就是这样,破解时没有lincense)
记得配置完后重启电脑(很重要!!!!)

配置后的测试:adsMomWrapper --version

em生成仿真初始化文件

在需要仿真的layout文件中打开仿真界面,生成仿真输入文件


生成之后的文件夹长这样

这个文件夹的路径在工作空间的simulation文件夹里
比如:D:/<your ads workspace>/simulation/*****/*****/layout

开始仿真

这部分就没啥说的,只要cd到指定的目标文件夹下,然后调用命令就可以了,详细见后文的代码部分
不过这个命令有两种

# 命令格式:adsMomWrapper -T proj proj
Substrate file pre-processing (e.g. expanding substrate for thick conductors)
-TSubstrate database generation (Green function calculation)
-DBLayout pre-processing and mesh generation
-MS-parameter model generation
-3DFar Field calculation
-FF# 还有一种是这种,也就是连续执行,从-T执行到-3D;-3D也就是我们常用的s参数仿真
adsMomWrapper -O -3D proj proj

因为俺最近升级了win11,用连续执行的命令会报错。。只能分开写。如下图(python里用os包使用ads的接口命令)

仿真后的文件变成这样(部分文件)

其中仿真后s参数的文件保存在 .cti 文件中。
注:不同type的仿真生成的s参数文件不同;
adaptive模式生成的是 .afs 文件,其他没有测过。

上述情况是单次仿真,如果需要改变器件的参数(比如微带线长度/宽度)进行连续仿真,则需要修改
proj_a和proj.pin文件
proj_a里面是器件的位置,以单条微带线为例,其中一行是微带线矩形四个点的坐标,这点需要按实际需求自己改
proj.pin保存了p针头的坐标,要和proj_a中器件的端口对应起来
其他需求照例子看看文件,俺是一个一个文件找过去的。

完整过程以及补充

梳理一下完整的过程,以及补充一个坑
1.配置环境变量,重启电脑。
2.打开python,open打开文件,修改内部器件参数
3.使用os.system,cd到目标的仿真文件夹,再使用ads命令仿真。
4.如果ads无法连续仿真,也就是仿真第一次后,后面几次执行命令后其实没有仿真而是和第一次的仿真数据一样,说明无法连续仿真,这时可以把文件中多余的文件删掉,这样下一次仿真时才是正常的。
(具体文件对比大家就自己对照写写吧,仿真文件不同生成的文件也不同)

至于怎么保存数据这就看各人的需求了
完整代码下图(作为例子)

import os
import math
import numpy as np
import pandas as pd# liner对应.cti adapt对应.afs 提取S参数,读取S参数
def read_cti(path: str):print(path)read_c = open(path + "/proj.cti")data = read_c.read()read_c.close()data = data.split("BEGIN\n")s_str = data[2].split("END")s11_str = s_str[0].replace("\t", "")s11_str = s11_str.split("\n")s_str = data[4].split("END")s21_str = s_str[0].replace("\t", "")s21_str = s21_str.split("\n")s11_r = []s11_i = []s21_r = []s21_i = []s21_phase = []for i in range(len(s11_str) - 1):s11_ri = s11_str[i].split(",")s21_ri = s21_str[i].split(",")s11_r.append(float(s11_ri[0]))s11_i.append(float(s11_ri[1]))s21_r.append(float(s21_ri[0]))s21_i.append(float(s21_ri[1]))s21_phase.append(math.atan2(s21_i[i], s21_r[i]) * 180 / math.pi)return s21_phase# 修改仿真前配置文件,即修改器件设计参数
def generate_s21(proj_path: str, w1):i_hang = 0with open(proj_path + r"\proj_a") as read_f, open(proj_path + r"\.proj_a", 'w') as write_f:for line in read_f:if i_hang == 2:print(line)line = "ADD P1 :W0.000000  -0.9500,-0.2750 %.4f,-0.2750 %.4f,0.4350 -0.9500,0.4350;\r" % (w1, w1)write_f.write(line)else:write_f.write(line)i_hang = i_hang + 1os.remove(proj_path + r"\proj_a")os.rename(proj_path + r"\.proj_a", proj_path + r"\proj_a")i_hang = 0w1_p = w1 * math.pow(10, -3)with open(proj_path + r"\proj.pin") as read_f_1, open(proj_path + r"\.proj.swap.pin", 'w') as write_f_1:for line in read_f_1:if i_hang == 25:print(line)line = "          <x>%.5f</x>\r" % w1_pwrite_f_1.write(line)else:write_f_1.write(line)i_hang = i_hang + 1os.remove(proj_path + r"\proj.pin")os.rename(proj_path + r"\.proj.swap.pin", proj_path + r"\proj.pin")# os.system("cd %s && adsMomWrapper -O -3D proj proj" % proj_path)os.chdir(proj_path)print(os.getcwd())# 仿真命令os.system("adsMomWrapper -T proj proj")os.system("adsMomWrapper -DB proj proj")os.system("adsMomWrapper -M proj proj")os.system("adsMomWrapper -3D proj proj")# 删除上一次的仿真文件,才能进行下一次的(这里的功能是抄了一位博客园老哥的代码,链接放到最后)
def Delete_S21(proj_path: str, fileList):for parent, dirnames, filenames in os.walk(proj_path):goodfilelist = []fullfilelist = []for x in fileList:goodfile = proj_path + xgoodfilelist.append(goodfile)for filename in filenames:fullpath = parent + '/' + filenamefullfilelist.append(fullpath)for xlist in fullfilelist:if xlist not in goodfilelist:os.remove(xlist)passif __name__ == '__main__':# proj_path = "D:/project_all/ADS/Myfirstlayout_wrk/simulation/Myfirstlayout_lib/uniform_line/layout/emSetup_MoM"proj_path = "D:/em"w1 = 4.0500s21_csv = pd.DataFrame()S21_Phase = np.zeros([1, 402])w1_list = np.arange(0.65, 139.05, 0.01)# 仿真需保留的文件,不在此list中的文件将被删除fileList = [r'/emStateFile.xml', r'/momentum.cfg', r'/proj.cfg', r'/proj.lcf', r'/proj.ltd', r'/proj.opt',r'/proj.params', r'/proj.pin', r'/proj.plan', r'/proj.prt', r'/proj.sti', r'/proj_a']for i in range(len(w1_list)):generate_s21(proj_path, w1_list[i])S21_Phase_hang = read_cti(proj_path)S21_Freq = np.array(w1_list[i])S21_Freq = np.reshape(np.append(S21_Freq, np.reshape(np.array(S21_Phase_hang), [1, 401])), [1, 402])S21_Phase = np.append(S21_Phase, S21_Freq, axis=0)Delete_S21(proj_path, fileList)S21_data = pd.DataFrame(S21_Phase)S21_data.to_csv("D:/project_all/python/phase/0.65-139.05mm-phase.csv")print("save complete")

最后一点建议

整个的仿真文件可以复制出来,单独在某个文件夹里也是可以正常运行的;
比如生成仿真input文件后,把所有文件复制出来,放到 D:/em (自己随便创建的)文件路径下,cd到目标路径后使用ads命令仿真,最后的仿真数据也会保存在em文件夹中,减小文件夹深度,也算是一点小优化吧。

python保留指定文件/删除目录其他文件的功能:
https://www.cnblogs.com/chub/p/4509921.html

2022.3.9更新

一个小bug

如果第一次在pycham(python的编辑器,俺用的是这个)无法运行ads的接口命令(卡在层叠数据加载那)。需先对仿真文件夹进行一次引导,如下图
即先cd到对应文件夹下,然后运行一次即可,中途记得输入“y”确定。(连续运行记得删除文件)

改了改过程,把整体过程写的详细了些

如何使用python调用ads接口(版图仿真)相关推荐

  1. pythondockerapi_docker-py 用Python调用Docker接口的方法

    众所周知,Docker向外界提供了一个API来管理其中的资源.这个API可以是socket文件形式的(一般也是默认的,在/var/run/docker.sock中),也可以是TCP形式的.以前想要通过 ...

  2. c调python_应该是史上最全的python调用C接口

    在这段时间里,我需要使用python调用C接口.我在网上搜索了很多,再加上python的官方文件,并组织备份1.从ctypes加载dll导入* dll = () # func1dll = CDLL ( ...

  3. python调用webservice接口实例_python调用各种接口,webservice,c接口,com接口,socket协议方法...

    python调用webservice接口(SOAP) (2)调用示例: 需要先安装suds库:pip install suds from suds.client import Client #如果需要 ...

  4. python调用第三方接口获取数据_python调用接口,python接收post请求接口(附完整代码)...

    与Scala语言相比,Python有其独特的优势和广泛的应用,python调用接口,因此Spark也推出了PySpark,它在框架上提供了一个使用Python语言的接口,python接收post请求接 ...

  5. python rpc_对python调用RPC接口的实例详解

    要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: 需要安装的python包如下: 1.grpc安装 pip install grpcio 2.grpc的p ...

  6. Python 调用WebService接口出错-suds.transport.TransportError: HTTP Error 401: Unauthori

    使用Python调用WebService接口出现"suds.transport.TransportError: HTTP Error 401: Unauthorized"错误. 问 ...

  7. 实现python 调用 C++ 接口的 easypr

    实现python 调用 C++ 接口的 easypr 本文实现了用python 调用 C++ 的easypr ,实现车牌的识别. CMakelist.txt 以及调用方法将会附上 CMakelist. ...

  8. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  9. 如何利用python调用API接口获取数据进行测试

    一.Python 可以使用 requests 库来调用 API 接口获取数据.以下是基本的步骤: 1.安装 requests 库 pip install requests 2.导入 requests ...

  10. python调用第三方接口获取数据_python 接口实现 供第三方调用的例子

    python 接口实现 供第三方调用的例子 实验环境 1.环境问题 python 2.7 以上自带的pyunit bottle 作为一个python的简易服务器 在python安装目录 打开命令窗口( ...

最新文章

  1. python3 函数 不定长参数 不定参
  2. js判断是否在iframe和禁止网页在iframe中显示
  3. python系统-Python OS模块常用功能 中文图文详解
  4. 数学篇(一) 矩阵运算
  5. 《python机器学习经典实例》Expected 2D array, got 1D array instead和Reshape your data either using array.问题(已解决)
  6. free 命令查看linux的内存使用情况
  7. Webserver内存溢出分析
  8. [转] 使用Docker容器,这些错误千万别犯
  9. Thinking in Java 源代码 source code 在IDEA上运行
  10. 使用junit做其他事情
  11. signature=14a3e4f784cf9004647ea52bac22e550,维族老年慢性阻塞性肺疾病患者合并肺动脉高压的临床研究...
  12. LeetCode #1349. 参加考试的最大学生数 - 学到了:压缩状态动态规划、位运算、reduce()、str().count()
  13. 人工智能与机器学习大牛们的blog
  14. 准备将redis引入项目做消息队列使用
  15. win10最常用dos命令以及win+R即可运行的命令
  16. JS如何判断一个对象是否为JSON对象
  17. DOSBOX 0.74模拟器安装Windows 95
  18. flutter 实现文字竖排以及动画效果(文字逐一显示)
  19. HDU 4461 The Power of Xiangqi
  20. 为什么我朋友的移动手机打不开我的网站却能打开www.ip138.com?

热门文章

  1. 1月16日英语计算机统考,高考英语听力首次机考16日开考
  2. 计算机二级vb语言题库百度云,全国计算机二级考试VB语言考试试题
  3. 像素类沙盒游戏还存有哪些致命伤?
  4. MySQL下载安装教程
  5. atmega328 48手动解锁 擦除
  6. Android SDK的环境变量配置
  7. 《WEB全栈工程师的自我修养》--索引笔记
  8. win10 桌面残留文件夹或其他应用关闭后的画面
  9. tarjan算法 java_Tarjan算法 割点和桥
  10. Spring常用注解整理