You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Modelica表格调用问题:可视化界面修改初始值不生效

问题:Modelica中如何通过可视化界面的record表格修改部件初始值?

问题背景

编写Modelica数学模型时,通过record封装初始数据以提升可读性,但在总界面修改record实例的参数后,部件数据无变化,需要实现通过可视化界面的表格直接修改所有部件的初始值。

初始数据表代码(initialnumber包)

package initialnumber

  record constantnumber
    parameter  Modelica.Units.SI.Temperature Tair=10+273.15
                                                "环境温度";
    parameter Modelica.Units.SI.MassFlowRate W0_8=632207/3600
      "设计工况下第八级组入口蒸汽流量";
    parameter Modelica.Units.SI.Diameter Din=0.024 "管内径";
  end constantnumber;

  record startnumber
    Modelica.Units.SI.Mass Ms(start=195)
                                        "蒸汽质量";
    Modelica.Units.SI.Mass Ml(start=91000)
                                          "水质量";
  end startnumber;
end initialnumber;

总界面模型代码(A_03块)

block A_03
  A_QT a_QT annotation (Placement(transformation(extent={{98,30},{118,50}})));
  Deaerator.dea deaerator;
  initialnumber.constantnumber constantnumber(N=130);
  initialnumber.startnumber startnumber;
equation 
   connect(a_IP2_1.IP2_smallturbine, a_smallturbine.smallturbine_rukou);
   connect(a_nqq.shushui, LP7.outlet2);
   connect(a_IP2_1.IP2_CQ, deaerator.Dea_CQ);
end A_03;

解决方法

核心问题是部件未引用总界面中record实例的参数/变量,仅声明record实例但未建立传递关系,导致界面修改无法同步到部件。具体步骤:

  1. 修改部件模型,添加record类型的参数输入
    以Deaerator.dea为例,在部件内部添加对应record类型的参数,将原局部初始值替换为外部传入的record数据:

    block dea
      // 添加参数,接收外部传入的record实例
      parameter initialnumber.constantnumber constData;
      initialnumber.startnumber startData;
      
      // 部件内部使用record中的数据
      Modelica.Units.SI.Temperature T_env = constData.Tair;
      Modelica.Units.SI.Mass waterMass(start=startData.Ml);
      // ... 其他部件逻辑
    end dea;
    

    其他需要使用初始数据的部件(如A_QT)需做同样修改。

  2. 在总界面中传递record实例给部件
    修改A_03块代码,将声明的record实例作为参数传递给对应部件,建立数据关联:

    block A_03
      // 声明可在可视化界面修改的record实例
      initialnumber.constantnumber constData(N=130);
      initialnumber.startnumber startData;
      
      // 将record实例传递给部件
      Deaerator.dea deaerator(constData=constData, startData=startData);
      A_QT a_QT(constData=constData) annotation (Placement(transformation(extent={{98,30},{118,50}})));
    equation 
      connect(a_IP2_1.IP2_smallturbine, a_smallturbine.smallturbine_rukou);
      connect(a_nqq.shushui, LP7.outlet2);
      connect(a_IP2_1.IP2_CQ, deaerator.Dea_CQ);
    end A_03;
    
  3. 匹配record变量类型

    • constantnumber中的参数为编译时常量,部件需用parameter类型接收;
    • startnumber中的变量带start属性,部件内部变量需通过start绑定对应值。
  4. 可视化界面配置
    在Modelica工具(如Dymola、OpenModelica)中开启组件参数表格显示,选中总界面的constData和startData实例,即可在表格中直接修改参数,修改会同步到所有引用的部件。

内容的提问来源于stack exchange,提问作者white

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:05:03