Modelica 如何为Wolfram SystemModeler编写脚本以运行多个模拟?

Modelica 如何为Wolfram SystemModeler编写脚本以运行多个模拟?,modelica,wolfram-language,systemmodeler,Modelica,Wolfram Language,Systemmodeler,我想在我的模型改变两个参数f和TLoad的情况下运行大约100次模拟,并跟踪相位电流currentSensor.I[1]等的变化 现在我被Wolfram网站上的文档缠住了,因为没有关于如何在SystemModeler中使用脚本的明确解释。例如,我在Wolfram站点上发现了一些代码,但没有解释应该在哪个命令行中使用它 我下载了WolframScript程序,并试图用WolframScript-文件SMPM\u VoltageSource\u Inverter.mo打开我的模型,但它说ToExpr

我想在我的模型改变两个参数
f
TLoad
的情况下运行大约100次模拟,并跟踪相位电流
currentSensor.I[1]
等的变化

现在我被Wolfram网站上的文档缠住了,因为没有关于如何在SystemModeler中使用脚本的明确解释。例如,我在Wolfram站点上发现了一些代码,但没有解释应该在哪个命令行中使用它

我下载了WolframScript程序,并试图用
WolframScript-文件SMPM\u VoltageSource\u Inverter.mo
打开我的模型,但它说
ToExpression::sntx:在…或之前无效语法。
即使我的模型模拟得很好,模拟中心没有任何错误

谁能给我解释一下:

  • 可以写脚本吗
如果是:

  • 如何模拟我的模型
  • 如何对
    f
    TLoad
    进行参数扫描?是否如链接中所述
  • 是否可以将
    currentSensor.i[1]
    的数据导出为csv文件?那怎么做呢

谢谢你的帮助

对不起,我不知道wolfram的情况,但对于OpenModelica来说,以下工作:

// to load Model from file use
// loadFile("fileName.mo");

loadString("
model M
  parameter Real a = 1;
  Real x;
equation
  x = a * sin(time);
end M;
"); getErrorString();

buildModel(M); getErrorString();

for a in {1,2,3,4} loop
  str_a := String(a); getErrorString(); 

  system("./M -override a=" + str_a); getErrorString();
  // for windows use 
  //system("M.exe -override a=" + str_a); getErrorString();

  system("mv M_res.mat " + "M_" + str_a + ".mat");
end for;
将其放入名为例如
model.mos
的文件中,并根据您的操作系统,使用
omc model.mos
从终端或命令行调用它(如果已安装OpenModelica)。这将生成一个csv


编辑:我意识到原稿只保存了x的最后一个值,您可能需要完整的输出。因此,我更改了
.mos
-文件。每个不同的结果都将保存在不同的文件中,如果要将其更改为csv,只需更改生成的xml。

我不知道wolfram的情况,抱歉,但对于OpenModelica,以下功能可以工作:

// to load Model from file use
// loadFile("fileName.mo");

loadString("
model M
  parameter Real a = 1;
  Real x;
equation
  x = a * sin(time);
end M;
"); getErrorString();

buildModel(M); getErrorString();

for a in {1,2,3,4} loop
  str_a := String(a); getErrorString(); 

  system("./M -override a=" + str_a); getErrorString();
  // for windows use 
  //system("M.exe -override a=" + str_a); getErrorString();

  system("mv M_res.mat " + "M_" + str_a + ".mat");
end for;
将其放入名为例如
model.mos
的文件中,并根据您的操作系统,使用
omc model.mos
从终端或命令行调用它(如果已安装OpenModelica)。这将生成一个csv


编辑:我意识到原稿只保存了x的最后一个值,您可能需要完整的输出。因此,我更改了
.mos
-文件。每个不同的结果都将保存在不同的文件中,如果要将其更改为csv,则只需更改生成的xml。

Crossposted.Crossposted.Unrelated思考:为什么必须使用
getErrorString()
对mos中的大多数语句进行后缀?这似乎是非常多余的。我很好奇,为什么这些错误不会自动返回,或发送到stderr,或作为异常/类似机制?有时您不希望发出错误和警告,因为您知道它们与您的案例无关,而且过于冗长。但是如果使用
suppressErrorString()
命令,可能会是一个更好的设计决策。我明白了,谢谢。是的,或者像Python中那样的可配置日志记录级别……不相关的想法:为什么必须用
getErrorString()
对mos中的大多数语句进行后缀?这似乎是非常多余的。我很好奇,为什么这些错误不会自动返回,或发送到stderr,或作为异常/类似机制?有时您不希望发出错误和警告,因为您知道它们与您的案例无关,而且过于冗长。但是如果使用
suppressErrorString()
命令,可能会是一个更好的设计决策。我明白了,谢谢。是的,或者可配置的日志记录级别,例如Python中的日志记录级别。。。