1煤矿安全生产监测系统的研究1赵晓(陕西科技大学电气与信息工程学院,陕西咸阳,712081)摘要:本文提出了煤矿安全生产监测系统的总体结构图和实现方法,重点讨论了系统开发中涉及到的数据传输技术、链表的使用等主要技术。本系统的开发和使用将大大改善煤矿安全生产中的不安全因素。关键词:煤矿安全生产,监测,数据传输,链表InvestigationabouttheSafetyProductionsofCoalMineMonitorSystem(ShaanXiuniversityofScience&TechnologyXianYang712081)Abstract:Thispaperputforwardatotalstructurediagramandamethodaboutsafetyproductionsofcoalminemonitorsystem,andthen,wediscussedsomeimportanttechnologythatinvolvedinthedevelopmentofsystem,suchasdatatransmission,theusageofchainformtechniqueandsoon.Thedevelopmentandusageofthissystemwillimprovetheinsecurityfactorofsafetyproductionsofcoalmine.Keywords:thesafetyproductionsofcoalmine,monitor,datatransmission,chainform中图分类号:TP391引言煤矿安全生产是指通过改善劳动环境,减少生产中的不安全因素,防止伤亡事故的发生,从而确保煤矿生产的顺利进行。在安全生产中,安全是前提;生产是目的,是维系安全的物质基础。但是二者之间仍存在一定的矛盾,从某种意义上讲,在投入资源一定的情况下,投入安全中的资源增加,意味着投入生产中的资源减少;另外,许多企业由于缺乏长远的战略目标。为了追求短期的高效益,往往会以牺牲人员或设备的安全为代价来换取暂时的利润。而且,煤矿生产本身具有特殊的作业环境,加上地质和环境的复杂性,致使煤矿生产具有更多的潜在的不安全因素。在日常的生产过程中,由于安全管理不善而引发各类安全事故层出不穷。从而影响了煤矿的生产经营秩序,企业总体经济效益不断下降。由此可见,煤矿安全管理己成为煤矿生产经营的“瓶颈”,煤矿安全生产监控系统正是基于上述背景条件下产生的。该系统是以煤矿企业预警管理理论为指导,针对煤矿企业生产中的不安全因素提出的,是一种新型的、具有创造意义的研究课题。它通过及时反馈安全事故信息,提出一种能够监测、预控安全事故的煤矿安全生产监控系统。旨在为煤矿安全生产管理提供一种具有实际运用价值的安全管理新模式。2系统的总体设计2.1系统结构概述煤矿安全监控系统采用以B/S(Browse/Server)与C/S(Client/Server)相结合的方式来架构整个系统。B/S方式用于查询实时数据和历史数据,C/S方式用于实现各矿动态图形的上传和维护管理。在设计上,本系统采用三层结构。三层结构的特点是在传统两层结构的基础上加入一个业务逻辑层。它将C/S体系结构中原本运行于客户端的应用程序移到了中间件层,客户端只负责显示与用户交互的界面及少量的数据处理(如数据合法性检验)工作。客户端将收集到的信息(请求)提交给中间层服务器,中间层服务器进行相应的业务处理(包括对数据库的操作),再将处理结果反馈给客户机。这样减轻了中心服务器的负担,提高了整个系统的安全性。1作者简介:赵晓(1978-),女,陕西西安人,讲师,工学硕士,主要研究方向:软件工程。2因为B/S结构的无连接性,实时数据以及曲线无法及时更新到监控客户端,所以本系统采用了C/S结构来解决这个问题。同时为了兼容B/S结构的安装部署方便、客户端零维护的优点,系统采用了Web部署来解决这个问题。首先监控客户端程序部署在中心服务器上,当客户端通过权限验证后,就可以请求执行客户端监控程序(一个可执行应用程序文件)。Web服务器收到请求后,首先检查服务器中的客户端监控程序有无更新,然后将该应用程序发送至客户端进行执行。此种方案所具有的优点:(a)客户端部署方便:客户端无需安装,只需通过Web页面请求执行监控程序即可,Web服务器会自动将客户端监控程序运行所需的运行库发送至客户端进行执行,高效而且方便。(b)客户端零维护:客户端的应用程序是通过请求Web服务器来执行,服务端在得到请求后首先进行版本的更新检查以及各种运行时更新检查,然后发送至客户端进行执行。客户端无需进行维护。(c)安全性高:客户端应用程序与服务端程序通信的协议是自行设计且进行了信道加密,确保通信安全,数据不被窃取、篡改。保证整个系统的安全性不受威胁。(d)与B/S架构整合统一:客户端应用程序是通过Web浏览器来请求执行的,可与B/S架构做到完美的结合。整体的操作风格趋于一致。2.2系统总体设计结构图煤矿安全监控系统的总体结构图如下图2-1所示:图2-1系统总体结构图(a)服务端程序:整个软件的核心,是一个服务端上的应用程序,由系统管理员进行管理。(b)浏览器:主要是指IE浏览器,它能通过Internet浏览ASP.NET页面进行一些基本的历史数据的查询。(c)安全监控客户端:它是一个智能客户端,使用了.NET非接触式(no-touchdeployment)部署的特性。它就如同是部署在网站上的WinForms的应用程序。用户可以直接通过网络见到各矿点的数据的动态变化。(d)监控程序1,监控程序2,…:是各个矿点发送数据的应用程序,我们用一个模拟程序来表示它们。3(e)数据库服务器:SQLServer2000数据库服务器是保存了各矿点的数据。2.3服务器程序的详细介绍在图2-1中,体现出服务程序是整个系统的核心,各矿点的数据是通过它来中转的。各个矿点通过TCP传送数据时,服务程序为各矿点开辟了一个实时连接线程,进行实时数据的传输。然后将数据排入缓冲池,缓冲池的设计防止了数据因为同时的发送,而造成数据接收时的冲突,解决数据收发的速率匹配问题,防止从监控程序接收的数据直接发送至客户端而带来的延时及数据丢失。数据通过两路前行,一路是数据存入数据库,这是一个后台的操作。另一路是数据流向安全客户端,同样安全监控客户端也与服务程序的客户端连接及管理开辟连接线程,通过TCP接收数据。从总体上来说,安全监控客户端和各矿点的监控程序与服务程序采用了C/S的结构,这种结构不但能够保证数据传输的安全性,而且能够保证数据的实时性。3功能实现中的主要技术3.1数据传输代码的实现服务端的监控部分和客户端的访问部分都用到了数据的传输,有两个关于数据传输的基类,分别是连接类和连接管理类,这两个基类分别用了Microsoft的Socket类和TcpListener类。(1)Socket类Socket类为网络通信提供了一套丰富的方法和属性。Socket类允许您使用ProtocolType枚举中所列出的任何一种协议执行异步和同步数据传输。Socket类遵循异步方法的.NETFramework命名模式;例如,同步Receive方法对应于异步BeginReceive和EndReceive方法。如果当前使用的是面向连接的协议(如TCP),则服务器可以使用Listen方法侦听连接。Accept方法处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的Socket。可以使用此返回的Socket来调用Send或Receive方法。如果要指定本地IP地址和端口号,在调用Listen方法之前先调用Bind方法。如果不调用Bind,基础服务提供程序将为您分配这些值。此后,可以使用LocalEndPoint属性来标识分配给Socket的IP地址和端口号。如果想连接到侦听主机,调用Connect方法。若要进行数据通信,调用Send或Receive方法。当数据发送和数据接收完成之后,可使用Shutdown方法来禁用Socket。在调用Shutdown之后,可调用Close方法来释放与Socket关联的所有资源。如果编写较简单的应用程序,而且只需同步数据传输,则可以考虑使用TcpClient、TcpListener和UdpClient。这些类为Socket通信提供了更简单、对用户更友好的接口。代码举例:publicWinSocket(ConnManageinManage,SocketinSocket)//连接类构造函数{Manage=inManage;conn=inSocket;ThreadStartts=newThreadStart(ReadData);clientThread=newThread(ts);clientThread.Name=Connected;clientThread.Start();}(2)TcpListener类TcpListener类提供一些简单方法,用于在阻塞同步模式下侦听和接受传入连接请求。使用TcpClient或Socket来连接TcpListener,使用IPEndPoint、本地IP地址及端口号或者4仅使用端口号,来创建TcpListener。可以将本地IP地址指定为Any,将本地端口号指定为0(希望基础服务提供程序分配这些值)。如果选择这样做,使用LocalEndpoint来标识已指定的信息。Start方法用来开始侦听传入的连接请求。Start将对传入连接进行排队,直至您调用Stop方法或它已经完成MaxConnections排队为止。可使用AcceptSocket或AcceptTcpClient从传入连接请求队列提取连接。这两种方法将阻塞。如果要避免阻塞,可首先使用Pending方法来确定队列中是否有可用的连接请求。调用Stop方法来关闭TcpListener。Stop方法不会关闭任何已接受的连接。需要用户负责分别关闭这些连接。代码举例:publicConnManage(intport)//连接管理类构造函数{this.port=port;try{acceptsocket=newTcpListener(port);acceptsocket.Start();//监听ThreadStartserverThreadStart=newThreadStart(Listening);//建立线程serverthread=newThread(serverThreadStart);serverthread.Name=Manager;serverthread.Start();}catch(SocketException){throw;}}3.2程序所用链表的代码实现在程序中我们经常会用到链表这样一种数据结构。很幸运Microsoft为用户提供了很好的数组类ArrayLIst,用起来很方便,如同在用一个链表。ArrayList类提供在大多数Collections类中提供但不在Array类中提供的一些功能。例如:Array的容量是固定的,而ArrayList的容量是根据需要自动扩展的。如果更改了ArrayList.Capacity属性的值,则自动进行内存重新分配和元素复制。ArrayList提供添加、插入或移除某一范围元素的方法。在Array中,您只能一次获取或设置一个元素的值。ArrayList提供将只读和固定大小包装返回到集合的方法。而Array不提供。另一方面,Array提供ArrayList所不具有的某些灵活性。例如:可以设置Array的下限,但ArrayList的下限始终为零。Array可以具有多个维度,而ArrayList始终只是一维的。特定类型(不包括Object)的Array的性能比ArrayList好,这是因为ArrayList的元素属于Object类型,所以在存储或检索值类型时通常发生装箱和取消装箱。要求一个数组的大多数情况也可以代之以使用ArrayList。它更易于使用,并且通常具有与Object类型的数组类似