David WangYang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用 IronPython 导入 AEDT、EDB、IPC2581 和 ODB++ 文件
在 AEDT 中,“自动化”面板的记录器会捕获大多数作,但它不会可靠地记录文件选择步骤。使用下面的代码段将文件选取器添加到脚本中,以便用户可以选择正确的输入并指定保存新 AEDT 文件的位置。原创 2025-10-11 08:20:25 · 317 阅读 · 0 评论 -
如何取出具有相同性质的多个物件名称
如果用滑鼠依序点选了多个物件,如图四,接下来想启动程式来对这些选中的物件做运算,可以用函数GetSelections()取得这些物件的名称。list当中物件名称的排列顺序与滑鼠点选顺序相同,如图五。这里的性质可以是拓扑结构(点、线、面、三维),位置(高度),材料,颜色,尺寸,群组等等。一个HFSS设计通常包含多个几何模块,这些模块不仅拓朴结构不一样。假设程式设计需要挑选出具有相同性质的模块来编辑,程式码该如何编写?原创 2025-10-10 07:48:54 · 73 阅读 · 0 评论 -
如何利用Python呼叫nexxim.exe执行电路模拟
其实我们也可以在命令列视窗当中或利用Python程式(图三)让nexxim.exe直接运算网表来得到模拟结果。因为少了原理图转换网表的工作,模拟时间可以大幅缩短。接下来便可以透过sdf2csv.exe将资料转换成csv文字档(图四)。在AEDT的电路模拟当中,我们习惯用原理图(schematic)来建构电路(图一)。但是在执行模拟时,原理图会先被转换成网表(netlist,图二),再透过电路模拟器nexxim.exe执行运算(DC, AC, Transient)之后输出模拟结果。原创 2025-10-08 11:19:29 · 191 阅读 · 0 评论 -
如何读取HFSS模拟资料
"dB(S(1,1))"]) AddWarningMessage(str(arr[0].GetRealDataValues("dB(S(1,1))"))) GetSolutionDataPerVariation()需要填入5个参数,Help对参数格式的解释并不清楚。建议用录制的方式生成包含变数的报告,如下图。在呼叫GetSolutionDataPerVariation()的时候就知道填入参数的形式了。当资料量大的时候,第一种方法相当耗时,因为需要档案的写入/读取及解析。原创 2025-10-08 11:19:15 · 282 阅读 · 0 评论 -
如何查询license的使用状况
当公司内部有许多人在使用ANSYS软体时,在license不够用时,我们会想要找出谁在使用license。下面程式码可以查询位于远端的ANSYS license manager并输出使用者相关讯息。修改下面程式码的变数ip为license manager安装的电脑IP,接着在AEDT当中Run Script即可。几秒钟后便会跳出notepad显示user.log,如图一。原创 2025-10-05 00:26:46 · 291 阅读 · 0 评论 -
如何取得anstsedt当中-scriptargs所指定的参数值?
如果需要传入参数(argument),把参数依序加在myscript.py之后以空白隔开,如python myscript.py arg1, arg2, arg3。像是在AEDT当中,使用者可以双击win64目录底下的ansysedt.exe启动AEDT环境,也可以透过命令列执行ansysedt.exe并使其在不开启AEDT环境的状况下完成建模,模拟与资料处理。此时可以透过-scriptargs指定要输入到.py档的参数,指令如下,当中"1mm 2mm 3mm"便是要传送到myscript.py的参数。原创 2025-10-05 00:26:34 · 222 阅读 · 0 评论 -
如何比较两个目录档案的差异
最近AEDT 2020R2刚释出,笔者想要找出2020R2跟2020R1相比多/少了那些.aedtz范例,.pdf档或其他档案。因此写了一个小的script来输出两个版本档案的差异。输出2020R1有的档案而2020R2没有的,以及2020R2有的档案而2020R1没有的。比较完成之后输出到compare.txt文档并自动开启notepad++显示,两者中间用分隔线隔开以资区别。打印差异文件(sub_dcmp)从 filecmp 导入 dircmp。打印差异文件(dcmp)原创 2025-10-04 00:07:04 · 194 阅读 · 0 评论 -
如何传递上层变数到编译过的模组当中
举例来说,下面程式码为my_module.py的内容,my_module.py当中定义了函数add_1mm_sphere(x, y, z) ,其输入参数为座标点。此时加入一行程式码my_module.oEditor = oEditor即可将上层main.py的oEditor传入到my_module当中。我们先将my_module.py编译成my_module.dll档。然后在主程式main.py加入my_module.dll参考,并呼叫add_1mm_sphere(x, y, z)函式。原创 2025-10-04 00:06:47 · 226 阅读 · 0 评论 -
如何在不开启Anaconda的状况底下启动带有PyQt5操作介面的CPython程式
笔者在Anaconda上开发了一支小程式calculator.py,搭配上用PyQT5框架开发的操作介面,可用来做复数运算。在Anaconda当中执行该程式,视窗如预期显示在画面当中,在视窗当中输入复数计算式测试,输出也都一切正常。接下来笔者想要在不开启Anaconda来启动该程式,于是建立了批次档calculator.bat,当中尝试使用python.exe .\calculator.py命令来执行。接下来便想要将批次档捷径钉选到开始视窗,方便之后使用。完成之后,便可以将该捷径钉选到开始视窗(如图四)。原创 2025-10-03 09:48:21 · 72 阅读 · 0 评论 -
使用QT Designer建立QT视窗操作面简介
ui档必须搭配业务逻辑代码.py档来完成工作,打开Anaconda并将底下main.py的代码贴到main.py档,并与MainForm.ui储存在相同目录底下。此时视窗会开启,在输入框输入文字,点击按钮,输入的文字便会显示在Console当中,如图二。这代码演示了一个UI的基本工作模式,适合初学者作为QT视窗设计入门研究。开发者可以用拖拉的方式完成视窗外观设计并储存成.ui档。如果您想测试,可以将下方的MainForm.ui档案程式码复制到MainForm.ui档案当中并存档。main.py程式码。原创 2025-10-03 09:48:10 · 174 阅读 · 0 评论 -
环境变数路径Path与IronPython的模组路径
在Python当中如果需要呼叫第三方程式,而该程式所处目录路径又不在作业系统的Path环境变数当中,可以用os.environ['path'] += '第三方程式目录路径'来添加新的目录路径到Path环境变数当中,以扩展作业系统的搜寻范围。如果要加入新的自订模组,而且该模组存放的目录不在sys.path当中也跟程式不在相同目录,那么可以在程式当中使用sys.path.append('模组目录路径')来加入自定模组的目录路径。要留意的是作业系统的Path和sys.path是完全不同的事,千万不要搞混了。原创 2025-10-02 07:57:51 · 291 阅读 · 0 评论 -
AEDT的视窗操作介面范例
由于AEDT支持的程式语言为IronPython,因此使用的视窗介面框架为WPF(Windows Presentation Foundation)。在AEDT启动WPF视窗需要准备两个档案:.py档和.xaml档。下面两个档案template.py及template.xaml是我经常用来演示最基本的视窗范例,你可以在电脑当中准备这两个档案,并放置在同一目录底下。完成之后,在AEDT执行template.py,即会跳出如图一的视窗介面。在输入框输入文字之后按下Execute键,输入值便会显示在讯息视窗。原创 2025-10-02 07:57:29 · 537 阅读 · 0 评论 -
容器型别方法操作介绍
Python的容器型别如串列(list)或字串(string)都可以透过自身所提供的方法加以操作,但是不同的方法其作用对象略有差异,常会造成初学者感到困惑,以下做一个简单的解释。第二种类型的方法是不作用在自身,有返回值。第一种类型的方法是作用于自身,无返回值。第三种类型的方法是作用在自身,也有返回值。如果方法没有返回值,自然也就没有办法串接命令。原创 2025-10-01 05:32:46 · 179 阅读 · 0 评论 -
Python的惰性求值(Lazy Evaluation)特性
此时变量z就不会在建立的时候被赋予值,而是等到回圈轮到的时候再做取值的动作,这种延后取值的特性,也被称之为Lazy Evaluation(惰性求值)。底下我们用1,000,000笔学生资料来比较list(zip)与zip所使用的时间跟耗费的记忆体,图二使用了list(zip),耗费220MB, 0.216sec完成计算,图三使用zip,仅耗费147MB, 0.152秒完成计算,两者计算结果相同,皆为297871,所耗费的计算资源却大不相同。惰性求值已经被广为采用作为加速运算及减少运算资源的方法。原创 2025-09-28 00:31:34 · 70 阅读 · 0 评论 -
输出目录底下所有S参数的频率范围
有的是厂商提供的,有的是模拟得到的,有的则是网路分析仪量测结果。如果要用文字编辑器一个一个打开来看,并手动纪录档名及频率范围,估计一整个礼拜也完成不了老板交付的工作。该使用者的工作获得了老板的赞许,也让他开始尝试学习编写脚本来提高工作的效率。各位有兴趣不妨试试看下面的程式码。将下面程式码复制到档名为getSnpFreqRange.py的文字档当中,修改程式当中snp_dir的目录,在AEDT当中执行。待工作结束即可在路径当中找到output.txt(如图一),当中记录了目录底下每个S参数及对应的频率范围。原创 2025-09-28 00:31:05 · 193 阅读 · 0 评论 -
利用汇出与汇入函式协助自动化程式开发
汇入的函式也有24种。一个使用者时常需要在3D Layout的堆叠视窗设定上百层的厚度、Dk、Df等参数,这个工作耗费他相当多的时间。因此笔者利用了ExportStackup()及ImportStackup()开发了一个自动化工具(参考下面影片),大幅简化了使用者设定PCB堆叠的时间。举例来说,笔者在开发5G波束优化的演算法时,便是先透过ExportRadiationFieldsToFile()输出毫米波天线阵列每个端口在1瓦/0度的辐射远场。以上两个例子都是透过读取汇出的资料档来简化自动化程式的开发。原创 2025-09-27 07:15:21 · 362 阅读 · 0 评论 -
浅谈EDB说明文件的问题
EDB说明文档式到目前为止(2020R2),仍旧是以C#程式语言的框架来说明EDB函式的功能,而不是从Python的角度编写。举例来说,笔者最近开发的程式当中需取得ViaGroup的导电比例属性,由于ViaGroup是一个较新的元件类别,因此这个属性在2020R2仍旧无法从AEDT的GetPropertyValue()取得。此外,由于EDB主要是RD人员在使用,因此EDB所能涵盖的功能也比较新且广,当中有些功能可能是3D layout函式库所找不到的,这也是我们需要用到EDB的原因之一。原创 2025-09-27 07:15:06 · 221 阅读 · 0 评论 -
AEDT支援命令列执行的程式简介
早期的作业系统是透过输入指令来进行工作,即便后来有了视窗及滑鼠的发明,指令输入及控制台视窗(如图一)仍旧被保留到了现在。最主要的原因是可以将多个操作指令可以写在一个批次档(.bat)当中,只要执行批次档,指令便会依序执行完成工作。除了在作业系统的控制窗输入指令,或者执行批次档来启动应用程式,我们也可以用Python来模拟作业系统命令列的操作。用Python的好处是其提供的功能比作业系统支援的指令集更弹性,更强大,比方说是字串的操控。原创 2025-09-26 00:04:11 · 467 阅读 · 0 评论 -
使用PinToPinSetup针对PCB/封装模拟的半自动化设定介绍
如果PCB改版,所有的设定又要重来一次,这是极没有效率的方法。PinToPinSetup整合上述的1、2、4、5项功能在一个介面当中(如图一),且设定可以储存成.xml档(如图二)。启动PinToPinSetup有两种模式,第一种是在AEDT环境当中手动启动,另一种则是在Windows控制台方式以命令列的方式启动。这意味着可以透过Python执行PinToPinSetup,并进一步整合PCB堆叠设定,模拟执行及模型输出,达到PCB汇入到报告输出流程全面的自动化。这部分就留待下一篇文章介绍。原创 2025-09-26 00:03:58 · 257 阅读 · 0 评论 -
EDB(Electronic Database)简介
各位可以留意从3D layout汇入PCB或封装的时候,除了.aedt外,都会多出一个同名的.aedb目录,目录当中会有一个edb.def档案,所有设计的资讯都储存在其中。AEDT有一组专用的函式库专门用来建立、更新、读取、删除资料库edb.def当中所存放的零件、布线或材料等讯息。这一组EDB专用函式库的最大好处是不需要在设计开启的状况底下便可以针对版图进行编修,速度相当快。底下是一组简单的范例代码用来查询范例PCB(图一)上所有的net names并将其显示在状态视窗当中(图二)。原创 2025-09-25 04:02:59 · 455 阅读 · 0 评论 -
IronPython常见例外种类介绍
遇到没碰过的Exception可以用Google查询其意义。要注意IronPython架构基于.Net框架,其例外的命名与C#一致,而与CPython并不相同。但是IronPython例外处理的方式与一般Python并无不同。图一是写IronPython程式的时候,几种常见的例外错误。原创 2025-09-25 04:02:48 · 74 阅读 · 0 评论 -
如何利用属性视窗作为自动化程式参数输入介面
在专案及设计当中,属性的主要目的是作为一个全域变数使用,比方说我们在设计的属性视窗建立了一个变量r0=10mil(如图一),并将设计当中所有圆柱的半径值都设为r0。为了让使用者方便使用,在第一次执行程式时,我们会让程式自动将参数及其预设值写入属性视窗当中,并输出警告讯息提醒使用者属性已被建立,紧接着关闭程式而不执行动作。当之后再度执行程式时,程式检查属性如已存在,程式才会读取属性值作为输入参数并执行动作。假设使用者在画面选取了一个圆柱,执行下列程式便可以生成1mm间距,10x5的圆柱阵列结构(如图三)。原创 2025-09-23 00:20:25 · 391 阅读 · 0 评论 -
如何设计可以支援大量参数的操作介面
EXCEL的试算表格式很适合大量资料的输入。由于EXCEL储存格可以设定不同颜色跟框线,可以很好的区隔不同种类的参数群。如果要透过自动化程式生成一个复杂结构,比如via array,那么可能需要输入数十笔甚至上百笔数值资料才足以完整的描述结构。要设计出一个操作介面让使用者可以方便输入如此大量的资料并不是一件容易的事。如果数值有效性已经在EXCEL被验证过,那么Python程式只要直接读取试算表特定栏位的数值便可以进行操作。AEDT的IronPython可以支援EXCEL档案的读写,不需另行安装函式库。原创 2025-09-23 00:20:06 · 259 阅读 · 0 评论 -
如何处理单位换算的问题
假设想要比较频率的大小,因此需要先将所有的点都转成浮点数以方便比较。Python程式该如何写,才能将上面x当中所有的数值都转成浮点数?各位可以先不要看答案,试试看能不能写的出来(答案在下方)。这里有一个list当中记录着不同频率字串。有的有单位(单位有Hz, KHz, MHz, GHz, THz五种),有的没有。底下是我的程式码,各位不妨参考看看,如果您有其他更好的答案,也请让我知道。原创 2025-09-22 22:37:19 · 180 阅读 · 0 评论 -
如何透过批次模拟加速3D模型建立
在HFSS建立3D模型时,可以明显感觉得出来当模型数量越多时,执行速度会越来越慢。举例来说,利用双回圈的python代码产生20x20的圆柱阵列(如图一)花了约74秒的时间。其实是有的,透过在命令行执行脚本,由于不需要打开AEDT视窗,省去了模型渲染的时间,时间大幅缩短到0.8秒,快了足足有92倍之多。在2020R1时,这个功能仍是beta版,所以在主程式ansysedt.exe 后面加上-features=beta。-ng指的是non-graphic模式,因此不会打开AEDT介面。原创 2025-09-22 22:36:59 · 285 阅读 · 0 评论 -
自动化程式的档案路径规划
如不指定目录,Python会尝试到工作目录寻找配置档,一但找不到配置档则会引发FileNoFoundException错误。:预设为C:\Program Files\AnsysEM\AnsysEM20.2\Win64,当程式执行储存档案时,如果只有标示档名而没有标示目录,则档案会储存于此目录底下。:当程式需要输出与专案相关的资料,那么最好是将资料跟专案放在同一目录底下方便检阅。如果目录底下有多个专案,可以在输出的档名插入专案的名称以利辨别。从程式设计的角度,必须明确的指定路径才能正确的存取档案。原创 2025-09-21 04:59:17 · 176 阅读 · 0 评论 -
如何将图片输出到PPT当中?
如果需要输出上百张AEDT Report图档到PPT且不想手动复制贴上,可以在程式当中加入回圈使其边输出Report 的.png档边插入到PPT当中。同步删除该Report可避免AEDT的Report数量过多导致程式变慢。如果想用IronPython代码将图片加入到PowerPoint当中,可以参考以下代码。注意ppt.Close()函式会关闭PPT档,但是PowerPoint主程式还是保持开启状态。原创 2025-09-21 04:58:54 · 207 阅读 · 0 评论 -
如何加密自动化档案
当我们需要分享开发完成的自动化程式给其他人使用时,为了保护开发者的智慧财产权,我们会想要将程式加密起来。在IronPython当中,我们可以透过编译dll的方式,将原本为文字格式的Python加密。接下来只要提供main.py以及mymodule.dll给需要的人就可以了。主程式只包含简单功能的代码,像是切换工作路径,汇入模组,呼叫模组的函式完成计算,输出结果到讯息视窗等等。在windows命令列视窗执行compile.bat,如果编译成功会出现如图二的讯息,此时目录下会出现mymodule.dll档案。原创 2025-09-20 00:11:57 · 337 阅读 · 0 评论 -
利用UDP(User Defined Primitives)建立参数化螺旋电感简介
理想的流程是透过AEDT的优化引擎Optimetrics自动调整电感结构参数,检查L/Q值直到找到符合设计目标的电感尺寸为止。AEDT的3D编辑环境可以做到一定程度的结构参数化,但仅限于简单几何操作,如平移、旋转,张角等等。螺旋电感的结构过于复杂,无法用简单的操作来达到参数化。然而一般自动化程式虽然允许使用者设定参数(如圈数、线宽、间距、边数、内径、厚度...),如以下影片,但是生成出来的结构只能用在一次模拟。UDP产生的模型可以合并其他参数化模块生成参数化的3D Component。原创 2025-09-20 00:11:40 · 492 阅读 · 0 评论 -
如何在命令列将.brd转成.siw
滑鼠双击convert.bat,几秒钟之后生成Galileo_G87173_204.siw。原创 2025-09-19 00:05:09 · 207 阅读 · 0 评论 -
简介在AEDT启动前处理脚本的方法
但是采用ACT的先决条件是要先熟悉ACT的框架及介面编程,难度较高,较适合进阶的开发者采用。以上提到的这几种方法各自有适合使用的时机,程式开发者可视状况选择最适合的方法。一旦设定完成,只要在键盘上同时按下alt及1,脚本即可启动,这种方法需要的操作步骤最少。此方法可以不需要启动AEDT介面,因此可以加快执行速度,适合用在处理复杂的3D模型。之后我们就可以在tools选单的最下层找到脚本的名称,点选即可执行。第一种方法是按下run并选择要执行的脚本(如图一),这个方法最简单也最直觉,但是操作步骤稍多。原创 2025-09-18 00:04:34 · 557 阅读 · 0 评论 -
SIwave输出所有元件及各个元件连接的net连同对应的pad
parts = []pins = []try:except:原创 2025-09-16 00:04:04 · 193 阅读 · 0 评论 -
如何启动档案开启对话框及浏览资料夹对话框
要让程式使用者可以选择档案,我们可以在程式码当中加入OpenFileDialog()函式让使用者可以启动档案开启对话框。在AEDT底下执行下面程式码即会启动档案开启对话框,如图一。选择的档案路径会存放在txt_path变数当中并输出到讯息视窗。另存档案对话框的范例代码如下。输入的档名连同其目录所构成的路径会被存放在txt_path当中。我们便可以开启并将资料写入档案之中。原创 2025-09-16 00:04:27 · 477 阅读 · 0 评论 -
如何用Jupyter Notebook保存程式码片段
学习Python程式的过程当中,我们会习惯将学到好用的片段代码纪录下来,已备之后不时之需。放在同一个档案的话,修改测试其中一组程式码,执行时会执行档案当中所有的程式码片段,输出结果混杂在一起。.ipynb档案是用cell的方式分割不同的片段。保存code的cell可以单独执行(滑鼠点击上方Run键或按下Ctrl+Enter),则运算结果则会即时显示在cell下方。加入新的cell或修改已有的cell也很简单。最后可以将写好的.ipynb档存档并将网址加到浏览器的书签当中,方便随时调用及查询。原创 2025-09-01 00:41:08 · 317 阅读 · 0 评论 -
如何取得专案/设计/设定/物件的属性
当中要设定的参数分别为tabArg(标签名),serverArg(物件名)以及propArg(属姓名),返回字串型别的属性值。接下来便可以从录制脚本当中找到这三项参数的设定方式了。在AEDT当中,不管是专案,设计,模拟设定甚或是物件都可以透过属性视窗加以观察或修改。从录制的程式码可以看出标签页全名为"Geometry3DAttributeTab",物件名为"Box1",属性名为"Material"。其他像是专案的变量,模拟设定的参数等等都可以用这里介绍的方式快速找到正确抓取设定的方法。原创 2025-08-31 00:10:50 · 136 阅读 · 0 评论 -
简化Cython编译的Script
在CPython当中,我们可以透过Cython的技术,将Python程式码加以编译来保护程式码,并加速程式的执行。一般作法需要另外准备setup.py,并透过命令列来加以编译。为了简化步骤,我写了以下的script。在Anaconda Spyder执行该script,随即跳出档案选择视窗。选择要编译的.pyx档即可生成.pyc档。原创 2025-08-30 01:03:10 · 70 阅读 · 0 评论 -
Ansys Icepak AEDT 中的后处理脚本
由于录制的脚本很复杂,因此很难重复使用。此外,PyAEDT 还提供了一个基本教程,演示如何启动 AEDT、创建新的 Icepak 项目以及执行各种任务,例如分配边界条件、修改网格设置和创建场图。要在 Ansys AEDT 中录制脚本,请转到 Automation 选项卡,选择 Record Script,为文件命名,然后保存您的工作流程。为了演示 Ansys Icepak AEDT 中的脚本录制,我们开发了一个后处理脚本,用于创建切割平面,生成温度等值线,并将结果作为图像保存在 Icepak 中。原创 2025-08-29 00:03:15 · 393 阅读 · 0 评论 -
AEDT函式库阶层架构简介
而在oProject底下可以找到InsertDesign()的指令可以插入新的设计。]) oQ3D = oProject.SetActiveDesign("Q3DDesign1") oQ3DEditor = oQ3D.SetActiveEditor("3D Modeler") oQ3DEditor.Paste() oModule可以细分成不同功能模组,底下是HFSS的模组列表。这样的架构好处是可以同时控制多个专案及设计,举例来说,将某一个HFSS设计的局部结构复制到另一个Q3D的设计。原创 2025-08-28 00:35:33 · 166 阅读 · 0 评论 -
使用物件名称及编号找出特定面
在生成介电方块时我们会设定方块的名称和起始点,因此我们可以推算出底面的中心座标(底面任一点座标皆可),再用函式GetFaceByPosition()便可以找出底面的编号,如图三。第二种方式则是用函式找出物件六个面的编号,有了面的编号便可以找出各自的点座标进而计算的各自的法相量,找出法相量为(0,0,-1)的面即为底面,这个方法稍微复杂。第三种方式则是找出面的4个点Z座标的平均值,最小的便是底面。我们须取得底面的编号(这个范例底面ID为8)才能在面设定边界条件,问题在于该如何在程式取得底面的编号呢?原创 2025-08-28 00:35:17 · 496 阅读 · 0 评论 -
HFSS 3D 布局中的任意背钻深度
Backdrilling(背钻)是高速数字电路中使用的一种技术,用于去除多余的短截线,这些短截线会导致信号反射并降低电路性能。以前,在 HFSS 3D Layout 中定义它需要分配一个特定的层,并且通常会创建虚拟层来控制其深度或长度。但是,在最新的 Ansys 版本“23R1”中,提供了一种更灵活的方法。我们不仅可以设置背钻的深度,还可以设置半径,半径可以大于或小于过孔本身。如果我们检查上一个版本的 HFSS 3D Layout“22R2”的“让我们看一下这个简单的例子,其中有一个差分过孔。原创 2024-10-31 00:01:19 · 780 阅读 · 0 评论
分享