基于STM32的智慧路灯控制系统设计与实现

2018-07-04 02:55,,
计算机测量与控制 2018年6期
关键词:线程路灯控制器

, , ,,

(湖北大学 计算机与信息工程学院,武汉 430062)

0 引言

随着物联网科技的不断发展,智慧路灯成为了智慧城市中不可或缺的重要组成部分[1]。智慧路灯控制系统能够实现网络化的照明控制服务,并且通过与后台的通信,能实时的对路灯进行数据采集与回传,智能化的下发控制策略,实现对各个路灯的实时准确控制。通过无线GPRS通信技术,实现对路灯的远程集中控制与管理,具有远程照明控制、故障报警、远程抄表等功能,能够大大节省电力资源,提升城市照明管理水平,节省运维成本。

伴随着科技迅猛发展,智慧路灯的数量会越来越多,对于网络通信的要求也越来越高,无法满足现代路灯的数据通信需求。针对传统路灯系统所面临的通信问题,本系统采用基于Netty框架而设计的通信模块,不仅有效地实现了高并发通信,同时也更适应智慧城市发展的需求。

1 整体系统架构

智慧路灯控制系统主要由路灯集中控制器和后台通信系统两大部分组成。系统除具有自动早晚开关灯功能外,可利用策略控制,实现夜间其他时段自动通断功能,每个回路的采集器至终端控制平台的通讯为有线网络或无线传输方式,每个回路具有计量功能,通过RS485通讯、GPRS等方式来实现远传电表的数据,路灯控制系统需将每个回路的用电量最终传输到后台进行统计分析,可自动生成用电量日报表、月报表和年报表,并与路灯管理云平台对接,并且集中控制器具有本地数据存储的功能,以保证系统的可靠性、稳定性和安全性。

从成本、灵活性等方面考虑单片机嵌入式系统可以满足需求,图1为智慧路灯控制系统组织结构图。本地集中控制器通过继电器模块控制现场路灯回路,集中控制器通过GPRS模块与服务器通信,实现后台通信系统指令下发和路灯集中控制器数据上传至服务器的功能,从而达到安全可靠的控制各个路灯的开关灯。

图1 智慧路灯控制系统组织结构图

2 系统硬件设计

路灯集中控制器的硬件结构如图2所示。根据电路功能可以将硬件结构划分为核心控制模块、电源模块及各主要功能模块。

图2 集中控制系统硬件结构图

主要功能模块由NorFlash存储模块、三相数据采集模块、GPRS通信模块电路等组成。核心控制模块通过控制继电器输出模块来实现路灯回路控制;通过GPRS通信模块连接后台通信服务器,实现数据的上传、指令和策略的接收;NorFlash存储模块对一些重要参数信息进行存储;三相数据采集模块采集路灯控制器各个回路的供电电压、电流和有功功率等电能数据[2]。

路灯集中控制器通过GPRS通信模块接收和发送所有路灯控制状态信号,并将数据记录在存储芯片中,路灯集中控制器处于后端监控中心和前端路灯设备之间,向上通过GPRS方式与后台通信系统联网通信,向下则是通过回路控制的方式,控制各个路灯开关灯;三相电参模块可以实现对电压、电流、有功功率等数据的采集,实时监控智慧路灯控制器的运行状况。

2.1 核心控制模块

核心控制模块综合考虑处理速度、低功耗、是否满足各个不同模块接口以及后期功能扩展等因素,系统选用基于Cortex-M3[3]内核的32位微控制器STM32F217VGT6作为主控制器,主要因为它成本低、运行稳定可靠,并且它具有多路SPI通信接口,满足数据信息的采集的需求,多路串口也满足核心系统与子模块之间的数据通信要求。

2.2 NorFlash存储模块

路灯集中控制器需要保存设备ID、服务器IP及端口号、密钥等配置参数,并且需要存储路灯的控制策略。由于集中控制器需要存储的数据需求较大,在不影响整体系统的性能以及成本等条件下,选择具有8 M容量的NorFlash存储芯片W25Q128,它具有功耗低,宽温度范围,并且高效的“连续读取”性和高安全性的特点,适合本系统设计的需求。

2.3 数据采集模块

数据采集模块的核心芯片是ATT7022-EU,它是一片多功能高精度的三相电能专用计量芯片,通过它可以精准的采集路灯的电压、电流、有功功率,可以实时监测路灯的工作状态和耗电量。它通过SPI通信接口与核心控制器模块进行数据交互[4],大大提高数据传输的效率,并且SPI具有全双工操作,操作简单。

2.4 GPRS通信模块

路灯集中控制器通过GPRS[5]通信模块与后台通信系统进行网络通信,并且保持实时在线,以便于实时控制路灯的开关灯和监测路灯控制器的工作状态。

GPRS通信的资源利用率高,它引入了分组交换的传输模式,集中控制器只有在发送或接收数据期间才占用资源,这意味着多个集中控制器可高效率地共享同一无线信道,从而提高了资源的利用率;并且GPRS接入时间短,使得集中控制器与后台通信系统能够很快的进行连接通信;通信可靠性高,实现了TCP/IP协议的高效传输速率,在通信过程中,也能保证通信的安全性和稳定性。

3 系统软件设计

本路灯集中控制器软件系统是基于嵌入式操作系统UCOS II设计的[6]。UCOS II是一款广泛应用于嵌入式控制器中的抢占式实时操作系统,具备多任务实时处理,任务灵活调度,多任务间信息传递,简单的时间管理和有效的内存管理等功能,并且UCOSII[7]拥有良好的可扩展性和源码开放,用户可根据自己的具体需求来实现不同的功能。

路灯集中控制器软件系统的设计是基于软件功能采取多任务的方式实现的。主要分为6个任务:

1)按键任务(key_task):主要功能是获取按键的键值,并通过消息邮箱把键值传递给其他任务;

2)通信任务(communication_task):主要功能是控制器与后台服务器的通信连接,以及基于应用层通信协议的数据通信;

3)液晶显示任务(lcd_task):主要功能是显示控制器相关的状态和数据信息;

4)继电器任务(relay_task):主要功能是控制输出和电能参数的采集和处理;

5)电能采集任务(electricAcq_task):主要是负责电能参数的采集;

6)配置任务(config_task):主要能够通过上位机的配置助手实现对集中控制器的参数配置。

其中,通信任务是软件系统的核心部分,承担了GPRS通信模块的配置,路灯控制器与后台通信系统的连接,以及基于该连接的应用层通信协议的实现。

3.1 通信任务设计

通信任务的设计是路灯集中控制器与服务端通信模块之间联网通信的核心。通信任务主要包括系统初始化、GPRS模块初始化、建立TCP/IP连接、通信协议任务处理部分。

其中通信协议任务处理主要处理通讯状态转换,发送和接收数据,协议数据解析,以及数据处理等[8]。

软件系统的设计主要体现在使用GPRS模块建立TCP/IP[9]连接,通过状态机的方式,实现不同运行状态之间的跳转。这些状态包括建立TCP/IP连接的状态流程,以及数据传输的状态流程,保证TCP/IP连接的稳定性以及数据传输的完整性和安全性[10]。

路灯集中控制器系统通信任务程序主流程如图3所示。

图3 通信任务主流程图

3.2 应用层通信协议制定

根据智慧路灯控制系统的数据通信业务需求及对系统安全性方面的考虑,本系统设计了一套通信协议,路灯集中控制器依据此协议与服务端进行数据交互。

3.2.1 数据帧结构

通信数据帧结构用以规范路灯集中控制器与后台通信系统通信时的传输数据格式。数据帧结构由六部分组成,实际应用中顺序不能打乱,由左往右依次是包头、协议号、数据长度、数据类型、数据部分和CRC校验。数据帧结构如图4所示。

图4 数据帧结构图

3.2.2 数据结构

集中控制器与服务端在进行数据通信时最终传递的是字节数组,双方在通信时数据结构必须一样,如表1数据结构所示,包头与协议号各占两个字节,分为高八位与低八位;数据长度的数据类型是整型,转换成字节占两个字节,长度16位,数据长度包括数据类型和数据的长度之和;数据类型码占一个字节;数据部分则按实际确定字节长度,数据部分主要是联网认证、上传数据以及下发数据;最后是CRC校验码两个字节,对协议包头、协议号数据长度、数据类型码、数据等进行校验,保证数据的准确性与安全性。

3.2.3 策略定义

策略定义主要为策略定义固定时间段及是否使用经纬度开关灯等功能,作为抽象功能,可为一个或多个路灯集中控制器同时绑定关联定时策略。

本系统对于智慧路灯的控制主要采用了本地策略、经纬度策略、时间策略三种策略进行控制。

1)本地策略定义:本地策略是存储在路灯集中控制器本地的,主要用于断网情况下,依旧可以按照预先下发存储在本地的策略对路灯进行控制。

2)经纬度策略定义:经纬度策略是根据不同地理坐标点的日出日落时间以及日出日落偏移量来计算每一天的开关灯时间,如表2经纬度策略结构所示。

表2 经纬度策略结构

3)时间策略定义:时间策略是用户自定义开关灯时间,根据不同路段的实际车流量以及所处位置等来自行设置开关灯时间,如表3所示。

表3 时间策略结构

4 高并发通信模块设计

为了解决高并发通信问题,本系统基于Netty[11]框架设计了通信模块,在通信链路的应用层,为了保证集中控制器客户端与Netty通信系统服务端的数据传输的安全性、完整性和可扩展性,Netty通信模块的业务流程按照制定的应用层协议进行设计。

