modelica - 在可扩展连接器中连接参数变量
问题描述
两个模型通过(空的)可扩展连接器连接。两者之一,在可扩展连接器和parameter
变量之间建立连接。
我没想到有任何问题。相反,我遇到了一些问题:
- OpenModelica 编译版本 2,但不编译版本 1
[bus_param_out]: Failed to instantiate equation connect(controlBus.num, numberPar); Translation Error: Error occurred while flattening model bus_param
- Dymola 不编译版本 1 或版本 2
但是Connect does not refer to connectors in connect(bus_in.controlBus.num, bus_in.num);
bus_in.num
是一个Real
和 Modelica 规格说可扩展连接器中的所有组件都被视为连接器实例,即使它们没有被声明为这样[即可以连接到例如 Real 变量]。
我究竟做错了什么?我错过了什么吗?我的最终目标是将parameter
变量链接到可扩展的连接器(例如,通知不同的车辆组件电池单元的数量,比如说),而不需要额外的冗余变量。这可能吗?
测试代码如下:
bus_param.mo
model bus_param bus_param_in bus_in; bus_param_out bus_out; equation connect(bus_in.controlBus, bus_out.controlBus); end bus_param_custom;
bus_param_in.mo
model bus_param_in Real num; bus controlBus; equation connect(controlBus.num, num); end bus_param_in;
- bus_param_out.mo - 版本 1
model bus_param_out parameter Real numberPar = 3.0; bus controlBus; equation connect(controlBus.num, numberPar); end bus_param_out;
- bus_param_out.mo - 版本 2
model bus_param_out parameter Real numberPar = 3.0; Real number; bus controlBus; equation number = numberPar; connect(controlBus.num, numberPar); end bus_param_out;
- 巴士网
expandable connector bus end bus;
解决方案
你可以使用
Modelica.Blocks.Interfaces.RealOutput num
声明一个可在连接语句中使用的 Real。
编辑: 据我所知,将参数连接到连接器是不可能的。Dymola 将产生错误:
Connect 不是指 connect 中的连接器
官方的方式是使用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
只设置一次。其他一切都会导致错误。
尝试用图形界面连接所有东西,这可能会让事情变得清晰。
您可以在 connect 之外使用可扩展连接器,如下所示:
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;高于变量声明的可变性。
因为连接器是时变的并且参数是常数。
推荐阅读
- java - 无法将 Spring Boot RestController 响应转换为 JSON:`No converter found for return value of type: class ...`
- php - 从 mysql 表中获取不同的行,这是特定于用户 ID 的最后一个条目
- python - wxPython - 可能带有复选框的组合框?
- javascript - 使用撇号将 Php 数组转换为 JavaScript 数组异常
- reactjs - 通过请求 fetch() 加载日期
- mysql - 在变量的帮助下使用 Arduino IDE 从节点 MCU 发送数据
- java - 发送 JSON 对象数组时遇到问题
- javascript - Codeigniter & AJAX - 关闭编辑模式时重置/清除模式表单
- ajax - 在外部 js 文件中使用会话
- java - 'public' 函数暴露了它的 'public/*package*/' 参数类型 SolarEdgeException