• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Maxwell的vbs脚本转matlab

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.背景

Maxwell可以录制脚本,方便地实现程序控制和自动化操作。

在maxwell菜单栏中选择Tools→Record Script To File即可开启录制。

目前可选择的语言有两种,Python和vbs。

虽然Python非常火热,vbs更像是不被关注的小众语言。但Maxwell中的Python脚本是用Python2.7写的,且需要很多的包支持,操作起来多有不便。相比之下,vbs是在windows下就可以直接运行的,且代码紧凑,可用性更好。

之前在这篇博客(https://blog.csdn.net/tongguowei/article/details/100087107)中看到了使用Matlab控制Maxwell的方法,觉得甚好,因为Matlab计算环境的优势不言而喻,且不需要任何额外的安装操作。

上面这篇博客中给出了vbs和matlab代码的对比,并说明了一些简单的规则,但是没有形成体系,不能自动完成转换,而手动转换的操作极为繁琐,所以,下面给出详细的转换规则,并给出利用Matlab中的正则表达式自动转换vbs代码的m函数。

2.转换规则

打开Maxwell录制的脚本,可以发现其开头有一段建立变量的过程:

这一段操作在Matlab中可以描述为:

iMaxwell = actxserver(\'Ansoft.ElectronicsDesktop\');
Desktop = iMaxwell.GetAppDesktop();
Desktop.RestoreWindow;
Project = Desktop.SetActiveProject("Project1");
Design = Project.SetActiveDesign("Maxwell3DDesign1");
Editor = Design.SetActiveEditor("3D Modeler");

可以发现,简单的单行语句可以直接完成转换。

下面主要介绍复杂语句的转换,如vbs脚本:

oEditor.ChangeProperty Array("NAME:AllTabs", Array("NAME:Machine", Array("NAME:PropServers",  _
  "Machine"), Array("NAME:ChangedProps", Array("NAME:Number of Poles", "MustBeInt:=", true, "Value:=",  _
  "4"), Array("NAME:Stray Loss Factor", "Value:=", "0.02"), Array("NAME:Frictional Loss", "Value:=",  _
  "130W"), Array("NAME:Windage Loss", "Value:=", "30W"), Array("NAME:Reference Speed", "MustBeInt:=",  _
  false, "Value:=", "1450rpm"))))

转换为Matlab代码:

invoke(Editor, \'ChangeProperty\', ...
  {\'NAME:AllTabs\', {\'NAME:Machine\', {\'NAME:PropServers\',  ...
  \'Machine\'}, {\'NAME:ChangedProps\', {\'NAME:Number of Poles\', \'MustBeInt:=\', true, \'Value:=\',  ...
  \'4\'}, {\'NAME:Stray Loss Factor\', \'Value:=\', \'0.02\'}, {\'NAME:Frictional Loss\', \'Value:=\',  ...
  \'130W\'}, {\'NAME:Windage Loss\', \'Value:=\', \'30W\'}, {\'NAME:Reference Speed\', \'MustBeInt:=\',  ...
  false, \'Value:=\', \'1450rpm\'}}}})

的方法。

转换规则:

  1. Array()转换为{};
  2. oEditor.ChangeProperty (...)转换为invoke(Editor, \'ChangeProperty\', ...);

  3. 双引号替换为单引号。

特别说明,由于单引号在vbs语言中表示注释,所以所有字符串都是由双引号建立的,即字符串内不能再含有引号,需要使用引号时必须用ANSI 字符代码表示,及Chr(34),这一点需特别注意。

如有时录制结束后可以看到vbs代码中含有不少的Chr(34):

3.自动转换函数

考虑以上转换规则,给出以下函数:

function vbs2m(filename)
data=importdata(filename);
for i=1:length(data)
    data{i}=regexprep(data{i},\'Array\(\',\'{\');
    data{i}=regexprep(data{i},\'(?<![Chr\(34,143 175 143])\)\',\'}\');
    data{i}=regexprep(data{i},\'o([A-Za-z]+?)\.([A-Za-z]+?) (.+)\',\'invoke\($1, "$2",  $3\');
    data{i}=regexprep(data{i},\'"(.*?)"\',"\'$1\'");
    data{i}=regexprep(data{i},"\' \& Chr\(34\) \& \'",\'"\');
    if data{i}(end)==\'_\'
        data{i}=regexprep(data{i},\'_$\',\'...\');
    else
        data{i}=regexprep(data{i},\'(.)$\',\'$1\);\');
    end
end
fid=fopen(filename,\'w\');
for i=1:length(data)
    fprintf(fid,[data{i},\'\n\']);
end
fclose(fid);
end

使用方法,将待转换的vbs脚本放在myvbstest.txt文件中,并放在matlab的工作目录下,然后运行vbs2m(\'myvbstest.txt\')即可,此时myvbstest.txt中存放的就是m脚本啦。

测试一下,转换前:

转换后:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
调用关机对话框delphi发布时间:2022-07-18
下一篇:
Delphi2009智能指针0.21b版发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap