一种基于MQTT消息协议的能源控制器进程间的通信方法与流程

文档序号:31052466发布日期:2022-08-06 08:13阅读:183来源:国知局
一种基于MQTT消息协议的能源控制器进程间的通信方法与流程
一种基于mqtt消息协议的能源控制器进程间的通信方法
技术领域
1.本发明属于电力通信领域,具体涉及一种基于mqtt消息协议的能源控制器进程间的通信方法,以及实施该方法的系统和终端。


背景技术:

2.能源控制器(energy control and monitoring terminal unit,ecu)是一种安装在公变或专变台区,用于实现客户侧和配电侧计量与感知的设备。该设备具有数据采集、智能费控、时钟同步、精准计量、有序充电、用能管理、回路状态巡检、户变关系识别、停电事件上报等多种功能;是智能电网中的核心设备。
3.能源控制器的功能丰富,各个管理进程在运行过程中需要进行信息交互。现有进程间的通讯方式包括管道通信、信号量通信、消息队列、共享内存、套接字等方式。但是这些传统的通讯方式普遍存在传输效率低、传输可靠性低、无重发机制、程序耦合性高、传输格式不统一的缺点,这会对能源控制器进程间的通讯效率产生影响。
4.目前,随着智能电网的不断发展,各项电力管理服务和应用对电力数据的实时性、高效性需求越来越明显,这对进程间数据的传输效率提出了更高的要求。然而传统的能源控制器的进程间通讯方式显然已经不能够适应现有业务对通讯效率的要求。同时,随着能源控制器的功能更加完善,进程数不断增多,进程间的通讯网络也变得更加复杂,容易出现数据出错的问题。因此亟需开发一种更高效、更可靠的能源控制器的进程间通讯方式。
5.此外,现有进程间通讯方式的功能大多需要基于能源控制器的核心主应用程序,且内部各线程间的消息传输采用直接通信的模式,这种通讯方式不仅效率低下,且具有较大的二次开发难度;如果需要改变任意进程的通信关系,就需要对能源控制器的整个模块进行修改。


技术实现要素:

