一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种风电全自主巡检系统及其工作方法与流程

2022-11-16 08:49:22 来源:中国专利 TAG:


1.本发明属于风电技术领域,尤其涉及一种风电全自主巡检系统及其工作方法。


背景技术:

2.风电全自主巡检系统部署在风电场,属于一种介于端侧和云侧系统之间的边侧系统,硬件资源相对有限,但是功能需求却又相对比较多样化;目前主流的技术架构一般有单体架构和微服务架构两种,按照主流的云、边和端分层来看,单体架构适合于功能相对简单且硬件资源需求不高的端侧系统,而微服务架构适合于功能模块众多且硬件资源充裕的云侧系统。其中,单体架构只有一个工作单元与部署多个独立的微服务架构相比,构建并部署一个单体架构更简单;而微服务架构适合于团队合作开发,各个团队有自己单独的发布计划,不用再过多考虑与其他团队的协同,只要外部接口保持不变,开发团队可以根据需要使用另一种编程语言完全重写系统。虽然微服务架构经常会依赖于其他微服务来完成工作,但设计良好的微服务架构会内置冗余和失败保护机制,可以防止其他服务宕掉时导致整个系统失败;如果一个服务特别消耗某种资源,可以针对这种任务使用专门的硬件。
3.发明人发现,现有单体架构中,多个模块是紧耦合在一个单体中的,这样只要有一个模块出现问题就会导致整个单体宕掉;在一个单体架构中,不同的模块可能有不同的硬件需求,有的任务可能是cpu密集型的计算,有的可能需要大量的内存,但是由于整个应用程序运行在同一个服务器上,所以你无法使用针对特定任务的硬件。现有微服务架构中,一个最大的问题是微服务之间彼此通信,调用关系相互交叉,微服务多了以后难于维护;用户发起一个外部请求,可能需要多个服务协同来满足,而其中任何一个服务失败都会导致整个过程失败,而失败后数据无法有效的回滚,导致整个业务流程不完整。


技术实现要素:

