动机
Modelica 确实将测量单位(例如 SI 单位和非 SI 单位)存储为与变量相关的属性。以下是非 SI 单位的示例:
type Time_months = Real( quantity = "Time", unit = "mo", displayUnit = "months" )
因为对于经济学模型来说,以秒为单位给出比率是相当尴尬的,我想编写一个相当通用的单位转换函数,它允许转换时间单位。因此,理想情况下,转换为另一个时基的函数应该使用三个输入和一个输出:
input Real timeValue "the value of time to be converted";
input String timeBaseA "the time base for timeValue, e.g. \"mo\" ";
input String timeBaseB "the time base to convert to, e.g. \"yr\" ";
output Real convertedTimeValue "the result of the conversion";
问题
如果我们假设某个时间值的变量已经具有特定的单位属性(例如“mo”),那么在模型中使用该元信息是有意义的。
问题 1:如何在模型中访问单元等元信息?
理想情况下,以下内容会很棒:
String timeBaseA := timeValue.unit;
或者
String timeBaseA := getUnit( timeValue ) "some function to read unit information";
问题 2:如何在函数中分配单元等元信息?
在示例中,我们当然希望以正确的时间单位返回输出值。所以理想情况下,我们希望拥有:
output Real convertedTime( quantity = "Time", unit = strTimeBaseB )
不幸的是,input
由于可变性不同,使用 an 会产生错误:单位属性应该具有恒定可变性,但输入变量具有参数可变性。(使用一个函数——这很好——也因为同样的原因而失败。)