4.1 Netty逻辑架构

Netty采用了三层架构进行设计与开发,它们由上往下分别是通信调度层Reactor、职责链ChannelPipeLine和业务逻辑编排层Service[12],如图5所示。

第一层:Reactor通信调度层,负责监听网络读写操作和连续操作,将网络层数据提取到内存缓冲区ByteBuf中,触发各类网络事件。按照Reactor模式设计和实现的Netty架构,它在服务端的通信时序图,如图6所示。

图6 Netty通信时序图

第二层:职责链Pipline,它负责事件在职责链中有序传播,同时负责动态编排职责链。职责链可以选择监听和处理自我关联性较强的事件,它可以拦截处理和后向/前向传播事件。

第三层:最上层是业务逻辑编排层,业务逻辑编排层通常分为两种:一种是纯粹的业务逻辑编排,另一种是应用层协议插件,用于协议相关的编解码和链路管理。

4.2 Netty线程模型

Netty支持Reactor的单线程、多线程和主从多线程模型多种线程模型。线程模型可以通过设置不同的启动参数,调整线程池的线程个数、是否共享线程池等方式来切换,以便满足不同应用场景的需求[13]。Netty线程模型如图7所示,对应的Netty通信模块线程配置代码如图8所示。

图7 Netty线程模型图

图8 Netty通信模块线程配置代码

Netty通信模块启动时,创建两个线程池NioEventLoopGroup,实际上它们是两个独立的Reactor线程池。bossGroup用来接收路灯集中控制器的TCP连接、初始化参数,将链路状态变更事件通知给ChannelPipeline,这个线程池设置了两个线程。workerGroup用来处理I/O读写事件、执行系统调用Task、执行定时Task等,这个线程分配一个Task,当这个Task完成时,线程就返回到线程池中,等待下一次分配调用。

创建系统 Task 的原因是,当 I/O 线程和用户线程同时操作一资源时,为了防止并发操作产生的锁竞争,会把用户线程封装为一个 Task 放入消息队列,由 I/O 线程负责执行,这样可以实现局部无锁化。而定时 Task 主要用于监控和检查等定时动作。尽管Netty支持多种线程模式,在实际应用中往往创建两个NioEventLoopGroup,用于逻辑隔离 NIO Acceptor 和 NIO I/O 线程,尽量避免在ChannelHandler中自定义用户线程,一般的业务需求使用 NIO 线程组即可完成。每个线程池线程个数的设置没有统一标准,往往通过实际测试决定,一边测试一边调整。默认情况下会设置为 CPU 核数的两倍,常规的线程数量计算公式如下:

线程数量=(线程总时间/瓶颈资源时间) *瓶颈资源的线程并行数;

每秒查询率(QPS)=1000/线程总时间*线程数。

4.3 Netty通信模块的实现

Netty通信模块接收路灯集中控制器数据的流程如图9所示。

图9 Netty通信模块接收数据流程图

当Netty通信模块接收到路灯集中控制器发送的数据时,首先验证数据的包头和协议号,如果验证错误直接关闭当前连接,如果正确就判断当前路灯集中控制器是否已认证,遍历map全局变量,检查map中是否存在该集中控制器信息,如果没有就跳转到集中控制器认证流程,验证数据类型、数据类型ID是不是登录认证信息,验证通过就把路灯集中控制器信息存入到map全局变量中,此控制器以后在发送数据时就不再需要认证。如果之前检查的map中已经存在该控制器信息,则进行CRC16校验,校验通过就反馈数据包格式错误,通过就开始验证数据类型,检测数据类型是否为策略数据,如果不是则反馈数据包格式不正确。如果通信认证成功,则保持路灯集中控制器与Netty通信模块实时通信。

5 实现与分析

通过本地客户端配置软件,给路灯集中控制器配置设备密钥、设备ID、IP地址和端口号等基本信息,其中设备密钥用于通信协议的安全传输,设备ID用于确定设备身份,IP地址和端口用于和后台通信系统网络连接,配置界面如图10所示。

图10 智慧路灯控制器信息配置界面

配置完成后,基于Web的后台管理系统可以实时查看路灯集中控制器的运行状态以及对路灯集中控制器下发时间策略、经纬度策略等控制策略指令,使路灯集中控制器能够通过不同的策略信息实现对道路上路灯断开和闭合的控制;为了保证路灯集中控制器的高可靠性和稳定性,还对路灯集中控制器做了本地策略信息的存储,以保证断网情况下,路灯集中控制器能够正常运行。

根据智慧路灯控制系统整体需求分析,本系统实现了路灯集中控制器与后台通信系统的联网通信,并且能够有效的下发路灯控制策略,而且能够实现策略本地存储。

