Modelica 类型是否可以使用内部/外部全局设置并可替换? 问题描述

Modelica 类型是否可以使用内部/外部全局设置并可替换? 问题描述,modelica,units-of-measurement,openmodelica,systemmodeler,Modelica,Units Of Measurement,Openmodelica,Systemmodeler,我希望在经济建模(如系统动力学)中使用非SI单位表示时间。当然,我可以先用几秒钟,然后使用displayUnit,但据我所知,在我主要使用的System Modeler中没有很好的方法来修改displayUnit的时间 因此,在编写一个库时,我希望用户选择一个名为ModelTime的全局类型,理想情况下在某个顶级类中将其声明为内部和可替换。然后,模型中的任何组件都可以使用全局类型来一致地处理任何与时间相关的变量 最小示例 下面的示例显示了我希望如何实现这一点 包单位声明了两种非国际单位制单位类

我希望在经济建模(如系统动力学)中使用非SI单位表示时间。当然,我可以先用几秒钟,然后使用
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视图中选择“模拟时间单位”来设置显示单位。这还不够吗?