EnergyPlus与外部软件动态链接方式-Socket
一、引言
EnergyPlus是最通用的建筑及系统模拟软件,但是大部分人在使用的时候,只是利用EnergyPlus计算建筑负荷,或者复杂一点建个系统模拟能耗。一般并不需要了解其内部运行机制,将软件整体使用,搞明白模型参数即可。这样使用EnergyPlus只能被局限在其已有的功能,对于工程基本满足了。但是对于科研而言,局限于已有功能,很难有所创新突破。所以需要EnergyPlus和别的程序进行联合仿真,实现其自身没有的一些功能。
二、EnergyPlus与外部程序交换数据的三种方式
EnergyPlus与外部程序交换数据有三种方式(如下图):Ptolemy Server、Functional Mockup Unit Export、Functional Mockup Unit Import。
Functional Mockup Unit Export、 Functional Mockup Unit Import是一种标准输入输出,将复杂系统模块化,将系统分割为独立的部分,最后用标准输入输出接口拼接,可以有效降低复杂系统的设计难度。EnergyPlus整体也可以看作一个模块,然后与其他标准输入输出模块进行联合模拟。
Ptolemy Server为链接至BCVTB软件。BCVTB也是Lawrence Berkeley National Laboratory为EnergyPlus开发的辅助软件,用于和别的软件进行联合仿真,如MATLAB、TRNSYS、ESP-r、Python等软件。之所以BCVTB在EnergyPlus中的选项是 Ptolemy Server,是因为其基于Ptolemy软件进行开发。
三、BCVTB和EnergyPlus具体是怎么实现联合仿真的呢?
BCVTB和EnergyPlus通过伯克利套接字(Berkeley sockets)交换数据。伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信。如果是用于一台计算机内部的通讯,则为应用程序间通讯,BCVTB和EnergyPlus就是一台电脑内的程序间通讯;不同电脑之间的通讯,常用的TCP/IP协议就是基于伯克利套接字,是互联网的基础技术之一。事实上只要牵扯到数据交换,基本上都是基于套接字编程。比如物联网比较火的MQTT协议,也是基于伯克利套接字进行开发。大多数编程语言都会提供伯克利套接字接口,如python就有socket库,无需从底层开始,只需要调用相关的接口即可。
一般服务器和客户端的建立和交换信息如下图所示。
首先建立socket,然后绑定端口(bind),然后进入监听模式(listen),监听来自客户端的请求。客户端也是使用socket()API建立客户端,然后发送请求,服务器端监听到请求后,便与之建立连接。
服务器端和客户端建立连接后,便开始交换数据。形象的说,交换数据如同打乒乓球。客户端首先发出信息,服务器端收到信息,经过处理,然后向客户端发出信息,客户端收到信息再向服务器端发出信息,如此循环往复直至结束。信息就像一个乒乓球,客户端和服务器端就像两个球拍,你打一下,我打一下。
说句实话,我的描述很苍白,也只能让你知道大概有这么个东西。想要真正的了解,还是需要认认真真读BCVTB官方文档。
FMU/FMI具体可以看:
http://bbs.gongkong.com/m/d/776179_1.htm?redistParent=0
BCVTB的官网链接为:
https://simulationresearch.lbl.gov/bcvtb/
Ptolemy官网:
https://ptolemy.berkeley.edu/