6.为了解决进程间消息通讯效率低、传输可靠性低、程序耦合性高,二次开发难度大等问题;本发明提供一种基于mqtt(message queuing telemetry transport,消息队列遥测传输)消息协议的能源控制器进程间的通信方法,以及实施该方法的系统和终端。
7.本发明采用以下技术方案实现:
8.一种基于mqtt消息协议的能源控制器进程间的通信方法,该通信方法用于在能源控制器的各个进程间实现自由通信。该通信方法的实施过程包括如下内容:
9.一、系统构建阶段:
10.构建一个包括mqtt客户端和mqtt服务器的进程间通信系统。其中,mqtt客户端用于接收由各个进程生成的消息,并将消息发送到mqtt服务器。mqtt服务器用于对接收到的所有消息进行管理,并将消息推送给mqtt客户端中的目标进程。
11.二、服务订阅阶段:
12.以每个进程的名称作为消息订阅的主题类型,在mqtt服务器中预先建立各个进程
对其它进程的信息订阅关系。并为每个进程设置一个广播消息的订阅状态。
13.三、消息发布阶段:
14.mqtt客户端收集各个进程发布的消息,然后为每条消息设置广播属性和优先级属性。并将消息发送到mqtt服务器。发布的消息中包含主题类型和消息内容。
15.四、消息推送阶段:
16.mqtt服务器先对接收到的所有消息进行解析;然后根据所有待推送的消息的接收时间和优先级属性确定各条消息的推送顺序;最后再根据每条消息的主题类型和广播属性,将消息内容推送到订阅该消息的目标进程处。
17.作为本发明进一步的改进,在构建的进程间通信系统中,mqtt客户端为消息的发送方和接收方。mqtt服务器为消息的分配中转站。任意一个被传输的消息均由mqtt客户端中的其中一个进程发布,并被mqtt客户端中的一个或多个进程接收。消息的发送和接收过程采用异步模块,在不同线程中处理。
18.作为本发明进一步的改进,在消息的发布阶段,还可以为每条消息设置一个发布服务质量,发布服务质量包括“至多一次”、“至少一次”和“只有一次”三种。mqtt服务器根据每条消息的发布服务质量属性确定消息的发布频次,以确保每条消息准确推送到目标进程。
19.作为本发明进一步的改进,在三种发布服务质量中,“至多一次”指无论目标进程是否接收到推送的信息,mqtt服务器都仅推送一次当前消息。“至少一次”指无论需要推送多少次消息,mqtt服务器都要保证推送的消息被目标进程接收。“只有一次”指推送消息过程,mqtt服务器要保证目标进程接收且仅接收到一次推送的消息。
20.作为本发明进一步的改进,在消息推送阶段,mqtt客户端在每个进程接收到由mqtt服务器推送的消息后,还向所述mqtt服务器返回一个消息送达指令。
21.作为本发明进一步的改进,在消息推送阶段,在mqtt客户端中的任意进程因异常而断开连接之后,mqtt服务器自动向所有订阅该主题类型的进程推送相关的掉线信息。同时,在掉线进程重新上线之前,也向该进程的新增订阅对象推送掉线信息。
22.作为本发明进一步的改进,在消息发布阶段,每条消息采用json格式进行传递,消息为一个包含“名称/值”的数据集。其中,“名称”指传输的消息的主题类型;“值”指传输的消息的实际内容,值中包含的数据为字符串、数组、数值、对象和空数据中的一种或任意多种。
23.作为本发明进一步的改进,mqtt服务器将接收到的待推送的消息存储在一个内存数据库中;当待推送的消息的数量超过1条时,针对未设置优先级属性的消息,mqtt服务器还通过sql语句查询的方式检索消息内容中的关键字,然后根据关键字对该消息与其它待推送消息的优先级进行重新排序。
24.本发明还包括一种基于mqtt消息协议的能源控制器进程间的通信系统,该通信系统采用如前述的基于mqtt消息协议的能源控制器进程间的通信方法,在能源控制器中的任意进程间实现不定向的自由通信。该通信系统包括进程端和服务器端共两个部分,二者的信息交互过程采用异步通信模式。
25.其中,进程端包括消息采集模块和消息接收模块。消息采集模块用于获取各个能源控制器中各个进程生成的待发布的消息,然后将发布当前消息的进程的名称作为当前消
息的主题类型,并为每个消息设置一个广播属性和优先级属性;最后将包含消息内容、主题类型、广播属性和优先级属性的数据集发送到服务器端。消息接收模块用于接收由服务器端推送的消息。
26.服务器端包括订阅管理模块、消息处理模块和消息推送模块。订阅管理模块用于为每个进程设置订阅的主题类型,订阅的主题类型反映了各个进程允许推送的消息源。同时,还为各个进程设置一个广播消息的订阅状态。当某个进程订阅了广播信息后,则任意一个其它进程发布的广播信息均被允许推送至该进程。消息处理模块用于接收并解析由消息采集模块发出的数据集,然后根据消息的接收时间和优先级属性确定各条消息的推送顺序。消息推送模块用于根据每条消息的主题类型和广播属性,将各条待推送的消息的消息内容推送到订阅该消息的目标进程处。
27.作为进一步的改进,程端中还包括一个状态反馈模块。状态反馈模块用于在每个进程成功接收由mqtt服务器推送的消息时向mqtt服务器返回一个消息送达标志。服务器端还包括一个质量监督模块,质量监督模块用于对消息推送模块的消息推送频次和状态反馈模块返回的消息送达标志进行采集,进而保证严格执行每条消息的发布服务质量。
28.本发明还包括一种基于mqtt消息协议的能源控制器进程间的通信终端,该通信终端包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序。处理器执行程序时实现如前述的基于mqtt消息协议的能源控制器进程间的通信方法的步骤;进而在能源控制器中的任意进程间实现不定向的自由通信。
29.本发明提供的技术方案,具有如下有益效果:
30.本发明提供的能源控制器的进程间通讯方法采用了mqtt协议中发布/订阅消息模式,因而可以实现一对多的消息发布。当某进程发送消息到mqtt服务器上,服务器再根据各进程订阅的消息主题来分发消息内容到各进程。因而可以的提高进程间的通信效率,并适用于进行大量进程间的复杂通信,提高通信的有效性和准确性。
31.本发明的通信方法和系统通过不同进程间订阅关系的管理,可以快速便捷的修改不同进程间的数据传输链路;这样可以大幅改善能源控制器中不同应用程序的耦合关系。本发明既降低对能源控制器主程序的任务执行过程影响;又可以使得各进程间能够更有效的接收消息,提高消息的传输效率。有效降低了能源控制器的开发难度。
32.本发明提供的通信方案中采用的mqtt协议可以工作在低带宽、不可靠的网络的远程传感器和控制设备间,对网络环境和硬件性能的要求很低,并且可以通过设置发布服务质量来监督消息的发布频次;确保消息到达;提高通信过程的可靠性。
附图说明
33.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
34.图1为本发明实施例1中提供的一种基于mqtt消息协议的能源控制器进程间的通信方法的步骤流程图。
35.图2为本发明实施例1中提供的基于mqtt消息协议的能源控制器进程间的通信方法执行过程的程序流图。
36.图3为本发明实施例2中提供的一种基于mqtt消息协议的能源控制器进程间的通
信系统的结构拓扑图。
37.图4为本发明实施例2中经过优化后增加了发布服务质量监督功能的通信系统的结构拓扑图。
具体实施方式
38.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
39.实施例1
40.本实施例提供一种基于mqtt消息协议的能源控制器进程间的通信方法,该通信方法用于在能源控制器的各个进程间实现自由通信。需要特别强调的是,本实施例中的进程间消息采用mqtt协议,工作在tcp/ip协议族上,并采用json协议作为数据交换格式,进程间消息的发送与接收则采用异步模式来完成。具体地,如图1所示,该通信方法的实施过程包括如下内容:
41.一、系统构建阶段:
42.构建一个包括mqtt客户端和mqtt服务器的进程间通信系统。其中,mqtt客户端用于接收由各个进程生成的消息,并将消息发送到mqtt服务器。mqtt服务器用于对接收到的所有消息进行管理,并将消息推送给mqtt客户端中的目标进程。
43.二、服务订阅阶段:
44.以每个进程的名称作为消息订阅的主题类型,在mqtt服务器中预先建立各个进程对其它进程的信息订阅关系。并为每个进程设置一个广播消息的订阅状态。
45.三、消息发布阶段:
46.mqtt客户端收集各个进程发布的消息,然后为每条消息设置广播属性和优先级属性。并将消息发送到mqtt服务器。发布的消息中包含主题类型和消息内容。
47.四、消息推送阶段:
48.mqtt服务器先对接收到的所有消息进行解析;然后根据所有待推送的消息的接收时间和优先级属性确定各条消息的推送顺序;最后再根据每条消息的主题类型和广播属性,将消息内容推送到订阅该消息的目标进程处。
49.本实施例构建的进程间通信系统中,mqtt客户端为消息的发送方和接收方。mqtt服务器为消息的分配中转站。任意一个被传输的消息均由mqtt客户端中的其中一个进程发布,并被mqtt客户端中的一个或多个进程接收。消息的发送和接收过程采用异步模块,在不同线程中处理。
50.采用本实施例提供的通信方法进行进程间通讯时;如图2所示,mqtt客户端为每个进程产生的消息内容设置好相应的主题类型、优先级属性和广播属性,然后发送到mqtt服务器上。mqtt服务器会将每个进程发布的信息采集过来,然后解析各条消息;接着先进行优先级排序,再检索出在系统中有哪些程序“订阅”了当前进程发布的主题内容,并将当前消息的消息内容推送给订阅方的进程。
51.本实施例中,不同进程间的通信链路关系采用“订阅”属性进行编辑,可以非常便于进行管理和调整。同时,对某些需要发布给所有其它进程的消息,还可以采用“广播”模式
进行传达。为了避免其它进程对目标进程的干扰,目标进程也可以选择关闭广播消息的订阅,来拒收任意进程发布的广播消息。
52.由此可见,本实施例提供的通信方法中,mqtt服务器可以随时接收、及时送达,因而极大提高进程间的通讯效率,并且可以实现一对多的数据传递。在该方法中,不同进程见得通讯链路可以自由更改,不同消息的传递路径也可以快速调整。而且进程间的通讯过程不占用主程序的资源,因而可以大幅改善程序间耦合性高的问题。
53.特别地,在消息发布阶段,本实施例中的每条消息均采用json格式进行传递,该格式的特点是采用完全独立于编程语言的文本格式来存储和表示数据,易于管理人员阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。本实施中每条消息数据格式为包含“名称/值”的数据集。其中,“名称”指传输的消息的主题类型;“值”指传输的消息的实际内容,值中包含的数据为字符串、数组、数值、对象和空数据中的一种或任意多种。
54.由于消息采用的json格式编写,因而可以支持sql语句查询。因此本实施例还可以通过关键字迅速查找消息的优先级,保证优先处理优先级高的消息,提高消息处理的效率和可靠性。
55.具体地,本实施例中的mqtt服务器将接收到的待推送的消息存储在一个内存数据库中;使用内存数据库的好处在于数据读取及写入速度极快。当待推送的消息的数量超过1条时,针对未设置优先级属性的消息,mqtt服务器还通过sql语句查询的方式检索消息内容中的关键字,然后根据关键字对该消息与其它待推送消息的优先级进行重新排序。
56.本实施例的通信方法还充分利用了mqtt协议中的“遗言机制”。在消息推送阶段,在mqtt客户端中的任意进程因异常而断开连接之后,mqtt服务器自动向所有订阅该主题类型的进程推送相关的掉线信息。同时,在掉线进程重新上线之前,也向该进程的新增订阅对象推送掉线信息。因此不同进程可以有效掌握其它进程的在线状态,为实现更可靠的通信质量奠定基础。
57.为了改善系统中不同进程间大规模通信时的可靠性,避免重要的信息未送达,或被重复送达。本实施例在消息的发布阶段,还可以为每条消息设置一个发布服务质量,发布服务质量包括“至多一次”、“至少一次”和“只有一次”三种。mqtt服务器根据每条消息的发布服务质量属性确定消息的发布频次,以确保每条消息准确推送到目标进程。
58.在三种发布服务质量中,“至多一次”指无论目标进程是否接收到推送的信息,mqtt服务器都仅推送一次当前消息。“至少一次”指无论需要推送多少次消息,mqtt服务器都要保证推送的消息被目标进程接收。“只有一次”指推送消息过程,mqtt服务器要保证目标进程接收且仅接收到一次推送的消息。
59.此外,在消息推送阶段,mqtt客户端在每个进程接收到由mqtt服务器推送的消息后,还向所述mqtt服务器返回一个消息送达指令。返回指令可以让mqtt服务器了解目标进程是否正确实现消息接收,因而可以每条信息的发布服务质量的严格执行奠定基础。
60.为了使得本实施中的基于mqtt消息协议的能源控制器进程间的通信方法的处理过程和优点更加清楚,以下结合一个实际场景对本实施例方案仅详细说明。
61.假设存在一个具有多样化功能的能源控制器,能源控制器的功能按照应用程序划分包括:无线远程拨号app、数据中心app、模组管理app、系统管理app、大用户用能管理app。每个app(应用程序)即为能源控制器中运行的一个进程。
62.其中,各个进程的功能属性如下:
63.无线远程拨号app:为避免多个app操作无线通信模块,本实施例设计无线远程拨号模块统一控制无线通信模块,负责无线公/专网通信模块的管理、拨号连接管理、状态监控和数据统计能功能并为其他app提供服务消息接口。
64.数据中心app:数据中心是能源控制器中的基础app,被大量app访问,负责电气量和非电气量数据的存储与管理,规范数据采集、数据应用的方法和格式,使终端的各个业务有机的衔接在一起,对外提供标准且安全的调用接口。
65.模组管理app:将模组端口设备节点名称映射为模组接入槽位和端口序号的组合,具备模组识别、模组查询、通道复位、模组升级功能,应用app开发人员根据终端模组配置信息确定模组接入槽位并使用相应功能。
66.系统管理app:负责终端内部app的管理以及系统监控,确保系统稳定可靠运行,可进行app安装、升级、卸载、启停、查看app状态,负责系统安全,检查容器镜像和app的合法性。同时分发路由,在使用异构通信环境中负责消息转发。
67.大用户用能管理app:负责对大用户用电数据、用电情况进行分析管理,具备数据采集、数据处理、参数设置与查询、负荷控制、事件记录及主动上报、数据通讯、安全防护功能。
68.各个app进程为了实现各自的功能,需要通过mqtt服务器订阅其他app进程发布的数据信息,进程间的订阅关系具体如下表1所示。
69.表1:不同进程间的消息订阅规则
[0070][0071]
根据上表的消息订阅规则,无线远程拨号app的订阅主题包括模组管理和系统管理;因此当模组管理app和系统管理app中任意一个发布了消息,mqtt服务器都会将相应的消息推送给无线远程拨号app。
[0072]
由于上表中的模组管理app、系统管理app和大用户用能管理app均订阅了无线远程拨号app。所以当无线远程拨号app发布一个消息之后,无线远程拨号app发布的消息会同步推送至模组管理app、系统管理app和大用户用能管理app三个进程。
[0073]
特别地,假设数据中心app发布了一个属性为“广播”的消息,那么其它进程中,所有允许推送广播消息的进程都会接收到该消息。
[0074]
当mqtt服务器同时接收到多个待推送的消息时,则会对不同消息的先进行优先级排序,再对同等优先级的消息进按照信息发布时间进行二次排序,最后根据顺序依次推送各个消息。保证优先级较高的消息会被最先推送到目标进程处。
[0075]
实施例2
[0076]
本实施例提供本发明还包括一种基于mqtt消息协议的能源控制器进程间的通信
系统,该通信系统采用如实施例1中的基于mqtt消息协议的能源控制器进程间的通信方法,在能源控制器中的任意进程间实现不定向的自由通信。如图2所示,该通信系统包括进程端和服务器端共两个部分,二者的信息交互过程采用异步通信模式。
[0077]
其中,进程端包括消息采集模块和消息接收模块。消息采集模块用于获取各个能源控制器中各个进程生成的待发布的消息,然后将发布当前消息的进程的名称作为当前消息的主题类型,并为每个消息设置一个广播属性和优先级属性;最后将包含消息内容、主题类型、广播属性和优先级属性的数据集发送到服务器端。消息接收模块用于接收由服务器端推送的消息。
[0078]
服务器端包括订阅管理模块、消息处理模块和消息推送模块。订阅管理模块用于为每个进程设置订阅的主题类型,订阅的主题类型反映了各个进程允许推送的消息源。同时,还为各个进程设置一个广播消息的订阅状态。当某个进程订阅了广播信息后,则任意一个其它进程发布的广播信息均被允许推送至该进程。消息处理模块用于接收并解析由消息采集模块发出的数据集,然后根据消息的接收时间和优先级属性确定各条消息的推送顺序。消息推送模块用于根据每条消息的主题类型和广播属性,将各条待推送的消息的消息内容推送到订阅该消息的目标进程处。
[0079]
如图3所示,在本实例更优化的方案中,进程端中还包括一个状态反馈模块。状态反馈模块用于在每个进程成功接收由mqtt服务器推送的消息时向mqtt服务器返回一个消息送达标志。
[0080]
服务器端还包括一个质量监督模块,其用于对消息推送模块的消息推送频次和状态反馈模块发出的消息送达标志进行采集,进而保证严格执行每条消息的发布服务质量。
[0081]
本实施例中,发布服务质量包括“至多一次”、“至少一次”和“只有一次”三种。在三种发布服务质量中,“至多一次”的指标要求mqtt服务器无论目标进程是否接收到推送的信息,mqtt服务器都仅推送一次当前消息。“至少一次”的指标要求mqtt服务器可以多次推送消息,务必保证推送的消息被目标进程接收。“只有一次”的指标要求mqtt服务器在推送消息过程,要保证目标进程接收且仅接收到一次推送的消息。
[0082]
实施例3
[0083]
本实施例提供本发明还包括一种基于mqtt消息协议的能源控制器进程间的通信终端,该通信终端包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序。处理器执行程序时实现如实施例1中的基于mqtt消息协议的能源控制器进程间的通信方法的步骤;进而在能源控制器中的任意进程间实现不定向的自由通信。
[0084]
该计算机设备可以是可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备至少包括但不限于:可通过系统总线相互通信连接的存储器、处理器。
[0085]
本实施例中,存储器(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,存储器也可以是计算机设备的外部存储设备,例如该
计算机设备上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。当然,存储器还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,存储器通常用于存储安装于计算机设备的操作系统和各类应用软件等。此外,存储器还可以用于暂时地存储已经输出或者将要输出的各类数据。
[0086]
处理器在一些实施例中可以是中央处理器(central processing unit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器通常用于控制计算机设备的总体操作。本实施例中,处理器用于运行存储器中存储的程序代码或者处理数据,以实现前述实施例1中基于mqtt消息协议的能源控制器进程间的通信方法的处理过程,进而在能源控制器中的任意进程间实现不定向的自由通信。
[0087]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1