本文最后更新于 2024-11-03,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。

title: 单元模块开发入门3
top_img: false
tags:
  - CAPE-OPEN
categories:
  - 化工流程模拟开发
cover: '/upload/cdn5files/202401281945116.png'
abbrlink: 2bfc8469
date: 2024-01-28 20:17:00
copyright:
comments:

前言

在单元模块开发入门篇1和2里,我们主要实现了单元模块的注册、端口的创建与流股的连接

本文着重的讲述一下单元模块计算方法的实现

获取流股信息

在前文中我们说过,单元模块获取物流对象的信息实际上是什么,是获取流股的热力学接口,那么我们再看一下热力学的接口图:

在热力学部分的接口中 ICapeThermoMaterial 接口就是主要负责获取和连接物流对象中的各个信息,那么我们也是使用这个接口来调取流股

实际上单元模块的流股端口是不止一个的,但我们为了学习和方便理解,定义了我们这个单元模块中只有一进一出,那么调取流股就很简单

实际上多个端口的时候就是按照端口的数量去获取,也就是下方代码的 getInlet(1)getInlet(2) 等,出口流股也类似

MyBlockPortsArray.h 文件中:

下面这个 getOutlet() 函数内应该是port2哈,这里我忘了改了

我们还需要修改 BlockPort.h 文件中获取物流对象的方法:

这里原本是通过 IDispatch 指针来获取的,我们更改为 IID_ICapeThermoMaterial 方法

紧接着在文件头部实现获取物流对象的函数,同时更改我们物流对象的类型:

这样我们就完成了物流对象的暴露与调用,紧接着来实现计算部分

计算实现

返回到 MyBlock.h 文件中,开始写 ICapeUnit 接口的 Calculate 部分:

这里看起来很复杂,实际上就是各种类型之间的转换而已

实际上我们这里只是举了一个调用入口流股总流量的例子

点击运行之后会有一个弹窗显示我们当前入口流股的一个总流量,如图所示:

我们虽然写了获取port2的物理对象,但是实际上并没有返回给出口流股,所以只是实现了一个调用流股流量的一个方法,这算是一个抛砖引玉,后面需要自己去写相对应的一些算法

需要注意的是:

我们这里使用的获取物流对象的这个方法 ICapeThermoMaterial 是CAPE-OPEN1.1版本的接口,但是部分模拟软件的标准很可能是1.0版本,并不兼容该接口

结语

没想到单元模块开发入门篇就这么草草结束了,奈何本人实属技术有限,很多东西我都没有琢磨透,但是希望这只是个灯塔(博主如此自恋的想到),能够引发更多的、技术比我牛逼的、天赋比我好的人去做这件事,希望国产模拟软件能够越来越好,越来越强!

当然也希望我自己在熟悉之后能继续完善入门篇,那么,拜拜~

源码地址在《单元模块开发入门实例Heater》中