Modelica 类型是否可以使用内部/外部全局设置并可替换? 问题描述
我希望在经济建模(如系统动力学)中使用非SI单位表示时间。当然,我可以先用几秒钟,然后使用Modelica 类型是否可以使用内部/外部全局设置并可替换? 问题描述,modelica,units-of-measurement,openmodelica,systemmodeler,Modelica,Units Of Measurement,Openmodelica,Systemmodeler,我希望在经济建模(如系统动力学)中使用非SI单位表示时间。当然,我可以先用几秒钟,然后使用displayUnit,但据我所知,在我主要使用的System Modeler中没有很好的方法来修改displayUnit的时间 因此,在编写一个库时,我希望用户选择一个名为ModelTime的全局类型,理想情况下在某个顶级类中将其声明为内部和可替换。然后,模型中的任何组件都可以使用全局类型来一致地处理任何与时间相关的变量 最小示例 下面的示例显示了我希望如何实现这一点 包单位声明了两种非国际单位制单位类
displayUnit
,但据我所知,在我主要使用的System Modeler中没有很好的方法来修改displayUnit的时间
因此,在编写一个库时,我希望用户选择一个名为ModelTime
的全局类型
,理想情况下在某个顶级类中将其声明为内部
和可替换
。然后,模型中的任何组件都可以使用全局类型
来一致地处理任何与时间相关的变量
最小示例
下面的示例显示了我希望如何实现这一点
声明了两种非国际单位制单位类型(包单位
,时间年
)时间月
包含一个部分模型类包接口
,它将是使用库编写的任何模型的顶级作用域。它应该提供GenericSimulationModel
作为类型ModelTime
和内部
类可替换
定义了一个简单的包组件
类,该类通过块
定义使用外部
来定义其ModelTime
,该简单块以全局选择的时间单位显示输出y
时间
将所有这些联系在一起,以提供一个示例,说明任何使用库的模型应该如何工作模型示例
model MinimalExample
package Units
type Time_year = Real(final quantity = "Time", final unit = "yr");
type Time_month = Real(final quantity = "Time", final unit = "mo");
end Units;
package Interfaces
partial model GenericSimulationModel "Top-level model scope providing global vars"
inner replaceable type ModelTime = Years "Set to : Months, Years";
protected
type Years = Units.Time_year;
type Months = Units.Time_month;
end GenericSimulationModel;
end Interfaces;
package Components
block ComponentUsingTime
outer type ModelTime = MinimalExample.Units.Time_year;
output ModelTime y;
equation
y = time;
end ComponentUsingTime;
end Components;
model Example
extends Interfaces.GenericSimulationModel(
redeclare replaceable type ModelTime = Months
);
Components.ComponentUsingTime c;
end Example;
equation
end MinimalExample;
虽然在System Modeler和OpenModelica中编译的所有内容都没有出错,但不幸的是,它没有成功:在上面给出的示例模型中,组件c中没有使用重新声明的类型
我能做些什么来实现我想做的事情?我从Wolfram MathCore的某位人员(系统建模器的开发人员)那里收到了一些建议:
您所看到的MinimalExample.example和MinimalLibrary.example的行为都是bug,从我所看到的情况来看,它们应该可以工作,我已经将它们转发给了正在处理这些问题的开发人员
我从Wolfram MathCore(系统建模器的开发人员)那里收到了一些:
您所看到的MinimalExample.example和MinimalLibrary.example的行为都是bug,从我所看到的情况来看,它们应该可以工作,我已经将它们转发给了正在处理这些问题的开发人员
我在Wolfram社区(cf.)上交叉发布了这个问题。OpenModelica允许通过在PLT视图中选择“模拟时间单位”来设置显示单位。这还不够吗?我在Wolfram社区(cf.)上交叉发布了这个问题。OpenModelica允许通过在PLT视图中选择“模拟时间单位”来设置显示单位。这还不够吗?