Modelica 如何使字符串可执行?
我试图在Modelica中执行一个字符串。这个字符串将保存在一个变量中,以便在需要时可以更改它Modelica 如何使字符串可执行?,modelica,Modelica,我试图在Modelica中执行一个字符串。这个字符串将保存在一个变量中,以便在需要时可以更改它 function Test input String inComp="resistor.R:=2"; output String outComp; algorithm outComp:=inComp; end Test; 你能帮我吗 我用的是Dymola 我需要做的是以下几点 -从文本文件读取组件名称(或在执行函数时输入) -然后更改这些组件的参数。此代码是一个示例: func
function Test
input String inComp="resistor.R:=2";
output String outComp;
algorithm
outComp:=inComp;
end Test;
你能帮我吗
我用的是Dymola 我需要做的是以下几点 -从文本文件读取组件名称(或在执行函数时输入) -然后更改这些组件的参数。此代码是一个示例:
function Test
input String inComp="resistor"; //Entered by the user, or read from a text file
output Real result;
algorithm
inComp.R :=2 ; /*This is incorrect since it wouldn't understand that
I want to enter : resistor.R := 2; */
result := inComp.R ; //In order to view the result
end Test;
在Modelica中,您尝试执行的操作通常是不可能的。可能是一些工具有一个“反射API”,允许这样做(或者可能是一个内置函数,接受命令字符串并执行它),但肯定没有跨工具工作的通用API 如果您想在Dymola中使用不同的参数值运行一系列模拟,我可以建议至少三种不同的方法继续
- 使用DDE接口向Dymola发送命令。通过这种方式,您可以“以某种方式”(从Dymola外部)制定参数值,然后仅请求Dymola运行模拟。我不确定DDE接口有多丰富,因此我不确定它是否能满足您的需要(例如,获取结果)
- 编写一个脚本文件。这与编写函数略有不同,但在语法上几乎相同。例如,要使用多个不同的惯性值运行“耦合离合器”示例,可以执行以下操作(在命令窗口中):
- 使用一个函数(就像以前一样),但使用修饰符调用simulateModel,例如
- 使用内置函数
和simulateExtendedModel
,这两个函数实际上与上面的函数基本相同,但使用的方式更简洁(在Dymola命令窗口中键入simulateMultiExtendedModel
和document(“simulateExtendedModel”)
,以获取更多信息)document(“simulateMultiExtendedModel”)
好的,这应该给你一个开始。如果出于任何原因,这些都不起作用,只需使用您的任何附加要求更新问题。在Modelica中,您通常不可能尝试这样做。可能是一些工具有一个“反射API”,允许这样做(或者可能是一个内置函数,接受命令字符串并执行它),但肯定没有跨工具工作的通用API 如果您想在Dymola中使用不同的参数值运行一系列模拟,我可以建议至少三种不同的方法继续
- 使用DDE接口向Dymola发送命令。通过这种方式,您可以“以某种方式”(从Dymola外部)制定参数值,然后仅请求Dymola运行模拟。我不确定DDE接口有多丰富,因此我不确定它是否能满足您的需要(例如,获取结果)
- 编写一个脚本文件。这与编写函数略有不同,但在语法上几乎相同。例如,要使用多个不同的惯性值运行“耦合离合器”示例,可以执行以下操作(在命令窗口中):
- 使用一个函数(就像以前一样),但使用修饰符调用simulateModel,例如
- 使用内置函数
和simulateExtendedModel
,这两个函数实际上与上面的函数基本相同,但使用的方式更简洁(在Dymola命令窗口中键入simulateMultiExtendedModel
和document(“simulateExtendedModel”)
,以获取更多信息)document(“simulateMultiExtendedModel”)
好的,这应该给你一个开始。如果出于任何原因,这些都不起作用,只需使用您的任何附加要求更新问题。使用Perl等动态编写和执行某些脚本的不同选项。例如,可以用作模板引擎。我经常为LaTeX这样做。使用Perl等来动态编写和执行一些脚本的不同选项。例如,可以用作模板引擎。我经常为LaTeX这样做。Modelica是否具有与其他各种语言支持的eval()功能等效的功能?如果是这样,你可以用它。但是如果可以避免的话,请不要这样做。Modelica是否具有与其他各种语言支持的eval()功能等效的功能?如果是这样,你可以用它。但是如果你能避免的话,请不要这样做。 for j in {1.0, 1.1, 1.2, 1.5, 1.8} loop J1.J := j; simulateModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches", resultFile="CoupledClutches_"+String(j)); end for; function RunLoop algorithm for j in {1.0, 1.1, 1.2, 1.5, 1.8} loop simulateModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches(J1(J="+String(j)+"))", resultFile="CoupledClutches_"+String(j)); end for; end RunLoop;