两个模型通过(空)可扩展连接器连接。
两者之一,在可扩展连接器和parameter
变量之间建立连接。
我没想到有任何问题。相反,我遇到了一些问题:
[bus_param_out]: Failed to instantiate equation connect(controlBus.num, numberPar);
Translation Error: Error occurred while flattening model bus_param
Connect does not refer to connectors in connect(bus_in.controlBus.num, bus_in.num);
但是bus_in.num
是Real
,Modelica规范说
可扩展连接器中的所有组件都被视为连接器实例,即使它们没有这样声明也是如此。可以连接到例如一个实数变量]。
我在做什么错?我想念什么吗?
我的最终目标是将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;
model bus_param_out
parameter Real numberPar = 3.0;
bus controlBus;
equation
connect(controlBus.num, numberPar);
end bus_param_out;
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;
答案 0 :(得分:2)
您可以使用
library(purrr)
walk(as.vector(paste0("D:/SPY_data/", d$filing_date_year)), dir.create)
walk2(d$href.y,
paste(d$filing_date_year, d$CIKAccNumFileDate_web_extension,
sep = "/"),
function(x, y) {
download.file(x,
destfile = paste0("D:/SPY_data/", y),
quiet = FALSE)
})
声明可在connect语句中使用的Real。
编辑: 据我所知,不可能将参数连接到连接器。 Dymola将产生错误:
连接不指连接中的连接器
官方方法是使用Modelica.Blocks.Interfaces.RealOutput num
,它等效于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;
一次。其他所有内容都会导致错误。
尝试使用图形界面连接所有内容,这可能会清除一切。
您可以在connect外部使用可扩展连接器,如下所示:
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;
将导致以下错误:
定义方程式的可变性:number_of_bus = controlBus.num;高于声明的可变性 变量。
因为连接器是随时间变化的并且参数是常数。
答案 1 :(得分:2)
f.wue已经展示了如何向总线写入参数。 这篇文章还解释了如何在不增加可变性的情况下读取该值(因此它是一个参数)。
为简化用法,此处是演示包的完整代码,以演示如何在总线上读取和写入参数。 它可以在pedantic模式下与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;
请注意,实现远非简单易行。 为了克服以下限制,需要对一些辅助类进行一些调整: