一种面向大规模实时并发的充电机监控数据处理方法
技术领域
本发明涉及充电机监控数据处理领域,特别是一种面向大规模实时并发的充电机监控数据处理方法。
背景技术
随着电机、电池和电控等电动汽车关键的技术的不断突破和发展,以及面对日益攀升的油价和严峻的环境污染问题,发展纯电动汽车产业已成为中国重要的产业政策。电动公交车和出租车等公共交通工具已开始在各大中型城市试点和投入运营,配套的集中式充换电设施也相继建成,截止2011年,全国范围内已建成电动汽车充电站314座,充电桩1.6万多个。根据“十二五”规划,到2015年全国将建成由40万个充电桩、2000个充换电站构成的网络化供电体系。
为保障充换电设施提供可靠稳定的能源供给服务,数据采集必须满足实时性要求,如果超时,充电机状态监控就没有意义,甚至会造成充电事故。充电机监控数据并发量大,每台充电机每秒发送大约1500个CAN(ControllerAreaNetwork)总线协议报文。随着充电站建设规模的不断扩大,充电机的并发数据量将非常庞大,如何对大规模充电机数据进行并发处理是本领域亟需研究的关键问题之一。
当前关于充电机数据采集处理方法侧重于满足数据的采集满足功能需求,即研究数据的采集流程,最终实现在充电站内的统一部署。发明专利(CN201110260277.4)“电动汽车充电监控系统的数据采集监控方法”公开了一种电动汽车充电监控系统的数据采集监控方法。该方法首先读取充电机状态数据,根据充电机状态再读取消费数据和蓄电池数据,实现实时采集充电机工作数据的采集流程。但是,该方法没有考虑大型充电站中大规模数据并发情况下,数据的并发传输、控制和处理方法,不能满足大型充电站中数据处理的实时性要求。
总之,当前方法不能解决大规模充电机接入环境下数据的实时处理问题,至今还没有公开文献涉充电机监控数据的并发处理方法,如何根据大型充电站中数据的大规模并发特点,找到一种合理有效的大规模实时并发的充电机监控数据处理方法是本领域技术人员亟待解决的技术问题。
发明内容
本发明所要解决的技术问题是,针对现有技术不足,提供一种面向大规模实时并发的充电机监控数据处理方法,使得大型充电站中的数据并发处理得到有效的控制,保证数据的实时性,提升数据处理的可靠性。
为解决上述技术问题,本发明所采用的技术方案是:一种面向大规模实时并发的充电机监控数据处理方法,该方法为:
1)搭建包括CAN协议网关、通讯服务器、数据库服务器和客户端工作站的充电机数据处理系统,通讯服务器通过以太网与CAN协议网关、客户端工作站、数据库服务器相连,CAN协议网关通过CAN总线接收充电机发送的CAN总线协议,并将所述CAN总线协议转换成CAN数据报文;数据库服务器与客户端工作站相连;所述通讯服务器内包括对充电机监控数据实时并发处理的接收模块、分发模块、解析模块、存储模块和发送模块;
其中:
接收模块包括:侦听CAN协议网关的连接请求的第一侦听线程;一个从TCP数据通信链路中接收来自CAN协议网关的CAN数据报文,并把所述CAN数据报文放入接收队列的接收线程;
分发模块即依据CAN数据报文头中的用来标识该报文类型的参数组编号,并将接收队列中的CAN数据报文发送到与该参数组编号相对应的处理队列的分发线程;
解析模块包括多个提取上述处理队列的CAN数据报文进行处理,并将应用层数据对象放入应用层数据缓冲队列和历史数据队列中的不同优先级别的处理线程;
存储模块包括嵌入式数据库和将历史数据队列中的应用层数据对象存储到嵌入式数据库中的存储线程;
发送模块包括:负责侦听来自客户端工作站的客户端数据请求,并将客户端工作站发送的客户端数据请求保存到客户端数据请求队列中的第二侦听线程;由多个从客户端数据请求队列中取出客户端数据请求,并从应用层数据缓冲队列中取出所请求的应用层数据对象,发送给客户端工作站的服务线程组建的服务线程池;对服务线程池进行调度管理的主管线程;
2)CAN协议网关从充电机接收CAN总线协议,将CAN总线协议转换成CAN数据报文,并将CAN数据报文通过以太网传送给通讯服务器;
3)通讯服务器对CAN数据报文进行接收、分发、解析、发送和存储。
所述步骤3)中,通讯服务器的对CAN数据报文进行接收、分发、解析、发送和存储的过程为:
1)接收模块采用先来先服务的原则对CAN数据报文进行流量控制和速度控制:第一侦听线程对CAN协议网关进行监听,当监听到CAN数据报文后,由接收线程将CAN数据报文放入接收队列队尾;
2)若接收队列已满,暂停接收报文,此时收到的CAN数据报文将被丢弃,等待接收队列有空单元时再接收报文;若接收队列不为空,分发模块从接收队列的队尾元素中取出CAN数据报文,并将所述接收队列的队尾元素置空,以释放接收队列的空间,提取所述取出的CAN数据报文的参数组编号,根据该编号将所述取出的CAN数据报文放入对应的处理队列中;
3)解析模块中的处理线程根据优先级别的高低提取相应的CAN数据报文的数据字段;
4)解析所有的处理线程,得到应用层数据对象,并把属于充电机i和报文类型j的应用层对象L[i][j]放入应用层数据缓队列,每解析完成一次,应用层对象L[i][j]更新一次;同时处理线程把应用层对象L[i][j]放入历史数据队列中;其中,1≤i≤M,1≤j≤N;M、N分别为充电机编号和报文参数组编号大小;
5)若上述历史数据队列未满,则进入6);若上述历史数据队列已满,则存储模块中的存储线程将历史数据队列中的内存数据写入嵌入式数据库中,并将历史数据队列清空;数据库服务器将嵌入式数据库中的内容写入充电机监控数据表中,进入6);
6)发送模块中的第二侦听线程侦听客户端工作站请求,当主管线程从第二侦听线程获知客户端工作站有数据请求时,主管线程查看服务线程池中是否有睡眠状态的服务线程,若有,取出一个睡眠中的服务线程,并将其唤醒进入工作状态,被唤醒的服务线程根据客户端数据请求中的充电机编号和参数组编号,从应用层数据缓冲队列取出对应的应用层数据对象返回给客户端工作站,该服务线程完成发送任务后返回服务线程池进入睡眠状态;若没有,服务线程池为空,则主管线程创建一个新的服务线程,新的服务线程根据客户端数据请求中的充电机编号和参数组编号,取出对应的应用层数据对象返回给客户端工作站,新的服务线程完成发送任务后返回服务线程池进入睡眠状态;
7)主管线程每隔一段时间t查询服务线程池中是否有T时间不使用而超过睡眠时限T的服务线程,若有,则将T时间不使用而超过睡眠时限的服务线程销毁,实现服务线程池大小的调整和优化;其中,t<T;
8)当客户端工作站请求非实时数据时,数据库服务器从充电机监控数据表中取出数据返回客户端工作站;
9)若客户端工作站从服务线程或数据库服务器接收到数据,则将数据显示在用户交互界面上。
与现有技术相比,本发明所具有的有益效果为:本发明采用多级缓冲机制,整个数据处理流程分为接收、分发、解析、存贮发送等多级操作,并采用多线程和多级缓冲机制来提高数据处理的实时性;将CAN总线协议转换成CAN数据报文进行传输,利用以太网传输速度快、并行处理程度高的特点解决了大规模充电机数据的实时接收问题;在分发阶段,将不同类型的CAN数据报文进行区分,并交由不同的处理线程进行并行解析,提高了CAN数据报文的解析效率;在CAN数据报文解析阶段利用优先级机制,保证了重要充电机数据处理的实时性;通过将应用层数据对象存入嵌入式数据库,提升了数据处理的可靠性;本发明实现了对大规模并发监控数据的实时采集和处理,可用于支持大型充电站中监控系统的构建。
附图说明
图1为本发明一实施例监控系统结构示意图;
图2为本发明一实施例实时并发充电机监控数据处理方法框架结构图;
图3为图2中充电机监控数据表的结构图。
具体实施方式
本发明的方法如下:
第一步,搭建充电机数据处理系统,如图1所示,系统由CAN协议网关、通讯服务器、数据库服务器和客户端工作站构成。CAN协议网关是一种将CAN数据报文转化为以太网报文的网络硬件设备,常见的型号如周立功的CANET系列CAN-以太网转换器,研煌的ACNET-600系列数据转换设备。本发明所使用的CAN协议网关具有一个CAN接口和一个以太网接口,CAN协议网关的CAN接口通过CAN总线与K(1≤K≤10)台充电机连接,以太网接口通过以太网与通讯服务器连接,将从充电机接收的CAN总线协议转换成CAN数据报文。通讯服务器是一台安装有充电机监控数据实时并发处理软件的计算机,通讯服务器通过以太网与CAN协议网关、客户端工作站、数据库服务器相连,通过socket(套接字)方式实现数据传输;通讯服务器的充电机数据实时并发处理软件对从各CAN协议网关收到的CAN数据报文进行分发、解析、存储和发送,并将解析得到的应用层数据对象发送给客户端工作站和数据库服务器。数据库服务器是一台安装有Oracle数据库软件的计算机,通过以太网与通讯服务器连接,负责存储来自通讯服务器的解析完的应用层数据对象。客户端工作站是一台安装客户端程序的计算机,它一方面从通讯服务器接收解析完的应用层数据对象进行实时输出和显示,一方面从数据库服务器中查询解析完的非实时应用层数据对象,并输出和显示。
图2给出了本发明提供的实时并发充电机监控数据处理方法框架结构图。
充电机通讯服务器的充电机监控数据实时并发处理软件由接收模块,分发模块,解析模块,存储模块和发送模块组成。
接收模块包含一个侦听线程和一个接收线程。侦听线程侦听CAN协议网关的连接请求,如果收到CAN协议网关的连接请求,则与该CAN协议网关建立一个TCP数据通信链路;接收线程从TCP数据通信链路中接收来自CAN协议网关的CAN数据报文,并把CAN数据报文放入接收队列。接收队列为先入先出的缓冲队列,该队列为第一级缓冲队列,队列中的一个元素即为一个CAN数据报文。接收队列长度根据CAN数据报文的并发规模进行配置,大于等于一个充电机的CAN数据报文最大并发量规模,通常一个充电机的CAN数据报文最大并发规模为500帧每秒,接收队列长度设置为500。
分发模块是一个分发线程。分发线程依据CAN数据报文头中的用来标识该报文类型的参数组编号,将接收队列中的CAN数据报文发送到与该参数组编号相对应的处理队列。处理队列有N个,均为先入先出的缓冲队列,处理队列为第二级缓冲队列,处理队列长度等于接收队列长度,用于存放等待解析处理的CAN数据报文。处理队列的数量N等于CAN数据报文的类型数量,每个处理队列对应一种报文类型,只接收具有指定参数组编号的报文。
解析模块包含N个处理线程。每个线程负责对一个处理队列的CAN数据报文进行处理。一个处理线程从一个处理队列中取出CAN数据报文,提取该报文类型中的充电机电压、充电机电流,蓄电池单体电压、蓄电池单体温度、蓄电池最高电压、蓄电池最高温度、蓄电池SOC、充电机事件、充电机故障、蓄电池基本信息监测数据,根据NB/T33003-2010《电动汽车非车载充电机监控单元与电池管理系统通信协议》中定义的通讯规约对报文的数据字段进行解析,得到应用层数据对象,并放入应用层数据缓冲队列中。应用层数据缓冲队列存储应用层数据对象,是第三级缓冲队列。应用层数据缓冲队列是一个二维数组L[M][N],数组维度为充电机编号和报文参数组编号,大小分别为M和N,数组元素为属于同一充电机和同一参数组编号的应用层数据对象,数组元素每两秒刷新一次。同时,处理线程还将应用层数据对象放入历史数据队列中,历史数据队列采用指针链表的数据结构,队列长度设置为接收队列长度的4倍,可存储一段时间的应用层数据对象。考虑各类CAN数据报文类型的重要性和实时性的差异,将处理线程按优先级由高到低的顺序分为第一优先级线程、第二优先级线程和第三优先级线程三类。处理线程按照优先级建立与处理队列的映射关系,具体地,充电机电压、充电机电流,充电机事件,蓄电池最高电压、蓄电池最高温度、蓄电池SOC、充电机故障这些实时性要求高的处理队列对应第一优先级处理线程;蓄电池单体电压和蓄电池单体温度采集频度不高的处理队列对应第二优先级线程;蓄电池基本信息处理队列则对应第三优先级线程。
存储模块包括一个存储线程和一个嵌入式数据库。存储线程将历史数据队列中的应用层数据对象存储到嵌入式数据库中,该嵌入式数据库采用轻量型数据库SQLite(《基于ARM-Linux的SQLite嵌入式数据库技术》,《单片机与嵌入式系统应用》,2005年第4期)构建。
发送模块包括第二侦听线程,一个服务线程池和一个主管线程。第二侦听线程负责侦听来自客户端工作站的客户端数据请求,将客户端工作站发送的客户端数据请求保存到客户端数据请求队列中;客户端数据请求队列为先入先出的缓冲队列,该队列为第四级缓冲队列,队列长度等于接收队列长度,队列中的一个元素即为一个客户端数据请求;服务线程池由多个服务线程组建,采用双向链表结构设计,统一由一个主管线程进行管理。主管线程负责对线程池进行调度管理。当主管线程从第二侦听线程获得客户端数据请求时,从服务线程池中取出服务线程。服务线程从客户端数据请求队列中取出客户端数据请求,并从应用层数据缓冲队列中取出所请求的应用层数据对象,发送给客户端工作站。
数据库服务器是一台安装有Oracle数据库的计算机,在数据库中主要构建了一个充电机监控数据表。数据库服务器通过以太网与通讯服务器连接,从存储模块的嵌入式数据库中读取应用层数据对象,并将该数据存入充电机监控数据表中。充电机监控数据表每项有充电机ID,充电状态,充电方式,充电电量,充电电流,充电电压,蓄电池单体温度,蓄电池单体电压,蓄电池最高电压,蓄电池最高温度10个域。客户端工作站是安装有客户端软件的计算机,客户端软件主要包含数据请求模块,数据接收模块,用户交互界面三个模块。用户交互界面负责接收用户的查询操作,并显示接收的应用层数据对象充电机;数据请求模块根据用户的操作向通讯服务器或数据库服务器请求所需的充电机监控数据;数据接收模块负责接收通讯服务器或数据库服务器发送的应用层数据对象充电机,并将接收到的应用层数据对象通过用户交互界面进行显示。
第二步,CAN协议网关从充电机接收CAN总线协议,将CAN总线协议转换成CAN数据报文,并将CAN数据报文通过以太网传送给通讯服务器。
第三步,由通讯服务器的数据实时并发处理软件对CAN数据报文进行接收、分发、解析、发送和存储。
3.1接收模块采用先来先服务的原则对CAN数据报文进行流量控制和速度控制:第一侦听线程对CAN协议网关进行监听,当监听到CAN数据报文后,由接收线程将CAN数据报文放入接收队列队尾,如果接收队列已满,暂停接收报文,此时收到的CAN协议报文将被丢弃,等待接收队列有空单元时再接收报文。
3.2若接收队列不为空,分发模块的分发线程CAN数据报文从接收队列的队尾元素中取出CAN数据报文,并将该队尾元素置空以释放接收队列的空间,提取报文的参数组编号,根据该编号将CAN数据报文放入对应的处理队列中。
3.3解析模块中不同优先级别的处理线程实现对处理队列中CAN数据报文并发处理,第一优先级处理线程得到最高的CPU使用权,提取类型为充电机电压、充电机电流,充电机事件,蓄电池最高电压、蓄电池最高温度、蓄电池SOC、充电机故障的CAN数据报文的数据字段(与充电设施监控数据表中的不一致),第二优先级处理线程得到较高的CPU使用权,提取类型为蓄电池单体电压和蓄电池单体温度的CAN数据报文数据字段,第三优先级线程得到最低的CPU使用权,提取类型为蓄电池基本信息的CAN数据报文的数据字段,所有的线程均按照NB/T33003-2010《电动汽车非车载充电机监控单元与电池管理系统通信协议》协议进行解析,即进行数据含义翻译,得到应用层数据对象,并把属于充电机i和报文类型j的应用层对象L[i][j](1≤i≤M,1≤j≤N)放入应用层数据缓队列,每解析完成一次,应用层对象L[i][j]更新一次。同时处理线程把应用层对象L[i][j]放入历史队列中。
3.4若历史数据队列未满,转3.5步,若历史数据队列已满,存储模块中的存储线程将历史数据队列中的内存数据写入嵌入式数据库中,并将历史数据队列清空;数据库服务器将嵌入式数据库中的内容写入充电设施监控数据表中,转3.5步。
3.5发送模块中的第二侦听线程侦听客户端数据请求,当主管线程从第二侦听线程获知客户端有数据请求时,主管线程查看服务线程池中是否有睡眠状态的服务线程,若有,取出一个睡眠中的服务线程,将其唤醒进入工作状态服务线程根据客户端数据请求中的充电机编号和参数组编号,从层数据缓冲队列取出对应应用层数据对象返回给客户端,该服务线程完成发送任务后返回服务线程池进入睡眠状态;若线程池中的线程全部用完,线程池为空,则主管线程创建一个新的服务线程,新的服务线程根据客户端数据请求中的充电机编号和参数组编号,取出对应应用层数据对象返回给客户端,由新服务线程完成发送任务后返回服务线程池进入睡眠状态;同时,主管线程隔一段时间t(t=10秒)查询服务线程池中是否有T(T=30秒)时间不使用而超过睡眠时限的线程,若有,则将T时间不使用而超过睡眠时限的线程销毁以实现线程池大小的调整和优化。
3.6当客户端数据请求非实时数据时,数据库服务器从充电机监控数据表中取出数据返回客户端。
3.7若客户端工作站的数据接收模块从服务线程或数据库服务器接收到数据,则将数据显示在用户交互界面上。
图3为图2中充电机监控数据表的结构图,充电机监控数据表每项有充电机ID,充电状态,充电方式,充电电量,充电电流,充电电压,蓄电池单体温度,蓄电池单体电压,蓄电池最高电压,蓄电池最高温度10个域。