两个模型通过一个(空的)可扩展连接器连接。其中之一是在可扩展连接器和parameter变量之间建立连接。
我没想到会有什么问题。相反,我有一些问题:
bus_in.num是一种Real和Modelica规范,表示可扩展连接器中的所有组件都被视为连接器实例,即使它们没有被声明为连接器实例,也就是可以连接到例如一个Real变量。我做错了什么?我是不是遗漏了什么?我的最终目标是将一个parameter变量链接到一个可扩展的连接器(例如,通知不同的车辆组件电池的数量),而不需要额外的冗余变量。这个是可能的吗?
测试代码如下:
发布于 2019-04-04 12:31:22
f.wue已经演示了如何向总线写入参数。此外,这篇文章还解释了如何在不增加可变性的情况下读取值(因此它仍然是一个参数)。
为了简化它的使用,下面是演示包的完整代码,演示如何在总线上读取和写入参数。它与Dymola 2019 FD01在踏板模式和OMEdit v1.13.2。
package ParmeterToBus
expandable connector bus
end bus;
model bus_param_out
parameter Real numberPar;
Modelica.Blocks.Sources.Constant helper(k=numberPar);
bus controlBus;
equation
connect(controlBus.number, helper.y);
end bus_param_out;
model bus_param_in
Modelica.Blocks.Interfaces.RealOutput buffer;
bus controlBus;
final parameter Real num(fixed=false); // users should not modify it, hence its final
initial equation
num = buffer;
equation
connect(buffer, controlBus.number);
end bus_param_in;
model example
bus_param_in bus_in;
bus_param_out bus_out(numberPar=7);
equation
connect(bus_in.controlBus, bus_out.controlBus);
end example;
end ParmeterToBus;请注意,实现远非简单明了。为了克服以下限制,一些调整和助手类是必要的:
发布于 2019-04-02 21:46:43
你可以用
Modelica.Blocks.Interfaces.RealOutput num若要声明可以在connect语句中使用的Real,请执行以下操作。
编辑:据我所知,不可能将参数连接到连接器。Dymola会产生错误:
连接不引用连接中的连接器。
官方的方法是使用Modelica.Blocks.Sources.Constant,这相当于RealOutput。您可以直接使用这样的参数:
model bus_param_out
parameter Real number = 3;
Modelica.Blocks.Sources.Constant num_con(k=number);
bus controlBus;
equation
connect(controlBus.num, num_con.y);
end bus_param_out;在使用可扩展连接器并连接这些连接器时,必须确保只设置一次bus.num。其他一切都会导致错误。
试着用图形界面连接所有的东西,这可能会把事情弄清楚。
可以使用连接外部的可扩展连接器,如下所示:
model bus_param_out
Real number_of_bus;
parameter Real number = 3;
Modelica.Blocks.Sources.Constant num_con(k=number);
bus controlBus;
equation
connect(controlBus.num, num_con.y);
number_of_bus = controlBus.num;
end bus_param_out;但是,试图声明parameter Real number_of_bus将导致以下错误:
定义方程的可变性: number_of_bus = controlBus.num;高于声明的变量的可变性。
因为连接器是时变的,参数是常数。
https://stackoverflow.com/questions/55476809
复制相似问题