jan*_*ter 4 graphical-interaction modelica openmodelica
我尝试制作适用于不同平台的 Modelica 库代码。
我理解使用前缀“constant”是为了保护参数在编译后不被用户交互更改。如果您想允许更改,请使用前缀“参数”。
结构参数,例如水箱入口的数量,您可以自然地声明为
constant integer n_inlets = 1;
Run Code Online (Sandbox Code Playgroud)
当需要配置带有 n_inlets 的组件槽时,您可以编写代码
Tank tank(n_inlets=0);
Run Code Online (Sandbox Code Playgroud)
如果您决定水箱不应有任何入口。然后,编译后 n_inlets 被保护保持为 0,并且任何用户交互都不会改变它。
但是,如果你喜欢使用GUI来配置坦克,那么我认为你必须声明n_inlets作为参数,否则交互菜单将不会包含n_inlets。至少在 OpenModelica 中是这种情况,我猜其他 Modelica 实现中的 GUI 也是类似的。
配置完成后,我仍然希望保护 n_inlets 免受编译后后续用户交互的影响。有没有办法以这种方式编写代码?
对于 Modelica 3.7,这一点已得到澄清,您可以将其声明为可评估参数https://specation.modelica.org/master/class-predefined-types-and-declarations.html#component-variability
parameter integer n_inlets = 1 annotation(Evaluate=true);
Run Code Online (Sandbox Code Playgroud)
可评估的参数应该在翻译之前设置,但不能在翻译之后设置。(实际上,将其用于数组大小也将强制进行评估。)
即使在 Modelica 3.7 之前,它也可以工作,并表明意图。
补充:但是,如果n_inlets给出连接器数组的大小,您应该使用connectorSizing而不是https://specation.modelica.org/master/annotations.html#connector-sizing。该参数应在连接时自动更新,并且不会出现在参数对话框中。
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |