首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用参数来设置组件的单元属性吗?

可以使用参数来设置组件的单元属性吗?
EN

Stack Overflow用户
提问于 2019-05-15 17:20:54
回答 1查看 114关注 0票数 3

到目前为止,使用WolframSystemModeler4.3和5.1的最小示例编译时不会出现错误:

代码语言:javascript
复制
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:非常量expression:c.hasUnit

(注意:这个错误是由WSMLink'WSMSimulate在内运行的SystemModeler12.0中给出的;这里询问上述模型的"InternalValues"属性,因为我现在还没有安装WSM12.0)。

在“OpenModelica OMEdit v. 1.13.2 (64位)”中,试图模拟上述模型表明:

SimCodeUtil.mo: 8492:9-8492:218]:内部错误意外表达式(应该更早地处理,可能在前端。Unit/displayUnit表达式不是字符串文本: c.hasUnit

因此,似乎要设置单元属性,我不能使用具有参数可变性的变量?为什么编译器在为运行时编译时不能硬连接单元(毕竟给定的模型将在WSM 4.3和5.1中没有任何错误地运行)?

编辑:从对我一个老问题的回答中,我认为至少可以使用最终的参数来设置单元属性。使修改成为最终结果(例如,c( final hasUnit = "myUnit" )不能解决问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-03 16:58:48

关于这个问题,来自Wolfram MathCore的人给了我一个MathCore:

您是正确的,因为它不违反规范,尽管使其成为常量更有意义,因为您将使所有静态单元检查无效,如果允许您在构建模拟之后更改单元。我们就这个规范(Modelica规范问题# 2362)提出了一个问题。

因此,MatheCore在提出他们已经实现的Modelica规范更改方面有点超前。;-)

注意:在Wolfram (12.0)中,使用注释Evaluate = true不会解决问题(cf )。上面@matth的评论。

作为一种变通方法,用于设置unit属性的变量应该具有常量可变性,但是可以通过用户对话框中包含的变量使用annotation(Dialog(group = "GroupName"))进行交互更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56154630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档