zoukankan      html  css  js  c++  java
  • Maxwell的vbs脚本转matlab

    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},'
    ']);
    end
    fclose(fid);
    end
    

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

    测试一下,转换前:

    转换后:

  • 相关阅读:
    从简单做起ASP.NET复合控件(修定版)(注意在OnInit裡面設置好ID,否則無法在回傳時獲取控件值)
    多态的概念和作用
    Web设计师应该收藏的11个网站
    C++、Java与.NET——与同学讨论学习方向
    Asp.Net服务器控件编程学习记录:第一个Callback控件
    ASP.NET服务器控件开发(1)封装html
    javascript获取frameset中各个模块中的数据
    你去创业太老了
    呈现控件时出错,未将对象的引用设置到对象的实例(未創建子控件。。。)
    ASP.NET的Web Resources 设置教程
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/14327159.html
Copyright © 2011-2022 走看看