许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Altium Designer调用WScript脚本进行计算加速的实操方法分享

Altium Designer调用WScript脚本进行计算加速的实操方法分享

阅读数 1
点赞 0
article_banner

在AD内部跑VBScript脚本做批量计算,循环几百个元件的时候界面直接卡死,任务管理器里AD进程CPU占满,等半天才出结果。脚本引擎和主界面是同一个线程,循环里每改一个对象的属性就触发一次重绘,改五百个元件就重绘五百次,不卡才怪。把重绘间隔从默认的50ms调到200ms,或者干脆在脚本开头把`Application.Visible`设成False,跑完再设回True,界面不刷了速度能快好几倍。


脚本跑完弹`ActiveX component can't create object`,GetObject或者CreateObject连接Altium.Application的时候失败。Altium没开或者开了多个实例的时候都会出这个问题,用`On Error Resume Next`包起来,先试GetObject连已运行的实例,失败再CreateObject新开一个,两个都失败就弹提示退出。AD23之后VBScript被标成Legacy了,新建脚本默认不让用,得去Preferences→System→Advanced Settings里把Legacy.Scripts.SupportOldLanguages打开,不打开的话脚本文件拖进AD窗口直接报错。


WScript.Shell对象的Run方法在AD脚本里能调外部程序,把跟AD的API无关的计算扔出去。举个例子,PCB铜皮的面积计算,遍历几万个多边形顶点在VBScript里跑慢得要死,用`WshShell.Run "python calc_area.py input.txt output.txt", 0, True`把坐标导出去,Python算完写回来,第二个参数0是隐藏窗口,True是等Python跑完再往下走。同一条路可以调Matlab、调Octave、调任何命令行工具,只要能把结果写回文件就行。计算逻辑跟AD无关的部分全塞到外部程序里,AD脚本只负责取数据和写数据。

Altium Designer调用WScript脚本

调外部程序有几个坑。Run方法的第二个参数控制窗口样式,0是隐藏,1是正常显示,隐藏的话用户看不到进度,长时间计算的时候容易以为卡死了。第三个参数`bWaitOnReturn`设True的话AD会一直等到外部程序退出,设False的话AD继续往下跑不等待,多进程并行的时候用False。路径里带空格的话命令要用双引号包起来,`WshShell.Run """C:\Program Files\Python\python.exe"" script.py", 0, True`,VBScript的字符串里双引号要转义成两个双引号。


COM对象的复用问题。脚本里每次循环都`CreateObject`新建一个Altium.Application实例,几百次循环下来系统COM资源耗尽,脚本直接崩。改成在脚本开头建一次,循环里复用同一个对象,跑完再`Set obj = Nothing`释放。跟外部程序通信的时候也一样,别在循环里反复启动同一个外部程序,把批量数据写成一个文件传过去,外部程序一次跑完,比循环里调几百次快得多。


AD的脚本编辑器里按F9直接跑,或者DXP→Run Script选文件跑。调试的时候用`Debug.Print`往Output面板写日志,比MsgBox好,MsgBox每弹一次都要点确定,循环里弹几十次能把人逼疯。脚本文件存成UTF-8带BOM,中文注释不会乱码。脚本工程(.PRJSCR)跟PCB工程分开管理,一个功能一个.vbs文件,版本控制只提交源文件。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空