基于Visual C++的舰船水消防系统仿真研究

2008-04-24 05:44邱金水,易祥烈,吴晓辉
中国舰船研究 2008年6期
关键词:消防泵消防栓舰船

1 引 言

鉴于舰船取得海水的方便性和供水的持续性,水消防系统是舰船最常用的也是最重要的灭火系统,是保障舰船生命力的重要系统。英美等国将水消防系统称为高压海水系统(HPSW)。如果消防系统的损伤导致系统不能有效地发挥作用甚至导致系统瘫痪,那将给舰艇生命力带来严重的危害。舰船水消防系统生命力仿真与评估主要是先对水消防系统进行仿真,分析其薄弱环节,可以对舰船水消防系统的设计进一步优化,有利于提高舰船生命力。同时,对水消防系统的仿真,可以很直观地指导日常消防训练,因此,加强舰船水消防系统仿真研究对于保障舰船生命力具有重要意义[1]。

舰船水消防系统仿真没有现成的仿真软件可以使用,Simulink是一个图形化的建模仿真工具[2],它能进行电子、电路、控制工程、信号处理等领域的仿真,具有建模方便灵活的特点,越来越广泛地被应用于控制系统的设计和仿真[3]。由于半物理仿真系统需要连接特定的硬件设备、定制控制软件等,这部分功能的实现对于Simulink来讲则显得能力不足,而这恰恰是Visual C++的强项。VC是可视化C++编程环境具有强大的硬件控制功能和灵活丰富的人机界面设计功能[4]。C++语言是一种应用非常广泛的面向对象的程序设计语言,使用它可以实现面向对象的编程。而Visual C++ Studio 2005编程环境作为一种非常高端的编程环境,融合各种编程环境的优点而成为一种编码效率非常高、界面非常友好、使用非常方便的环境[5]。本文尝试将Visual C++应用到舰船水消防系统的仿真研究中,收到良好的效果。

2 建立仿真模型

为了合理地建立舰船水消防系统仿真模型,在建模分析中必须做一些假设和简化处理。

假设海水是理想流体,根据伯努利方程:

P+ρV2/2+ρ·g·h=C

其中:P为水压,MPa;V为水的流速,m/s;ρ为水的密度(1 t /m3),g为重力加速度(取9.8 m/s2),C为常数。而在实际的水消防系统中,由于水压比ρ·g·h的值要大很多而可以忽略不计。由于各主消防水管截面大小都相同,各支管的截面大小都相同,根据伯努利方程可得以下推论:任意被测点只要与消防泵相连接,被测点的水压就与消防泵的水压相等;任意被测点只要与消防泵相连接,被测点的流量大小根据截面大小对消防泵的流量进行平分。

舰船水消防系统从原理上讲其实就是水系统,而水系统与电力系统有着原理上的相似性[6]。水消防系统的仿真通过用电力系统的仿真软件得以实现。用电力系统来实时仿真水消防系统,就必须同时用2套电力系统仿真。其中一套系统将消防泵视为电压源,用来观测消防栓上的水压;另一套将电流源视为消防泵,用来观测消防栓上的流量。做以下假设:

1) 消防泵用电压源或电流源代替,启动按钮用开关代替,海底门用接地代替,并将以上电气元件封装成XFB子系统[7];

图1 与消防泵等价的电路图

2) 消防栓用电阻代替,启动阀用开关代替,电阻另一端接地,将以上电气元件封装成XFS子系统;

图2 与消防栓等价的电路图

3) 消防水管用导线代替;

4) 隔离阀用开关代替;

5) 压力表用电压表代替,其一端接地,另一端接于被测点;

6) 流量计用电流表表示;

7) 破损假设:水管破损可用开关一端接地,另一端接于导线上,消防泵破损只要将电源开关打开,使其不能运转;

图3 与水管破损等价的电路图

8) 数据显示,如果是考虑流量,只要将电流源代替消防泵,电流表代替流量计即可;考虑工作压力,用电压源代替消防泵,电压表代替压力表即可[8]。

3 生成C++代码

RTW是一个基于Simulink的代码自动生成环境,它能直接从Simulink的模型中产生优化的、可移植的和个性化的代码[9]。RTW支持多种目标,对于VC而言有三种目标可以选择:通用实时(GRT)目标、通用实时Malloc(GRTM)目标及嵌入式目标。嵌入式目标可按嵌入式代码格式生成C++代码,在运行速度、内存使用量和简化等方面都进行了优化,嵌入式代码采用静态内存分配方式。在此因仿真的需要选择了嵌入式目标来自动生成嵌入式代码。

根据第2节中的假设,就可建立2个电力系统的结构图,程序调试通过后,RTW就能把Simulink模型中的某些参数或信号设置为全局变量。模型自动生成的可执行代码在目标系统中运行时,可以方便地与Simulink模型交互,实现在线参数调整和信号通讯[10]。利用RTW这种功能,可把模型中需要调整、监测的参数或者信号设置为全局变量。具体操作方法是:在Simulink模型中选中需要设置的信号,点击右键选取Signal Properties...菜单,弹出图4所示的对话框,把信号设置为全局变量。

