来源:中国一卡通网 作者:马迅飞 王魁生 发布时间:2010-05-14 14:55:40 字体:[大 中 小]
摘 要:结合油库自动化建设的现状和需求,引入.NET 的架构和体系,设计并实现了一个基于.NET 平台的油库实时监控管理系统。提出了一种在.NET 平台下三层架构模式多线程方式开发安全监控管理系统的思路和方法。介绍了系统的结构和功能,对系统后台数据库设计和实现中的关键技术进行了论述。
引言
油库是储存和外输油品的重要场所。库区内储运的易燃、易爆物质以及生产设备数量较多,事故风险高,安全生产监控难度大。当前油库自动化水平还不高,表现在设备少功能单一传输方式落后等,面对日益激励的能源竞争环境,迫切要求油库提高效率、加快周转、加强安全管理,提高自动化监控和管理水平。
1 监控系统设计
整个系统采用基于.NET 架构在本地油库采用C /S 模式,远程管理机关使用B /S 模式。如果远程管理机关需要查看油库的实时数据,以B /S 的模式将数据传出,而油库的实时数据每天将以流水日志传入上机机关, 远程管理将这些数据保留。同传统的C /S 相比,B /S 系统界面友好,方便用户使用,软件的安装维护升级容易。
1.1 系统结构设计
整个系统的结构如图1 所示。包括3 大部分:数据采集模块,实时监控系统和数据管理系统。数据采集模块负责采集油库日常运行中的各类实时数据,包括油罐液位温度值、油气浓度报警值、周界报警门禁等信号。这些数据通过RS-485 硬件采集卡传入主控机,以进一步处理和存储。
1.2 主要功能
整个系统分为安全监控和信息管理两个部分,其中安全监控是指对整个油库业务进行实时跟踪, 是整个系统的核心部分。它包括以下功能模块:
①视频监控。油库有摄像头,对油库周围进行实时的监控反应在主控机上;
②周界报警。油库四周有报警电缆,当非法跨越踩踏时能提示并报警;
③门禁管理。需要发卡并操作门的开闭,并将记录显示保存;
④油罐液位监测。以图像数字等形式显示油罐当前液位并提示高低限报警;
⑤油气浓度监测。实时监控油库油气浓度异常时报警提示。
图1 系统整体结构
信息管理是对采集来的实时数据,进行综合处理和对历史数据管理查询,主要包含下面几个模块:
①安全信息查询。对油库各种安全监测进行处理情况责任人等方面查询;
②收发油数据录入。对收发油的数据进行统一管理,并可以提供查询;
③油库储量查询。对原数据进行统计,提供分时间油品的统计并绘图;
④电子巡更。对巡逻进行排班,数据录入,并进行查询;
⑤编码管理。对油库的油品油罐尺寸大小等可变的状态量进行统一编码。
2 基于多层架构的监控系统的实现
系统具体实现采用多层架构有很多好处: 将业务规则集中到易于创建、使用和重用的组件中,从而方便了开发和维护;将数据访问集中到组件中,从而减少了应用程序中的重复代码,每个需要访问的窗体都使用了相同的组件; 对任何数据访问的例程更改都只需要进行一次即可,集中式数据访问有助于维护。
本系统采用.NET 2.0+SQLSERVER2005 的大体框架,系统的具体实现采用了三层体系结构, 分为表示层(Layer_PresentationUI)、数据访问层(Layer_DataAccess DAL)、业务逻辑层(Layer_BusinessLogic BLL)。UI 层使用winform 后台程序由c#编写。DAL 负责数据库的数据存取,BLL 层通过调用DAL 层的方法来实现业务需求。如果直接依赖、业务逻辑层实例化数据访问层的类,表示层再实例化业务逻辑层的类,会造成强耦合。
如果想把数据库从SQLServer 换成MySQL,则要改变整个业务逻辑层代码,这是个不好的设计。所以一般的做法是,为数据访问层和业务逻辑层分别定义一簇接口,业务逻辑层不依赖具体的数据访问层,而是仅依赖数据访问层的接口族。表示层也一样,依赖业务逻辑层的接口族。如此一来,当要更换数据库时,就不必改写整个业务逻辑层,因为业务逻辑层里根本没有任何数据访问层中的具体类,而全是通过接口实现的。
3 重要技术
3.1 多线程
要采集数据的同时,对数据进行处理,因此需要一个多线程的方式,即各种采集设备使用不同的线程读取硬件,之间互不相连,采集出来的数据放入一个公共的缓冲区中,供主程序处理,数据流程如图2 所示。
图2 数据流程
在C#2.0 中, 线程的处理主要有两种方式, 一种是使用Thread 类。但是这种低级别的线程,不能控制窗口控件,需要另一种安全线程才能操作窗口控件。
在C#2.0 中有一个新增的类BackgroudWorker,同样的功能也可以用异步委托的形式调用,但是使用这个新类可以节省开发时间,把它从创建委托和调用中解放出来,在系统的视频监控下载中使用这个类。若要在后台执行耗时的操作,请创建一个BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。可以通过编程方式创建BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。如果在Windows 窗体设计器中创建BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中。若要设置后台操作,请为DoWork 事件添加一个事件处理程序。在此事件处理程序中调用耗时的操作。若要启动该操作, 请调用Run-WorkerAsync。若要收到进度更新通知,请对ProgressChanged 事件进行处理。若要在操作完成时收到通知, 请对RunWorker-Completed 事件进行处理。
3.2 泛型
在子线程和主程序交换数据时候, 涉及数据的类型不同,相互转换定义复杂,需要传递的变量包括类、字符串数组、整形数组等系统采用泛型结构,C#2.0 添加了泛型结构。
4 结束语
随着石油能源日益紧缺,油库特殊性质实时监控系统已经成为数字化油库研究的重要方向。本文提出了一种基于.NET平台的实时监控系统的方案,该系统目前已经在若干储备油库中使用,效果良好,运行稳定,满足了对油库进行数字化自动化改造和综合管理的需要。
推荐文章
论坛热帖