表4 系统配置

本系统基本完成对于路灯的智能化控制,测试结果满足要求,然而基于Netty的通信模块还需要具备高并发的能力,要求能够同时处理多个路灯集中控制器的数据请求,采用专业的压力测试工具Jmeter[14]对Netty通信模块进行压力测试,通信服务端系统的配置如表4所示。测试方法是Jmeter分别模拟0.5到5万个路灯集中控制器同时向Netty服务端发送字节组数据,数组长度为34,Netty通信模块接收到后向路灯集中控制器反馈一条字节数组,数组长度为8,Jmeter测试生成聚合报告[15]如表5所示。

表5 聚合报告

表5中,S(Samples)是发送到服务器的通信请求事务数量(万);A(Average)是平均完成一次响应消耗的时间,即平均响应时间(ms);M(Median)是所有响应时间的中位数(ms);90%_line是指90%的用户请求的响应时间(ms);Min是服务器响应的最短时间(ms);Max是服务器响应的最长时间(ms);E%(Error%)是请求的错误百分比;T(Throughput)是服务器每单位时间处理的请求数。

图11 压力测试折线图

从聚合报告中数据可看出,并发量从0.5 W自增到5 W的过程中,Netty通信模块错误百分比始终为零,平均响应时间基本稳定在41 ms,单位时间处理的请求数(Throughput)集中在2000个以上,90%的客户请求响应时间在69 ms以内,对应的折线图如图所示。总体而言,在高并发环境下Netty通信模块响应及时、稳定、安全、可靠,它不仅可以满足智慧路灯控制系统的数据通信需求,而且可以为大规模城市部署智慧路灯集中控制器提供有力的技术支持和数据参考。

6 结论

随着信息时代的高速发展,智慧路灯在智慧城市的创建中起着不可或缺的作用。本文中设计的基于STM32的智慧路灯控制系统运行稳定可靠,有效地解决了传统路灯高耗能、高管理成本等一系列问题,并且本系统设计的通信协议具有高效的

可扩展性和安全性,最为主要的是能够解决高并发的通信问题。

本系统适应未来智慧城市的发展方向,对其他类似的运用物联网技术的应用设计有着很大的参考价值。

参考文献:

[1] 廖建尚,等. 物联网开发与应用[M]. 第1版,北京:电子工业出版社,2017.

[2] 刘少强,张 靖,等. 现代传感器技术:面向物联网应用 [M]. 第2版,北京:电子工业出版社,2016.

[3] 刘燕燕,杨帮华,丁丽娜,等. 基于STM32的红外火灾探测系统设计[J]. 计算机测量与控制,2013:1114-1116.

[4] 侯 琛,赵千川,冯浩然,等.一种物联网智能数据采集系统的研究与实现 [J]. 电子测量技术,2014(5):11-12.

[5] 易 飞,余 刚,何 凌. GPRS网络信令实例详解[M].第1版.北京:人民邮电出版社,2013.

[6] 刘波文,孙 岩. 嵌入式实时操作系统μCOS-2经典实例:基于STM32处理器(第2版)[M]. 北京:北京航空航天大学出版社,2014.

[7] 左忠凯,刘 军,张 洋. FreeRTOS源码详解与应用开发:基于STM32[M].第1版.北京:北京航空航天大学出版社,2017.

[8] 勒加雷.嵌入式协议栈μCTCP-IP:基于STM32微控制器 [M]. 第1版,邝 坚,等译.北京:北京航空航天大学出版社,2013.

[9] Carrell J L, Chappell L A. TCPIP协议原理与应用(第4版)[M]. 第1版,金 名,译.北京:清华大学出版社,2014.

[10] Stevens W R.TCP/IP详解卷1:协议 [M]. 第1版,北京:机械工业出版社,2000.

[11] 李林锋,Netty权威指南 [M]. 第2版,北京:电子工业出版社,2015.

[12] 魏 莹,基于Netty框架的智能终端与服务器通信的研究[D]. 西安:西安电子科技大学,2015.

[13] Maurer N.Netty in Action[M]. Manning Publications,2014.

[14] Matam S, Jain J.Pro Apache JMeter:Web application performance testing[M].Apress; 1st ed,2017.

[15] Erinle B.Performance testing with JMeter 2.9[M]. Packt Publishing,2013.

猜你喜欢
线程路灯控制器
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
工商业IC卡控制器改造为物联网控制器实践
浅析体育赛事售票系统错票问题的对策研究
PLC可编程控制器相关外置的选择计算研究
为什么高速公路上不用路灯照明
傍晚,路灯为什么能自动亮起来?
模糊PID控制器设计及MATLAB仿真
Freescale公司的可编程电磁阀控制器MC33816
Java的多线程技术探讨