编辑: 252276522 | 2014-03-02 |
1 应用程序
2 网络编程界面,例如 Windows Sockets 网络通信服务界面,例如 TCP/IP 操作系统,例如 Windows 物理通讯介质 服务器端 客户端 Socket()建立数据包套 接字,返回套接字号 s bind()将套接字号 s 与 本地地址相连 recvform()/send()在套 接字号 s 上读写数据 closesocket()关闭套接 字s,服务结束 Socket()建立数据包套 接字,返回套接字号 bind()将套接字号 s 与 本地地址相连 recvform()/send()在套 接字号 s 上读写数据 closesocket()关闭套接 字s,结束对话 服务请求/应答 第20 卷第
11 期Vol.
20 No.
11 2008年6月 鲍文, 等: 基于FLUENT/MATLAB接口的分布参数系统闭环控制仿真 Jun.,
2008 ?
2853 ? 用编译型 UDF 建立网络通信函数. 编译型 UDF 需要安装 C 编译器(例如 VC++6.0) ,一 旦编译好的 UDF 库文件在 FLUENT 链接运行后,与共享库 相关的东西会保存到 case 文件中, 那么只要读取 case 文件, 编译的库文件会自动链接到 FLUENT 处理过程.编译型 UDF 要在 FLUENT 安装目录下建立编译 UDF 库目录结构, 如图
5 所示,编写好的源码放在 src 文件夹下,把makefile 和user_nt.udf 两个文件复制到相应版本的目录下, 用文本文 件编译 user_nt.udf 文件,设置 SOURCES 为编译好的用户 自定义函数.在MS-DOS 命令提示窗口,键入 nmake 建立 目录,即可通过 UDF 面板进行链接. 图5编译 UDF 建立库目录示意图(Windows) 创建绑定完成 UDF宏获取取 FLUENT模型被控量 向服务端发送数 据,并等待接收 定义变量 套结字的创建与绑定 Simulink接收数据 接收数据 通过UDF宏赋值到 控制边界 接收完成 控制器 Simulink发送数据 FLUENT迭代计算 求解连续、动量和 能量控制方程 循环次数 释放套结字 迭代结束 终止程序 终止程序 MATLAB服务端 NO NO NO 程序开始 图6UDF 通信程序流程图 UDF 函数的编写具有规定的格式,程序前要包含 udf.h 头文件,通过 UDF 规定的宏命令读写模型参数.WinSock 通信函数嵌入在 UDF 中,需包含 stdafx.h、winsock.h、 windows.h、stdio.h、stdlib.h 几个头文件,UDF 通信程序流 程如图
6 所示,基本步骤为: (1) 首先要定义变量,创建套接字并根据指定的端口填 充本地地址,然后绑定套接字,验证是否与服务器端建立关 联,从而判断程序是否向下进行. (2) 在创建和绑定套接字无误后, 通过 UDF 特定的宏 命令提取 FLUENT 模型的控制参数变量,利用宏命令可 以获取位置坐标、温度、压力、速度等参数及其不同方向 的梯度,在本文的实例中用到,thread_loop_f( )、begin_c _loop( )和C_T( )三个宏函数,其中 thread_loop_f( )、 begin_c_loop( )作用是循环单元面和控制体,用C_T( )获 取单元面的温度. (3) 将获取的变量数据发送到指定的服务器端口,发送 数据后, 通信函数处于阻塞状态, FLUENT 迭代计算不会向 下运行,直到接受到 MATLAB 发送的数据. (4) 发送到 Simulink 接收端的数据, 与目标值比较, 经 控制器调节,输出量由 Simulink 发送端向 FLUENT 接收端 口发送,并判定是否接收到数据. (5) 在确认接受无误后, 通过 UDF 宏赋值到模型边界或 其它模型属性,例如反应速率、材料特性等.本文实例中用 到F_PROFILE( )宏函数把接收到的数据赋值为进口边界的 温度. (6) 判断是否达到迭代次数, 如果迭代完成则跳出循环, 并释放套接字;
否则进入 FLUENT 流场求解计算,然后再 调用 UDF 通信函数. 2.3 MATLAB-Simulink 服务端的实现 Simulink 为用户提供了 S-函数模块, 可以根据不同的 需要编写外部接口程序.图7为S-函数的运行流程图, 依照 S-函数的编写格式,把套接字的初始化和绑定程序 编写在 S-函........