到目前为止,使用 Wolfram System Modeler 4.3 和 5.1 可以编译以下最小示例而不会出现错误:
model UnitErrorModel
MyComponent c( hasUnit = "myUnit" );
block MyComponent
parameter String hasUnit = "1";
output Real y( unit = hasUnit );
equation
y = 10;
end MyComponent;
end UnitErrorModel;
但是随着 WSM 12.0 的新版本(版本的跳跃是由于与 Wolfram 的旗舰 Mathematica 的当前版本保持一致),我收到一条错误消息:
内部错误:Codegen.getValueString:非常量表达式:c.hasUnit
(注意:该错误是WSMLink'WSMSimulate
在内部运行 System Modeler 12.0 的 Mathematica 12.0 中给出的;这里询问"InternalValues"
上述模型的属性,因为我现在还没有安装 WSM 12.0)。
尝试在 OpenModelica [OMEdit v. 1.13.2 (64-bit)] 中模拟上述模型显示:
SimCodeUtil.mo: 8492:9-8492:218]: Internal error Unexpected expression (应该更早处理,可能在前端。Unit/displayUnit 表达式不是字符串文字:c.hasUnit
所以似乎设置单位属性我不能使用具有参数可变性的变量?为什么会这样 - 毕竟编译器在编译运行时可以硬连线单元就足够了(毕竟给定的模型将在 WSM 4.3 和 5.1 中运行而没有任何错误)?
编辑:从我的一个较旧问题的答案中,我相信至少可以使用最终参数来设置单位属性。进行最终修改(例如c( final hasUnit = "myUnit" )
,不能解决问题。