基于Visual C++6.0的船舶电站实时监控系统研究

2008-04-24 05:06关红兵,黄温赟,史延兴
中国舰船研究 2008年4期
关键词:发电机组串口电站

1 引 言

Visual C++6.0[1]是Microsoft公司Visual Studio系列的一个重要产品,是一个功能强大的信息可视化开发工具。它的开发环境包含文本编辑器(Text Editor)、资源编辑器(Resource Editor)、源代码浏览器(SourceCode Browser)、C/C++编译器(C/C++ Compiler)、调试器(Debugger)、连接器(Linker)及MSDN在线帮助系统等。

为了帮助编程者处理通常复杂而又繁琐的有关Windows的工作,Visual C++ 6.0设计了一套类库(MFC ) , 把软件开发平台SDK (SoftwareDevelopment Kit)中的大多数内容封装成为各种类。有了MFC,编程人员可以充分发挥C++的优势,专注于程序的特殊部分,不需重复处理Windows必须处理的复杂工作,提高了编程效率和代码效率。MFC应用程序向导(AppWizard)和MFC类向导(ClassWizard)是Visual C++ 6.0最重要的两大开发工具。Visual C++ 6.0应用程序的创建过程如图1所示。

图1 Visual C++ 6.0应用程序创建过程

Visual C++ 6.0作为一种通用程序开发系统,以其强大的数据采集、数据处理、数据分析功能在现代测控领域中得到了广泛的应用。在对硬件的支持方面,Visual C++ 6.0集成了与RS-232/485、PLC和插入式数字采集设备等进行数据通信的全部功能,利用Windows技术的优点,在Visual C++ 6.0开发平台下,设计了船舶电站实时监控系统。

2 系统构成

船舶电站[2]实时监控系统由PC机、单片机和RS-485总线组成两级控制模式,软件协议采用支持RS-485网络的Modbus ASCII[3]协议,数据存储用ACCESS 2003[4]数据库(图2)。

图2 船舶电站柴油发电机组监控系统结构框图

由于工控机(安装在集控室)具有实时性好、可靠性高、输入/输出能力和网络支持能力强等普通计算机不可比拟的优点,故选用工控机作为上级监督计算机控制系统SCC(Supervisory Computer Control),完成对柴油发电机组运行状态实时监控和运行参数的在线设置,遥控柴油发电机组启动/停止。选用“凌阳”16位单片机u′nSPTM(安装在主配电板内)作为底层控制级,与柴油发电机组这一控制对象一起组成直接数字控制系统DDC( Direct Digital Control),完成对柴油发电机组的启动、停机、怠速运行、故障报警、参数检测等多种控制。利用RS-485通信网络可支持多达256个接收器或发送器的特点,使用1台PC机运用Visual C++ 6.0软件即可监控多套柴油发电机组的运行。单片机具有价格便宜、编程容易、接口简单等优点,但单片机不具备人机接口界面。为了易于操作并实现远距离监控船舶电站的运行状态,本系统在Visual C++ 6.0集成环境下开发界面友好的监控软件[5],通过单片机的硬件接口,以实时通信的方式,实现工控机与单片机之间的通信,完成对船舶电站的实时监控和相关操作。

3 实时监控系统的实现

3.1 系统模块的划分

软件程序主要完成数据采集、分析、显示、存储、管理以及打印等功能,所以模块划分为串口通信模块、预报警模块、数据打印模块、数据库模块等。各模块关系如图3所示,其中箭头表示数据流向。

图3 软件系统模块结构示意图

3.2 系统模块软件实现关系

系统模块软件实现关系如图4所示,其中宽箭头表示数据流向。

图4 系统模块实现关系

3.3 串口类通信

串口通信使用编写的类CSerialPort,将SerialPort.h SerialPort.cpp两个类文件复制到工程文件夹中,用Project-Add to Project-Files命令将上述两个文件加入工程,并在MinitorSystem.h中将头文件SerialPort.h说明:#include“SerialPort.h”。CSerialPort类在串口数据到达时,将数据发送到程序主窗口。

使用函数关键代码如下:

1) 串口初始化函数InitPort ( );

2) 启动串口通信监测线程函数StartMonitoring()来启动串口;

3) 接收字符函数ReceiveChar(),被CommThread()线程调用发送消息等待主线程来处理接收字符;

4) 通过串口发送字符/写串口函数WriteToPort( ),调用WriteChar()完成发送任务,和ReceiveChar()处理过程基本一致;

5) 停止监测线程函数StopMonitoring();

