Modelica 在模拟过程中,如何重新定义或更改Dymola中预定义参数的值?

Modelica 在模拟过程中,如何重新定义或更改Dymola中预定义参数的值?,modelica,dymola,Modelica,Dymola,我在迪莫拉做模型。我把这个模型的质量定义为一个参数,因为它会被转换成其他的模,并被调用。但在模拟过程中,质量应在不同的时间间隔内发生变化。例如,在前100秒内,质量应保持在500kg,在100至200秒内,乘客将进入,因此应计算新质量,包括乘客的质量。但是已经证明,这个问题在结构上是奇异的,因为参数值被赋予了两次。有人能给点建议来解决这个问题吗?非常感谢 Modelica参数是由一个事实定义的,即它们不会随时间而改变。因此,您需要停止模拟,更改参数并重新启动模拟。请参阅另一个。根据您的描述,我不

我在迪莫拉做模型。我把这个模型的质量定义为一个参数,因为它会被转换成其他的模,并被调用。但在模拟过程中,质量应在不同的时间间隔内发生变化。例如,在前100秒内,质量应保持在500kg,在100至200秒内,乘客将进入,因此应计算新质量,包括乘客的质量。但是已经证明,这个问题在结构上是奇异的,因为参数值被赋予了两次。有人能给点建议来解决这个问题吗?非常感谢

Modelica参数是由一个事实定义的,即它们不会随时间而改变。因此,您需要停止模拟,更改参数并重新启动模拟。请参阅另一个。根据您的描述,我不希望使用这种可能性,因为您的变量似乎是设计来随时间变化的

一个更好的选择似乎是将质量定义为一个变量。如果完成此操作,您可以:

使用接口将此变量从一个模型传输到其他模型。根据使用变量的类的数量,这可能有点乏味。 对于这个用例,使用内部/外部基本全局变量是一个可行的概念。此概念在多体库世界模型中使用。
对于这两种解决方案,您必须修改原始质量模型,因为m必须是一个变量,而不是一个质量。

Modelica参数由一个事实定义,即它们不会随时间变化。因此,您需要停止模拟,更改参数并重新启动模拟。请参阅另一个。根据您的描述,我不希望使用这种可能性,因为您的变量似乎是设计来随时间变化的

一个更好的选择似乎是将质量定义为一个变量。如果完成此操作,您可以:

使用接口将此变量从一个模型传输到其他模型。根据使用变量的类的数量,这可能有点乏味。 对于这个用例,使用内部/外部基本全局变量是一个可行的概念。此概念在多体库世界模型中使用。
使用这两种解决方案,您必须修改原始质量模型,因为m必须是一个变量,而不是一个质量。

如果您将部件的质量定义为一个输入,而不是一个参数,那么您可以在模拟过程中通过分配(例如)时间表的输出对其进行更改。比如说

model Component
  input Modelica.SIunits.Mass mass "Passenger dependent mass";
equation
...
end Component;

model systemModel
  TimeTable timeTable;
  Component component(mass=timeTable.y);
  OtherComponent otherComponent(mass=component.mass);
equation
  ...
end systemModel;
请注意,使用质量的其他部件也必须将其内部质量“参数”定义为输入,以允许比参数更高的可变性

致意
Rene Just Nielsen

如果将部件的质量定义为输入而不是参数,则可以在模拟过程中通过指定(例如)时间表的输出对其进行更改。比如说

model Component
  input Modelica.SIunits.Mass mass "Passenger dependent mass";
equation
...
end Component;

model systemModel
  TimeTable timeTable;
  Component component(mass=timeTable.y);
  OtherComponent otherComponent(mass=component.mass);
equation
  ...
end systemModel;
请注意,使用质量的其他部件也必须将其内部质量“参数”定义为输入,以允许比参数更高的可变性

致意
Rene Just Nielsen

我会尝试一下,非常感谢你提供的有用提示。我会尝试一下,非常感谢你提供的有用提示。非常感谢你的建议。关于这个解决方案,我还有一个问题。将其他模块中的所有质量设置为输入是没有问题的。但在一个模块中,我必须在限制器中使用质量,limiter.umax只能接受参数或常数。我必须建立一个新的模块来代替限制器吗?或者我可以继续使用限制器块吗?非常感谢,您将不得不使用另一种类型的限制器。例如,Modelica.Blocks.Nonal.VariableLimitor,其中uMax和uMin被替换为输入。非常感谢。我已经接近我的目标了。对不起,我想我还有最后一个问题要问。我在力学中直接使用了来自多体的体型,m的定义是一个参数。你对这个问题有什么建议吗?非常感谢您提供的有用提示,祝您度过愉快的一天。幸运的是,m是直接在BodyShape中定义的,而不是在BodyShape的一些基本类中定义的。您只需在自己的库中复制BodyShape,并将m重新定义为输入而不是参数。非常感谢您的建议。关于这个解决方案,我还有一个问题。将其他模块中的所有质量设置为输入是没有问题的。但在一个模块中,我必须在限制器中使用质量,limiter.umax只能接受参数或常数。我必须建立一个新的模块来代替限制器吗?或者我可以继续使用限制器块吗?非常感谢,您将不得不使用另一种类型的限制器。例如,Modelica.Blocks.Nonal.VariableLimitor,其中uMax和uMin被替换为输入。非常感谢。我已经接近我的目标了。对不起,我想我还有最后一个问题要问我的模特莉 ng。我在力学中直接使用了来自多体的体型,m的定义是一个参数。你对这个问题有什么建议吗?非常感谢您提供的有用提示,祝您度过愉快的一天。幸运的是,m是直接在BodyShape中定义的,而不是在BodyShape的一些基本类中定义的。您只需在自己的库中复制BodyShape,并将m重新定义为输入而不是参数。