在Modelica中如何无需连线调用不同模块变量并汇总成本数据
Modelica全局指标统计方案解答
无连线取值实现可行性
完全可以实现,直接使用Modelica原生的inner/outer全局变量机制即可,无需额外连线:
- 先定义1个全局统计根模块,用
inner关键字修饰,内部预先声明所有需要统计的汇总变量(总CAPEX、总OPEX、总人工成本等) - 所有工业组件模块内部用
outer关键字声明引用该全局统计模块,组件初始化/计算时直接将自身的对应指标值累加到全局模块的汇总变量上 - 新增组件时无需调整统计模块逻辑,自动纳入统计,完美适配模块数量不固定的使用场景
向量输出方案疑问解答
如果你们因架构设计原因不使用inner/outer方案,你们提到的RealOutput向量方案的两个问题都有成熟解决方式:
1. 用RealOutput传递矩阵的方法
RealOutput本身支持多维数组定义,不需要限制为一维向量:
- 直接在组件内声明对应维度的输出端口即可,示例代码:
// 示例:输出3行3列的矩阵,行对应CAPEX/人工成本/维护成本三类指标,列对应乐观/估计/悲观三类场景 Modelica.Blocks.Interfaces.RealOutput cost_matrix[3,3];
- 若要兼容现有nout参数的一维向量设计,也可以将矩阵按行/列优先规则打平为一维向量传递,接收端用
Modelica.Math.Matrices.reshape函数还原为矩阵即可,不会丢失数据结构。
2. 单个模块完成多变量分别累加的方法
不需要使用多个MultiSum模块,自定义1个通用累加模块即可实现:
- 累加模块的输入端口设置为和上游输出匹配的维度,同时配置可变数量的输入端口(用未指定长度的维度声明实现,比如
input Real u[:,:,:],最后一个维度对应接入的组件数量) - 内部直接调用Modelica内置的
sum函数指定累加维度即可自动完成多变量并行汇总,比如输入是[指标数, 场景数, 组件数]的三维数组,调用sum(u, 3)即可直接输出[指标数, 场景数]的汇总结果,所有变量的累加在同一个模块内完成。
内容的提问来源于stack exchange,提问作者Julie Dutoit
相关产品推荐
相关产品推荐