6) 关闭串口函数C1osePort ( )。

相应的串口消息处理函数,要手动添加消息处理函数,步骤如下:

( 1) .h文件中添加:

// Generated message map functions

//{{AFX_MSG(MinitorSystemDlg)

afx_msg LONG OnComm(WPARAM ch, LPARAM port);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

( 2) cpp文件中添加:

BEGIN_ MESSAGE_ MAP(MinitorSystemDlg, CDialog)

//{{AFX_MSG_MAP (MinitorSystemDlg)

ON_ MESSAGE(WM_COMM_RXCHAR, OnComm)

//}}AFX_MSG_MAP

END_ MESSAGE_ MAP()

(3) LONG MinitorSystemDlg::OnComm

(WPARAM ch, LPARAM port)

{

/ /接收字符

}

3.4 数据库模块

ADO(ActiveX Data Object)ActiveX数据对象,是基于OLE DB的访问接口,它是面向对象的OLE DB技术。ADO对ACCESS数据库开发的基本流程及它的基本步骤如下:

1) 初始化COM库

CoInitialize(NULL)初始化OLE/COM库环境;引入ADO库定义文件:#import "c:program filescommon filessystemadomsado15.dll" o_namespace ename ("EOF", "adoEOF");#import包含后就可以用3个智能指针:_ConnectionPtr、_RecordsetPtr和_CommandPtr了;

2) 用Connection对象连接数据库;

3) 利用建立好的连接,利用Recordset对象执行SQL命令,取得结果记录集进行查询、处理;

4) 使用完毕后关闭连接释放对象。

联机调试的数据库显示实现效果如图5所示。

图5 历史记录显示

3.5 报警模块

程序采用声光报警,使用多媒体实现声音报警。当满足报警所需要的条件时,界面上小灯由绿变红,并且发出报警声,完成报警功能。

在用VC++ 6. 0开发多媒体应用时,必须在所有要用到多媒体函数的源程序中,包含MMSYSTEM.H头文件,并且该文件位置应在Windows.H头文件的后面。另外,在连接程序时要用到WINMM.LIB引入库,在Project→Settings对话框的Link页的Object/library modusles栏中加入WINMM.LIB,或者在源程序中加入:# pragma comment (lib, “winmm.lib”)。

本文采用把声音文件加入到资源中,然后从资源中播放声音的方式。VC++ 6.0支持WAVE型资源,并把声音文件导入到WAVE资源中,设置声音资源的ID为IDR_ WARN。满足报警条件时,下面的调用会输出报警声音:

P1aySound((LPCTSTR)IDR_WARN,AfxGetlnstanceHandle(),SND_RESOURC|SND_ASYNC)

联机调试的实现效果如图6所示。

图6 在线预警、报警效果显示图

3.6 打印报表

在程序中操作Word文档,需要先在程序中启动Word应用程序,然后获得Word文档管理对象(Documents),通过文档管理对象添加文档对象(_document),由文档对象获得选区(Range),再通过选区向文档中添加表格(Tables),最后通过(Selection)移动光标位置并向表格中插入数据。

由于记录数据表数据项比较多,所以要进行横向预览。联机调试的运行效果如图7所示。

图7 历史数据打印预览

4 结 语

基于VC++ 6.0的船舶电站实时监控系统在船舶电站实验室进行了实机调试,成功地实现了对2套船用柴油发电机组的现场监控和数据的相关处理,系统运行稳定、可靠,监控功能完善,界面友好,可视性强。

[1] 明日科技.Visual C++程序开发范例宝典[M].北京:人民邮电出版社,2007.

[2] 王焕文.舰船电力系统及自动装置[M].北京:科学出版社,2004.

[3] ODICON M.Inc.Modbus Protocol Reference Guide [M].

1996.

[4] 向中凡.Access2000实用操作与技巧[M].西安:西安电子科技大学出版社,2000.

[5] 杜鸿震. 基于VC 6.0的相继增压柴油机试验台监控系统软件设计[D].哈尔滨:哈尔滨工程大学,2006.

猜你喜欢
发电机组串口电站
煤气发电机组DEH控制系统的优化
发电机组环保在线与生产监控兼容装置的应用
三峡电站再创新高
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
内燃机发电机组应急冷却系统优化
基于EM9000工控板高性能双串口通信模型设计与实现
低影响开发(LID)在光伏电站中的应用
船舶电子设备串口数据的软件共享方法
基于Bladed与Matlab的风力发电机组控制器设计
CSerialPort 类分析及漏洞的修正