编辑: 252276522 | 2014-03-02 |
11 期Vol.
20 No.
11 2008 年6月系统仿真学报Jun.,
2008 ?
2852 ? 协议.FLUENT 与MATLAB 数据传输原理如图
1 所示. 被控对象 控制器 FLUENT Matlab-Simulink y1 yn … … … … u1 un UDP 接发数据 UDP 接发数据 图1FLUENT 与MATLAB 数据传输原理图 FLUENT 软件采用基于完全非结构化网格的有限体积 法, 能够很好的模拟流体和传热分布参数模型的定常或非定 常问题, 它是用 C 语言开发的, 其常规功能不支持外部接口, 但为用户提供了自定义函数(UDF) ,为FLUENT 二次开发 提供了条件.应用 UDF 的可以实现定制模型边界条件、定 义材料属性、定义表面和体积反应率、添加输运方程中的源 项、自定义标量输运方程等功能,同时也支持 Windows 库 函数.因此,应用 FLUENT 的UDF 功能既可以定制和获取 模型的系统参数,又能够编写接收和发送数据的通信函数. Matlab 中的 Simulink 软件包集动态系统建模、仿真和 综合分析于一身, 可以处理的系统包括: 线性、 非线性系统;
离散、连续及混合系统;
单任务、多任务离散事件系统,广 泛地应用于控制领域.MATLAB 由C语言开发的,在Simulink 中提供了 S-函数功能,用户可以根据需要编写函 数, 经过编译生成 MEX 动态链接文件, 可以加载到 Simulink 模块中.因此,通信函数可以通过 S-函数编译加载到 Simulink 模块中. 控制器 S-Function FLUENT UDF 发送数据 UDF 接受数据 接受数据 S-Function 发送数据 分布参数模型 获取模型被控量 UDP通信协议 UDF 图2FLUENT 与MATLAB 接口实现示意图 图2是FLUENT 与MATLAB 接口实现示意图,分别在 S-函数和 UDF 中嵌入 UDP 网络通信函数,实现两个软件之 间的数据传输,在保证两软件实时同步运行的前提下,那么 就可以应用 Simulink 强大的系统仿真功能对 FLUENT 模拟的 分布参数模型进行控制, 即可实现对仿真模型闭环反馈控制.
2 基于 WinSock 网络编程的 FLUENT/MA TLAB 接口的实现 2.1 WinSock 数据报网络编程 WinSock(Windows Socket 的简称)是从 UNIX 系统的标 准TCP/IP 编程接口 Socket 演变而来, 采用 WinSock 实现应 用程序数据通信的关系图如图
3 所示. WinSock 网络通信实 现数据传输的基本单元是套接字,分为基于 TCP 协议的流 式套接字和基于 UDP 协议的数据报套接字.数据报套接字 比流式套接字模型简单,并且由于数据报套接字基于 UDP 协议,传输效率高. 应用程序1 应用程序2 网络编程界面,例如Windows Sockets 网络通信服务界面,例如TCP/IP 操作系统,例如Windows 物理通讯介质 图3应用程序与 WinSock 关系图 开发 MATLAB/FLUENT 数据通信接口,采用客户端与 服务器(C/S)模式,数据传输采用基于 UDP 协议的数据报 套接字. 图4为采用数据报套接字服务器与客户端的通讯时 序图,首先客户端和服务器端都要创建一个数据报套接字, 然后通过 bind 函数绑定分配的端口,将套接字与本地地址 相连.客户端和服务器端都可以使用 sendto 函数发送数据, 使用 recvfrom 函数接受数据, 完成数据报的传递. 发送数据 时,发送方除指定本地套接字号外,还需指定接受方的套接 字号,从而在数据发送过程中建立全相关[12,13] . socket()建立数据包套 接字,返回套接字号s socket()建立数据包套 接字,返回套接字号 bind()将套接字号s与 本地地址相连 recvform()/send()在套 接字号s上读写数据 closesocket()关闭套接 字s,服务结束 bind()将套接字号s与 本地地址相连 recvform()/send()在套 接字号s上读写数据 closesocket()关闭套接 字s,结束对话 服务器端 客户端 服务请求/应答 图4无连接套接字应用程序时序图 由于默认情况下 recvfrom 函数处于阻塞模式, 在接受到 数据前, 程序将不会向下执行[14] , 这样就使得客户端与服务 器端能够实时同步工作, 满足了 FLUENT 与MATLAB 在闭 环反馈过程中实时同步运行. 2.2 FLUENT 客户端的实现 UDF 分为解释型和编译型,解释型不具备标准 C 编译 器的所有功能,而编译型比解释型运行快,并且支持任何 ANSI-compliant C 编译器,不存在 C 语言上的限制,因此使 FLUENT UDP 接发数据 UDP 接发数据 控制器 Matlab-Simulink 被控对象 u1 un y1 yn 控制器 发送数据 接受数据 分布参数模型 获取模型被控量 接受数据 发送数据 UDP 通信协议 FLUENT UDF UDF UDF S-Function S-Function 应用程序