电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者维修技术家电维修单元电路介绍其它电路基于C/S 模式与完成端口的路灯监控软件的设计

基于C/S 模式与完成端口的路灯监控软件的设计

09-08 11:40:24 | http://www.5idzw.com | 其它电路 | 人气:605
标签:电路设计,http://www.5idzw.com 基于C/S 模式与完成端口的路灯监控软件的设计,http://www.5idzw.com

     1 引言

  目前,全国很多城市的路灯监控系统受到区域限制,仍停留在小规模的监控模式上,使得各地区的监控标准不统一,管理混乱,同时也占用了大量的人力和物力资源。因此,将各区域的路灯监控系统进行统一的管理,形成一个大规模的统一的监控体系, 已成为将来路灯监控发展的趋势。传统的SOCKET 通信模型有着客户端数量的限制,当实际的客户端超过限制,将会出现数据阻塞和丢失,甚至是服务器软件崩溃的情况,而引入了完成端口技术的通信模型没有客户端数量的限制,并且拥有着高效的数据处理能力,能够在大规模路灯监控系统内发挥优势,保障了数据传输的高效性和可靠性。

  在Visual C++ 2008 编程环境下,通过完成端口技术的应用,将原有的基于C / S 模式的路灯监控系统软件进行优化,使得整套系统可以应用于大数量客户端的场合,并且仍能保持通信系统较高的稳定性。

  2 监控系统软件的总体构架

  路灯监控系统分为远程终端设备和监控软件两个部分。远程终端设备安装在路灯控制现场,是实现监控功能的主要硬件设备。远程终端通过GPRS无线通信网络与服务器相连,根据用户的设置参数,实现定时开关灯,采集数据和事故报警等功能。

  根据不同地区的情况,其数量可能非常的庞大,传输到服务器的数据量也会非常庞大。监控软件是一套在Visual C + + 2008 开发平台下, 基于Client /Server 模式的网络通信软件,由服务端软件和客户端软件两个部分组成, 后台数据库选用MS SQLServer 2005。监控系统结构图如图1 所示。

系统结构图

图1 系统结构图

  监控软件的服务端安装并工作于服务器上,负责接收监控终端设备传输而来的数据,对数据进行分析,并存入数据库; 同时与软件的客户端进行通信,并且将软件客户端的指令数据,转发到相应的监控终端设备,对被监控对象的进行管理与控制。

  监控软件的客户端工作在用户电脑上,通过网络与服务端和数据库相连,为少数特定的路灯监控管理员提供服务。客户端为这些管理员用户提供了一个功能齐全的图形界面。用户可以通过客户端查询数据,发送控制指令,也可以通过客户端的电子地图功能和柜体监控动画实时的了解各个远程终端的工作状态。

  3 服务端完成端口通信模型的实现

  3. 1 完成端口原理

  3. 1. 1 完成端口简介

  网络通信模块是整个系统最核心的部分,由于要负责大规模的数据传输与处理,因此对软件的性能的高效性提出了挑战,而完成端口通信技术的应用解决了这一难题。

  完成端口( I /O Completion Port ) 是一个Windows NT 执行子系统的核心对象。通过将完成端口与任意I /O 句柄( 文件或Socket 等) 关联,使得用户可以通过完成端口,异步的获取并处理I /O 的结果。

  完成端口是由系统直接提供并行优化支持的,在完成端口上建立几个并行的服务线程,一般数量为CPU 数,它们为到达完成端口的服务请求提供服务。当有服务请求到达时,如果有可用的服务线程,则激活该线程,如果没有可用服务线程,则将服务请求加入请求队列,该队列采用先进先出( FIFO)的策略,来保证这些请求得到公平的服务。服务线程的建立和请求队列的FIFO 策略,减少了CPU 在不同线程间切换的次数,降低线程上下文切换所造成的开销。

  3. 1. 2 重叠I /O

  完成端口的设计原理是让应用程序使用重叠的数据结构,一次投递一个或多个I /O 请求,当这些请求完成后,应用程序可以为他们提供服务。这就要求我们在使用完成端口时必须要使用重叠I /O。

  重叠I /O,即当I /O 功能调用时,不论I /O 是否完成,函数马上返回,由操作系统底层处理I /O 的实际工作,而应用程序( 进程) 可以继续做其他事情。因而,完成端口是处理完成重叠I /O 的一种高效的机制。

  3. 1. 3 工作线程

  除了工作在完成端口上的服务线程外,在关联套接字之前,还必须创建一个或多个工作线程,以便在I /O 请求投递给完成端口对象后,为完成端口提供服务。工作线程的个数取决于应用程序的总体设计情况。创建的工作线程由完成端口管理。当有I /O 完成通知到来,则由完成端口唤醒一个工作线程接收I /O 完成通知,并对其进行处理。完成端口自动对工作线程进行调度,唤醒哪个工作线程则由完成端口决定。若无I /O 完成通知,则所有的工作线程都在等待。根据经验,工作线程的数量一般为CPU 数量的两倍再加上2。

  3. 2 完成端口的程序实现

  网络通信模块通过CreateIoCompletionPort 函数创建完成端口对象,并将接收到的socket 对象与完成端口关联, 启动一定数量的工作线程, 通过GetQueuedCompletionStatus 函数获取完成端口上SOCKET 的当前状态,并将收到的数据从缓存出取出。完成端口的主要工作流程图如图2 所示。

完成端口模块流程图

图2 完成端口模块流程图

  主线程:

  1) 程序启动的时候,初始化网络并且创建完成端口句柄:

  CompletionPort = CreateIoCompletionPort ( INVALID_ HANDLE_ VALUE,NULL,0,0);

  2) 启动2* N + 2 个工作线程,N 为CPU 数量:

  3) 进入一个*循环,开始*客户端连接请求;

  4) 将接收到的客户端SOCKET 与完成端口对象绑定;

  5) 发出一个异步的WSARecv 或是WSASend 操作,实际的接收和发送数据操作会由操作系统完成。

  6) 重复以上3) 到5) 的操作。

  工作线程:

  1) 进入循环, 通过GetQueuedCompletionStatus函数, 从完成端口上取得WSASend /WSARecv 的操作结果:

  2) 根据完成端口上I /O 状态, 进行数据的处理;

  3) 提交一个新的WSASend /WSARecv 操作请求;

  4) 重复以上1) 到4) 的操作。

  3. 3 通信规约设计

  整个监控系统采用TCP ( Transmission ControlProtocol,传输控制协议) 进行数据传输,在此基础上设计了一套监控系统规约,来完成服务端与远程终端,服务端与客户端的通信。根据路灯监控的实际需求,数据报文包括以下几种形式。

  1) 远程终端主动向软件服务端发送的连接认证数据报文,如表1 所示。

表1 连接认证数据报文格式

[1] [2]  下一页

,基于C/S 模式与完成端口的路灯监控软件的设计