赵 炯 胡 博 熊肖磊 周奇才
0 引言
随着我国经济的迅猛发展,私家车的保有量呈爆炸性增长,而对应的停车位数量却增长缓慢,其中涉及到城市规划、交通等诸多方面的问题。大力推广和应用立体停车库是解决此问题的有效途径之一[1]。进入21 世纪以来,微电子技术和控制技术不断发展,立体停车库的自动化程度也越来越高,并朝着智能化和网络化的方向发展。现在的立体停车库通常由专业的工业控制器如PLC 来控制[2]。目前,无论是立体停车库的生产企业还是使用机构,使用的控制系统都是本地化的,绝大多数设备的检修和维护工作仍然依靠人工完成,这不仅需要大量的人力物力而且长时间的维护也给车库的正常运营带来负面的影响[3,4]。构建支持远程监控和设备信息管理功能的立体停车库远程监控系统可有效解决此类问题。2017 年3 月,西门子的S7-200 Smart 系列PLC 已完全支持开放式以太网通信,使利用小型PLC 建立智能化和网络化的控制系统成为现实,进而可以建立一套针对立体停车设备的远程监控系统。本文从系统整体出发,介绍了立体停车库远程监控系统的整体框架和结构,阐述了上层两个核心软件的架构,并针对建立此系统的两个难点提出了解决方案。
1 远程监控系统的整体方案
建立远程监控系统是为了针对分布在各地的立体停车设备难以高效维护的问题,致力于将分布在各地的立体停车库统一管理,实现对立体停车设备的远程监控、诊断维护及安全管理。
1.1 系统功能及目标
建立远程监控系统是为了做到设备的集中化管理与运营,其具体功能及目标为数据采集、数据传输、数据处理、数据存储以及针对工作人员的远程服务。其中,经过处理后的数据用来实现对设备的状态检测和故障诊断等。针对工作人员的远程服务是指工作人员能够远程访问监控系统,查看各个车库的位置、运行状态、收入情况等。从系统的结构和原理来说,前四个功能是一体的,数据由PLC 采集,传输到本地服务器,由本地服务器初步处理后上传到监控中心的数据库服务器,最后数据库服务器上的数据解析程序对数据进行分析处理并存入数据库,是针对数据的操作,是远程监控系统的基本功能。而针对工作人员的远程服务,则是在WEB 服务器上建立一个与数据库进行交互的CURD 系统。
1.2 系统整体架构
根据系统功能需求所制定的系统整体架构如图1 所示。从层次上划分,整个系统自底向上可以分为设备控制层、现场监控层和远程监控与管理层。
![26de0e4b485a3b992de6001d43f6ccb6.png](https://i-blog.csdnimg.cn/blog_migrate/f41f8d3a8bd10d3bf6a56e6269c7a6c7.jpeg)
图1 系统整体架构
设备控制层的主要功能是通过安装在设备电气控制柜中的PLC 来控制设备并采集设备信息,其组成如图2所示。
![45c45724869c1773e1c027594e441548.png](https://i-blog.csdnimg.cn/blog_migrate/2127587fc575d45199585198f7efa5b3.jpeg)
图2 设备控制层组成示例
现场监控层是由本地服务器对信息进行预处理和与监控中心建立网络连接来实现的。整个现场监控层由两部分组成:1)本地服务器,负责采集现场PLC 中的数据、数据预处理和暂存并将数据上传到监控中心;
2)路由器,为本地设备之间提供局域网内通信功能,并实现接入外网与监控中心通信功能。远程监控与管理层实现数据存储、数据显示、数据挖掘等多种功能。远程监控中心主要由数据库服务器、WEB 服务器、网络设备(路由器与交换机等)组成。远程监控中心系统的主要功能如下:
1)数据接收、处理、存储与管理实时接收、处理、存储立体停车库运行状态信息,实现数据管理功能,同时对数据库进行良好的维护。
2)界面显示与状态监控在车库正常工作的情况下,工作人员登陆系统后可通过GIS 系统点击地图上的立体停车库,即可查看该立体停车库的当前状态:是否处于运行状态、托车架所处位置、剩余车位数等。监控系统具有故障报警功能,如果车库发生故障,根据设备上传的故障编号,工作人员即可知道故障信息,做出针对性的维护。
3)系统操作
即使工作人员不在监控中心也可以远程通过WEB浏览器实时查看设备信息,并将工作人员按照角色划分,赋予不同的操作权限。数据库服务器用于立体停车库信息数据的存储,而WEB 服务器则用于发布、管理和维护监控中心的网站后台, 监控中心用户可远程通过网络服务器访问监控网站。网络设备部分主要包括交换机和路由器,它主要实现监控中心内部、监控中心和中层(本地监控层),监控中心和远程用户之间的通信。远程监控中心系统的软件结构及信息交互如图3 所示,由两个系统组成:数据通信管理系统和设备监控系统。
![b8db56b4705ebacb2b38ee0e2f64dd60.png](https://i-blog.csdnimg.cn/blog_migrate/930a3f778146a3d1ef28dd58ded3f41a.jpeg)
图3 远程监控中心软件结构及信息交互
其中,数据通信管理系统由实时通信及数据解析程序实现,负责与本地服务器通信、收发数据、数据解析、数据库管理以及设备管理等;设备监控系统由网站程序实现,主要以地图的形式,集中显示各地设备的总体状态和单独设备的实时运行状态,可进行具体的历史数据查询。
2 远程监控与管理层软件架构
远程监控与管理层有两台服务器:WEB 服务器和数据库服务器,分别运行远程监控系统两个上层核心程序——网站后台程序和实时通信及数据解析程序。
2.1 网站后台程序架构
网站后台架构采用B/S 模式,即浏览器/ 服务器模式,这种模式可统一客户端,尽可能地将系统功能的核心部分放在服务器上运行,简化了系统的开发、维护和使用。客户机上只要安装了浏览器,便能通过WEB 服务器上的后台程序与数据库进行数据交互。网站后台主要用来响应用户的HTTP 请求,在Tomcat 中发布并运行。本研究基于SSH 框架对系统进行层次划分,将层次间的耦合降到最低。SSH 由Struts、Spring、Hibernate 3 个开源框架组成。其中,Spring 是一个轻量级框架,旨在简化JAVA 开发,其核心思想是通过依赖注入和面向切面编程类之间的耦合,支持集成第三方框架,整合为一个复杂系统,实现对象生命周期的管理。Struts 基于MVC 模式, 对Model、View 和Controller都提供了对应的组件。Struts 通过控制器拦截来自用户的请求,调用由用户提供的实现业务逻辑的对应的Action,将处理结果返回给前端页面显示。Hibernate 则是一个数据持久层框架,可使用配置文件或注解配置原始映射,将接口和Java 对象映射成数据库中的记录。SSH 框架的应用使得服务 器开发变得方便快捷,且具有优良的拓展性[5]。采用SSH 框架后,服务器程序层次结构如图4 所示。
2.2 远程监控层实时通信及数据解析程序架构
通信程序自底向上分为网络层、业务逻辑层和数据访问层。网络层主要基于Socket 编写,Socket 最早是 Unix上推出的一种操作系统调用,应用程序使用它来访问通信协议。Socket 的种类很多,如伯克利Socket、Windows Socket 等。Socket 通常也称为“套接字”,用于绑定 IP 地址和端口,使进程间能够相互通信。进程在通信前各自建立一个 Socket,完成准备工作后,通过对Socket 缓冲区的读写操作实现网络通信的功能[6]。
![f1dc21fc356982f0b61fcea9f79b90e3.png](https://i-blog.csdnimg.cn/blog_migrate/1985ea9cd94429f22d95e8eef2130098.jpeg)
图4 服务器程序层次结构
一个完整的 Socket 服务端程序一般包括以下步骤:
1)创建套接字(socket());
2)将一个IP 地址和一个端口绑定到套接字上(bind());
3) 将套接字设置为监听模式等待连接请求(listen());
4)接受到来的连接请求,返回一个新的对应的套接字(accept());
5)利用上一步返回的套接字和客户端通信(send()/recv());
6)关闭套接字(closesocket())。
以上每一步骤中括号内部是Linux 操作系统中的C语言库函数的调用,目前的后台开发语言都支持Socket通信程序的开发,各步骤调用的函数/ 方法名均大同小异,选定开发语言后查找API 即可完成此程序。业务逻辑层的主要任务是对数据包解析,具体操作是在Socket 服务端程序第6 步后增加一个判断,每当recv() 函数接收到的数据组成一个完整的数据包后,即调用相应的业务逻辑处理函数来对数据进行解析。数据访问层的主要任务是将解析后的数据存入数据库等CURD 的任务,后台开发语言都有相应成熟的与数据库连接的库,如JDBC、ADO 等,调用相应的库函数即可与数据库交互。软件的程序架构如图5 所示。
![91b1fdaa05de0dab1d3a3503e296cad1.png](https://i-blog.csdnimg.cn/blog_migrate/4b428a168e8307df7e4756ad2f5512ff.jpeg)
图5 实时通信及数据解析程序层次结构
3 关键技术难点及解决方案
两个上层核心程序中的实时通信及数据解析程序通常是远程监控系统的性能瓶颈。随着数据流量的增加,信息的交互越来越频繁,既要保证数据实时传输的可靠性,又要保证数据接收和解析足够快,以免造成数据堆积甚至程序崩溃。
3.1 保证实时传输的可靠性
传统的小型PLC 通讯方式为基于RS485 的自由口通信,此种通信方式在高速大流量网络中,很容易出现数据丢失、顺序混乱等问题。鉴于S7-200 Smart 系列PLC 已完全支持开放式TCP 通信,利用Micro Step7Smart 编程软件中的库, 即可调用TCP 的Connect、Send 和Recv 函数。因此本系统所有设备间的通信在传输层均可采用基于TCP 面向可靠连接、按字节传输并带有拥塞控制和流量控制的协议。应用层也需要制定自定义协议,该协议主要完成客户端/ 本地服务器和远程服务器之间的数据传输、命令应答任务。通信协议将消息分为请求行、首部和消息体。请求行有两部分组成:第一部分是Command,Command 可以是命令,也可以是应答,该字段长度为4 字节;第二部分是Version,也就是版本号,为版本升级兼容协议。使用TotalLen 来表示消息的总长度,可在应用中解决数据传输粘包/ 拆包的问题;使用Type来区分不同类型的立体停车库,进而使用不同的业务逻辑来解析数据;使用EquiNum 即设备编号来区分不同设备;通过对消息的编号,可进一步排除数据混乱、丢失等错误。
3.2 保证实时传输的可靠性
提高实时通信及数据解析程序的性能主要针对以下两点分别采取措施:
1)实时通信。应用层采用socket 编程,利用Linux内部的I/O 多路复用机制,调用epoll 函数轮询与远程服务器相连接的客户端,并采用非阻塞socket,能大大提高程序的运行效率。
2)数据的解析和存储。若将数据通信接收与数据解析处理串行置于同一线程中,当解析处理速率无法跟上通信接收数据包的速率时,会造成数据包大量积压最终导致程序崩溃。现代计算机发展历程已经由串行计算时代过渡到了并行计算时代,服务器中更是采用性能强劲的多核CPU。采用多线程技术可以大大提高实时通信及数据解析程序的性能进而解决上述问题[7]。每组数据采用单独的线程解析,并行计算。使用异步调用将原始数据和解析后的数据存于数据库中。关系型数据库具有原子性、一致性、隔离性、持久性四个特性,不需要考虑多线程同时与数据库交互的问题。以上两个措施相辅相成,利用操作系统自带的系统调用,并采用多线程编程能将计算机的性能最大程度地发挥,系统开发者需要结合具体任务将其分解,以开发出卓越的多线程程序。
4 结论和展望
本文建立了一整套远程立体停车- 库监控系统,介绍了三层架构间以及各个模块间相互作用的方式和方法,这是对传统的立体停车库监控系统的一个较大的改进。解释了网站后台程序和实时通信与数据解析程序的主要架构,指出提高监控系统性能的关键技术。如果车库的数量足够多,数据量足够大,则需要建立服务器集群,并用相应的框架管理集群。还可以利用Hadoop、Spark 等大数据框架管理数据,采用数据挖掘与机器学习的算法分析用户习惯、车位的紧张程度分布等,为交通调度、城市规划等提供宝贵的参考意见。