图4 信号属性设置图

RTW自动生成的代码分为两部分:一部分是模型代码;另一部分是代码运行界面(run-time interface)。这些代码被切分成很多源代码文件,为了管理这个庞大的项目,RTW还为其自动生成了一个make文件。用VC打开make文件并编译,然后将此项目中引用的所有源文件从Matlab安装目录中复制出来,并和模型代码共同组成仿真模型代码。模型代码中关键的函数构成了仿真模型代码同VC程序交互的接口[11],如图5所示。

图5 仿真运算模块接口函数

4 模型代码和VC程序的集成

模型代码同VC程序整合过程相对简单些。把仿真运算模块所有涉及的源文件添加到VC程序项目中,同时要注意:仿真模块的源文件添加到VC程序项目后默认应用预编译头文件选项,必须手工取消此项设置,否则编译出错。

半物理仿真软件一般由人机界面模块、数据采集模块、仿真运算模块、数据处理模块组成。水消防系统半物理仿真系统原理如图6所示。

图6 水消防系统半物理仿真系统原理框图

人机界面模块的实现:人机界面模块构成了VC程序的主线程,主要完成变量的实时显示、参数在线调整、控制参数设置和程序的运行控制等功能,其它模块都由它来调度本系统中涉及的实时变量,有消防泵压力、消防泵流量、消防栓压力、消防栓流量以及隔离阀状态和管系状态等。基于让界面更友好的考虑,分别设计了消防泵、消防栓、隔离阀、提示框、功能按钮等图元,充分利用面向对象方法的封装、继承等特点实现整个图元库,从而提高了软件系统的可修改性、可重用性和可扩展性。

仿真运算模块的实现:仿真运算模块在RTW转化的仿真模型代码基础上还要加入仿真同步控制,以满足仿真的实时性要求。多媒体定时器每隔2 ms就在其回调函数中调用模型代码接口函数rt_OneStep(模型单步运算),保证了整个仿真的向前推进,满足了系统实时性要求。仿真运算模块完成模型实时计算是整个系统的核心。

数据处理模块的实现:数据处理模块完成仿真数据的实时记录和定时保存功能。为了满足数据记录的实时性,仿真程序采用了多线程技术。一方面数据通过鼠标所指的器件提示对应属性,另一方面通过系统下面的编辑框显示各器件的属性,还有就是通过各器件的属性,统计消防栓可以正常工作的个数以及完好率。

5 结 论

本文结合实例详细介绍了一种基于Visual C++的舰船水消防系统仿真方法,该方法充分利用了Visual C++的强大优势。首先将水消防系统等价为电力系统,利用Simulink建立系统的仿真模型,然后通过RTW将仿真模型转化成可移植的嵌入式C++代码,最后利用Visual C++灵活的可定制性和强大的界面功能实现了完全独立运行的实时半物理仿真系统,此方法具有费用低、效率高的特点。

参考文献:

[1] 浦金云,金涛,邱金水,等.舰船生命力[M].北京:国防工业出版社,2008.

[2] 冯少冲,朱元昌,邸彦强,等.用Simulink实现模拟训练系统的解算引擎[J].电光与控制,2008,15(5):84-87.

[3] 管文良,康凤举,唐凯,等.Simulink与Windows程序间实时交互的研究[J].计算机仿真,2006(3):5-7.

[4] David Kruglinski.Visual C++.NET技术内幕[M](第六版).北京:清华大学出版社,2004.

[5] 樊晓丹,孙应飞,李衍达.一种基于RTW的实时控制系统快速开发方法[J].清华大学学报:自然科学版,2003,43(7):895-898.

[6] 李建平,石全,甘茂治.装备战场损伤抢修理论与应用[M].北京:兵器工业出版社,2000.

[7] 曹冬华,浦金云.虚拟现实技术在船舶火灾领域的应用[J].船海工程,2005,10(5):8-10.

[8] 丛北华,廖光煊,韦亚星.计算机模拟在火灾科学与工程研究中的应用[J].防灾减灾工程学报,2003,23(2):63-69.

[9] 李长文,赵长禄,张付军,等.基于Matlab/Simulink及RTW的柴油机瞬态建模与仿真[J].北京理工大学学报,2004,24(7):579-582.

[10] 冯磊,姚新宇.利用C-API的基于RTW实时仿真系统在线调参[J].兵工自动化,2006,25(1):87-88.

[11] 王先泽,刘志勤,陈怀民,等.基于RTW ERT/VxWorks的实时仿真方法实现[J].计算机技术与发展,2008,18(2):209-212.

猜你喜欢
消防泵消防栓舰船
舰船通信中的噪声消除研究
消防泵标准解析及低比转速消防泵设计思路探讨
基于PLC消防泵自动巡检系统的设计与实现
舰船测风传感器安装位置数值仿真
超高消防栓(大家拍世界)
基于SOLAS 74公约的消防泵配置分析
依据规范的货船消防泵设计和布置
舰船腐蚀预防与控制系统工程
一种消防栓
台日舰船对峙内幕曝光