4.本发明为了解决上述问题,提出了一种风电全自主巡检系统及其工作方法,其中,状态总线可以对消息进行统一调度,彻底解决了微服务架构中各模块之间彼此通信、相互交叉调用的情况,便于以后模块的扩展和管理。
5.为了实现上述目的,第一方面,本发明提供了一种风电全自主巡检系统,采用如下技术方案:
6.一种风电全自主巡检系统,包括业务模块、与所述业务模块双向通信的状态总线模块以及与所述状态总线模块双向通信的通信模块;
7.所述状态总线模块,用于接收所述业务模块及所述通信模块中的消息,判断接收消息的方向,根据消息方向查找对应消息流转的子状态机,在所述子状态机中判断消息类型,根据所述消息类型查找对应的状态动作,根据所述状态动作中预置的消息流转模块获得涉及的业务模块及通信模块作为预发送模块,根据预发送模块实例的不同生成对应主题的消息作为待发送消息,将待发送消息放入发送消息队列,遍历发送消息队列并执行发送;
8.所述通信模块,用于接收和发送外部消息,或接收和发送所述状态总线模块中的
消息。
9.进一步的,所述业务模块包巡检任务单元、警告分析单元、联动策略单元和人工智能单元。
10.进一步的,所述业务模块接收状态总线模块中的消息,查找消息对应通道以及通道对应的协议包对象;遍历接收消息队列,按照协议生成相应消息,将消息放入发送消息队列,遍历发送消息队列并执行发送。
11.进一步的,所述子状态机包括传感器、声纹装置、视频、机器人和无人机中的一种或几种。
12.进一步的,获得流程中涉及的业务模块及通信模块后,同一类模块部署了多个实例时,通过动态调度算法,确定将本次消息发送到哪个模块实例。
13.进一步的,根据每个实例部署硬件资源不同,预先设置每个实例的静态资源权重;
14.实时计算每个实例中待处理消息的数量,得到动态数量权重;
15.根据静态资源权重与动态数量权重之间的系数,通过计算静态资源权重与动态数量权重与系数乘积的差,得到权重;
16.对权重进行约分;
17.从最大权重开始调度。
18.进一步的,所述通信模块分为两层,第一层为通道层,第二层为协议层;所述通道层与所述协议层之间是多对多关系,一种通道类型挂载多种类型的协议包,一种协议包在多种通道上运行。
19.进一步的,所述通信模块接收外部消息后,查找通道预配置的协议包并将消息放入到协议包的接收队列,遍历接收消息队列并对消息做合法性和完整性验证,按照协议对消息进行解析,对消息做归一化处理转换成标准信息模型,将标准信息模型放入发送消息队列,遍历发送消息队列并将归一化消息发送出去。
20.进一步的,所述通信模块接收所述状态总线中的消息后,根据信息模型中的通信对象,查找对应通道,再查找通道对应的协议包对象;遍历接收消息队列,对归一化信息模型进行解析,按照协议生成相应消息,将消息放入发送消息队列,遍历发送消息队列并执行发送。
21.为了实现上述目的,第二方面,本发明还提供了一种风电全自主巡检系统工作方法,采用如下技术方案:
22.一种风电全自主巡检系统工作方法,采用了如第一方面中所述的风电全自主巡检系统,包括:
23.通信模块接收外部消息,查找通道预配置的协议包并将消息放入到协议包的接收队列,遍历接收消息队列并对消息做合法性和完整性验证,按照协议对消息进行解析,对消息做归一化处理转换成标准信息模型,将标准信息模型放入发送消息队列,遍历发送消息队列并将归一化消息发送出去;
24.状态总线模块接收通信模块中的消息:判断消息方向,根据消息方向查找对应消息流转的子状态机;在子状态机中判断消息类型,查找对应的状态动作;根据状态动作中预置的消息流转模块流程,获得流程中涉及的业务模块及通信模块;根据预发送模块实例的不同生成对应主题的消息,记录消息流转日志;将待发送消息放入发送消息队列,遍历发送
消息队列并执行发送;
25.业务模块接收状态总线模块中的消息,查找消息对应通道以及通道对应的协议包对象;遍历接收消息队列,按照协议生成相应消息,将消息放入发送消息队列,遍历发送消息队列并执行发送;
26.状态总线模块接收业务模块中的消息:判断消息方向,根据消息方向查找对应消息流转的子状态机;在子状态机中判断消息类型,查找对应的状态动作;根据状态动作中预置的消息流转模块流程,获得流程中涉及的业务模块及通信模块;根据预发送模块实例的不同生成对应主题的消息,记录消息流转日志;将待发送消息放入发送消息队列,遍历发送消息队列并执行发送;
27.通信模块接收状态总线中的消息,根据信息模型中的通信对象,查找对应通道,再查找通道对应的协议包对象;遍历接收消息队列,对归一化信息模型进行解析,按照协议生成相应消息,将消息放入发送消息队列,遍历发送消息队列并执行发送。
28.与现有技术相比,本发明的有益效果为:
29.本发明中状态总线模块接收业务模块或通信模块中的消息后:判断消息方向,根据消息方向查找对应消息流转的子状态机;在子状态机中判断消息类型,查找对应的状态动作;根据状态动作中预置的消息流转模块流程,获得流程中涉及的业务模块及通信模块;同一类模块部署了多个实例时,通过动态调度算法,确定将本次消息发送到哪个模块实例;根据预发送模块实例的不同生成对应主题的消息,记录消息流转日志;将待发送消息放入发送消息队列,遍历发送消息队列并执行发送;通过上述流程,状态总线模块可以对接收的业务模块或通信模块中的消息进行统一调度,彻底解决了微服务架构中各模块之间彼此通信、相互交叉调用的情况,便于以后模块的扩展和管理。
附图说明
30.构成本实施例的一部分的说明书附图用来提供对本实施例的进一步理解,本实施例的示意性实施例及其说明用于解释本实施例,并不构成对本实施例的不当限定。
31.图1为本发明实施例1的系统框架图;
32.图2为本发明实施例1的系统工作流程图;
33.图3为本发明实施例1的插件模式示意图。
具体实施方式:
34.下面结合附图与实施例对本发明作进一步说明。
35.应该指出,以下详细说明都是示例性的,旨在对本技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本技术所属技术领域的普通技术人员通常理解的相同含义。
36.实施例1:
37.如图1所示,本实施例提供了一种风电全自主巡检系统,包括业务模块、与所述业务模块双向通信的状态总线模块以及与所述状态总线模块双向通信的通信模块;
38.所述业务模块,用于各种业务功能的实现;所述业务模块包巡检任务单元、警告分析单元、联动策略单元和人工智能单元,具体的,所述巡检任务单元用于任务的编辑导入导
出及任务报告生成等;所述警告分析单元用于告警阈值设置、阈值判断及算法分析等;所述联动策略单元用于联动策略的编辑及执行;所述人工智能单元用于基于深度学习的算法识别。
39.所述状态总线模块,用于接收所述业务模块及所述通信模块中的消息,判断接收消息的方向,根据消息方向查找对应消息流转的子状态机,在所述子状态机中判断消息类型,根据所述消息类型查找对应的状态动作,根据所述状态动作中预置的消息流转模块获得涉及的业务模块及通信模块作为预发送模块,根据预发送模块实例的不同生成对应主题的消息作为待发送消息,将待发送消息放入发送消息队列,遍历发送消息队列并执行发送;
40.所述通信模块,用于接收和发送外部消息,或接收和发送所述状态总线模块中的消息。
41.具体的,所述业务模块以业务相关性为划分依据,可划分为多个业务模块,主要用于业务功能的实现,不关心消息的差异化及流转,本实施例中,所述业务模块可以包括业务模块、与所述业务模块双向通信的状态总线模块以及与所述状态总线模块双向通信的通信模块;所述状态总线模块从业务流程角度动态配置消息的流转流程及流转执行;所述通信模块分为两层,第一层为通道层,第二层为协议层,通道层与协议层之间是多对多关系,一种通道类型可以挂载多种类型的协议包,一种协议包也可以在多种通道上运行,该模块主要完成广泛的数据收发,将差异化消息转成标准消息,为业务模块提供数据支撑。
42.本实施例的主要业务流程为:
43.消息在所述通信模块与所述业务模块之间,以及所述业务模块之间流转;其中,所述状态总线模块是本架构的独特优势,所述状态总线模块可以对消息进行统一调度,解决了微服务架构中各模块之间彼此通信、相互交叉调用的情况,便于以后模块的扩展和管理。
44.s1、所述通信模块接收外部消息,查找通道预配置的协议包并将消息放入到协议包的接收队列,线程定时遍历接收消息队列并对消息做合法性和完整性验证,按照协议对消息进行解析,对消息做归一化处理转换成标准信息模型,将标准信息模型放入发送消息队列,线程定时遍历发送消息队列并将归一化消息发送出去;
45.s2、所述状态总线模块接收所述通信模块中的消息并进行统一调度;具体为:
46.s2.1、判断消息方向,根据消息方向查找对应消息流转的子状态机,根据风电场数据采集装置的类型,可以划分为传感器、声纹装置、视频、机器人、无人机等多类子状态机;
47.s2.2、在子状态机中进一步判断消息类型,查找对应的状态动作;具体为:
48.s2.2.1、预先定义状态动作;例如:
49.class robotrealtimealarmstate:public state{
50.public:
51.bool handle(message&message);
52.};
53.s2.2.2、依据配置文件,动态生成消息类型(事件)与状态动作的规则;例如:
54.states.insert(std::pair《int,state*》(messagecommunicationtype::message_down_robot_realtime_device_alarm,new robotrealtimealarmstate()));
55.s2.2.3、按照预先配置的消息流转规则,当接收到不同消息类型时,执行不同的状态动作;例如:
[0056][0057]
s2.3、根据状态动作中预置的消息流转模块流程,获得流程中涉及的业务模块及通信模块;消息流转模块包括预处理模块、实时数据模块、任务模块和联动模块等;例如:
[0058]
[0059][0060]
s2.4、同一类模块部署了多个实例时,通过动态调度算法,确定将本次消息发送到哪个模块实例;具体为:
[0061]
s2.4.1、根据每个实例部署硬件资源不同,预先设置每个实例的静态资源权重;例如:三个实例a、b、c的静态权重分别为1:1:3
[0062]
s2.4.2、实时计算每个实例中待处理消息的数量,得到动态数量权重;例如:三个实例a、b、c中待处理消息数量分别为1、2、3
[0063]
s2.4.3、根据静态资源与动态数量权重之间的系数k,按照公式静态资源权重-k*动态数量权重,得到权重;例如:三个实例的权重为:1-1*0.2:1-2*0.2:3-3*0.2,计算得到0.8:0.6:2.4
[0064]
s2.4.4、对权重进行约分;例如:计算0.8:0.6:2.4,得到4:3:12
[0065]
s2.4.5、从最大权重c开始调度。
[0066]
s2.5、根据预发送模块实例的不同生成对应主题的消息,记录消息流转日志;
[0067]
s2.6、将待发送消息放入发送消息队列,线程定时遍历发送消息队列并执行发送;
[0068]
s3、所述业务模块接收所述状态总线的消息,线程定时遍历接收消息队列,进行业务处理,将待发送消息放入发送消息队列,线程定时遍历发送消息队列并执行发送;
[0069]
s4、所述状态总线接收所述业务模块的消息:再次执行步骤s2中的内容,对消息进行统一调度;
[0070]
s5、所述通信模块接收所述状态总线的消息,根据信息模型中的通信对象,查找对应通道,再查找通道对应的协议包对象;线程定时遍历接收消息队列,对归一化信息模型进行解析,按照协议生成相应消息,将消息放入发送消息队列,线程定时遍历发送消息队列并执行发送;
[0071]
s6、结束,将转化后的通信消息发送出去,整个流程结束。
[0072]
如图3所示,在其他实施例中,所述业务模块、所述通信模块均采用插件模式,能够根据应用场景通过配置实现灵活部署,每个模块可以独立部署,也可以一部分模块组合部署。
[0073]
配置文件,通过配置文件灵活定义启用哪些插件及插件配置信息;例如:
[0074]
插件唯一标识={是否启用,名称,启用线程数,配置信息}
[0075]
51={"isenable":"true","name":"alarmmanage","threadnum":"3","info":[]}
[0076]
1001={"isenable":"true","name":"up","threadnum":"3","info":[{"id":"1","addr":"tcp-h 127.0.0.1-p 50001","size":"10"}]}
[0077]
插件定义,定义插件的唯一标识及接口;例如:
[0078]
//1.定义插件id
[0079]
static const x3clsidclsid_alarmmanage("cecfef21-ee49-4468-a7f6-6da0653091df");
[0080]
//2.定义插件接口
[0081]
class ix_alarmmanage:public ix_object
[0082]
{
[0083]
public:
[0084]
x3define_iid(ix_alarmmanage)
[0085]
//1.初始化
[0086]
virtual bool initialize(queuebaseinterface*module_queue,size_t thread_num)=0;
[0087]
//2.入消息队列
[0088]
virtual bool enqueue(message msg)=0;
[0089]
//3.定义接口
[0090]
......;
[0091]
}
[0092]
插件加载,根据配置文件动态加载插件并调用初始化接口;例如:
[0093][0094]
[0095]
分布式,每个模块均基于消息总线通信,可以为不同模块配置适合的硬件资源,对于处理性能要求高的模块,也可以通过负载均衡的方式部署多个实例,提升整个系统的性能。
[0096]
高可用性,在可靠性要求高的场景,可以通过配置主副模块的方式提高某些模块或整个系统的高可用性。
[0097]
实施例2:
[0098]
一种风电全自主巡检系统工作方法,采用了如实施例1中所述的风电全自主巡检系统,包括:
[0099]
通信模块接收外部消息,查找通道预配置的协议包并将消息放入到协议包的接收队列,遍历接收消息队列并对消息做合法性和完整性验证,按照协议对消息进行解析,对消息做归一化处理转换成标准信息模型,将标准信息模型放入发送消息队列,遍历发送消息队列并将归一化消息发送出去;
[0100]
状态总线模块接收通信模块中的消息:判断消息方向,根据消息方向查找对应消息流转的子状态机;在子状态机中判断消息类型,查找对应的状态动作;根据状态动作中预置的消息流转模块流程,获得流程中涉及的业务模块及通信模块;根据预发送模块实例的不同生成对应主题的消息,记录消息流转日志;将待发送消息放入发送消息队列,遍历发送消息队列并执行发送;
[0101]
业务模块接收状态总线模块中的消息,查找消息对应通道以及通道对应的协议包对象;遍历接收消息队列,按照协议生成相应消息,将消息放入发送消息队列,遍历发送消息队列并执行发送;
[0102]
状态总线模块接收业务模块中的消息:判断消息方向,根据消息方向查找对应消息流转的子状态机;在子状态机中判断消息类型,查找对应的状态动作;根据状态动作中预置的消息流转模块流程,获得流程中涉及的业务模块及通信模块;根据预发送模块实例的不同生成对应主题的消息,记录消息流转日志;将待发送消息放入发送消息队列,遍历发送消息队列并执行发送;
[0103]
通信模块接收状态总线中的消息,根据信息模型中的通信对象,查找对应通道,再查找通道对应的协议包对象;遍历接收消息队列,对归一化信息模型进行解析,按照协议生成相应消息,将消息放入发送消息队列,遍历发送消息队列并执行发送。
[0104]
以上所述仅为本实施例的优选实施例而已,并不用于限制本实施例,对于本领域的技术人员来说,本实施例可以有各种更改和变化。凡在本实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本实施例的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献