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
- 是否可以将
的数据导出为csv文件?那怎么做呢currentSensor.i[1]
谢谢你的帮助 对不起,我不知道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中的日志记录级别。。。