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

一种基于MQTT的通用数据采集系统的制作方法

2022-05-26 18:41:08 来源:中国专利 TAG:

一种基于mqtt的通用数据采集系统
技术领域
1.本发明涉及数据采集技术领域,具体涉及一种基于mqtt的通用数据采集系统。


背景技术:

2.实时数据库诞生于国外,主要是因为现代工业制造流程及大规模工业自动化的发展,导致大量的测量数据需要集成和存储,而采用关系数据库难以满足速度和容量的要求,实时数据库其实并不单单只是一个数据库,而是一个系统,包括对各类工业接口的数据采集,海量监测数据的压缩、存储及检索,基于监测数据的反馈及控制功能等。
3.时序数据库主要是实时数据库的数据存储部分,但是,由于它采用了新的技术,极大地扩展了数据的容量,除了数据点和时间戳之外,还提供标签和内容等对数据的描述,并且提供各种聚合查询,弥补了实时库的缺陷。但是,时序数据库不提供工业接口、下行控制等功能,这些都需要开发人员自行开发,或者将原有的接口与时序数据库对接。
4.在云计算的时代,实时数据库的一些缺点就慢慢的显露出来了。由于实时数据库都是出售给大型工业企业的,因此价格昂贵,在物联网时代,对于中小工业企业来说,是个不小的成本。再次,传统实时数据库在部署时不够方便灵活,传输也更多的考虑工业网络,甚少考虑互联网的情况,不太适应当下云计算环境的部署。
5.时序数据库在2017年出现了大量的开源和商业产品,时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。时序数据库其实主要是实时数据库的数据存储部分,但是,由于它采用了新的技术,极大地扩展了数据的容量,除了数据点和时间戳之外,还提供标签和内容等对数据的描述,并且提供各种聚合查询,弥补了实时库的缺陷。但是,时序数据库具备通用互联网消息接口,不提供工业接口、下行控制等功能,这些都需要开发人员自行开发,或者将原有的接口与时序数据库对接。mqtt消息队列遥测传输是iso标准(iso/iec prf 20922)下基于发布/订阅范式的消息协议。它工作在tcp/ip协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。
6.基于此情况,开发一种既满足原有实时数据库采集方式又满足互联网架构时序数据库采集方式的采集架构是推进时序数据库完成实时数据库国产化替代的关键一环。


技术实现要素:

7.为此,本发明提供一种基于mqtt的通用数据采集系统,以解决现有时序数据库与实时数据库功能难以结合并行的问题。
8.为了实现上述目的,本发明提供如下技术方案:
9.本发明公开了一种基于mqtt的通用数据采集系统,所述系统包括:数据采集层、mqtt中间层、数据控制层和数据归档层,所述数据采集层完成各种控制系统工业接口协议的转换和数据采集存储,接收控制指令、发送反馈消息、发送压缩数据流;所述mqtt中间层对多种消息进行发布、订阅管理和客户端连接管理;所述数据控制层提供时序数据库、数据
采集层的基础数据管理、数据查询、sql工具功能,完成控制指令的下发,反馈消息的接收、数据归档的管理及接口运行状态的监控;所述数据归档层完成压缩数据流的接收、解压、并发控制写入,接收控制层指令,根据正常采集数据流和存储转发数据流,采用动态线程争用方式完成各接口数据的解压、大批量快速写入。
10.进一步地,所述数据采集层支持各种工业控制系统接口和通用互联网消息传递接口,按照管理方式分为:工业控制系统接口采集和物联网设备接口采集;
11.所述工业控制系统接口采集包括:多接口管理、接口测试、接口启停、采集配置接收、数据的多种采集方式、采集频率、采集日志、网络中断后数据的本地存储,网络恢复后数据的转发,同时还需要反馈各种状态包括:接口启停状态、接口采集状态、所有采集数据的质量状态、存储转发状态;
12.所述物联网设备接口采集通过将程序封装到单片机形式提供,包括:接口状态反馈、采集配置、采集数据上传,存储转发。
13.进一步地,所述mqtt中间层通过定制方式和通用方式完成消息的发布、订阅管理和客户端连接管理,所述通用方式采用互联网通用mqtt产品实现,所述定制方式利用mqtt协议自主定制,在将产品发布到互联网时,采用通用方式,在将产品发布到局域网时,既可以采用通用方式也可以采用定制方式。
14.进一步地,所述数据控制层集成了接口信息管理、设备管理、数据安全通信和消息订阅能力的管理平台,针对工业控制系统采集接口,采用集中管控方式,由数据控制层定义采集的方式、接口的启停、采集的频率、采集的分组、采集位号的管理,实现采集配置的下发、采集状态的监控、日志的记录、数据归档的分配;
15.针对物联网采集接口,采用主动配置管理,被动接收数据方式,由数据控制层定义智能设备基本信息、数据规则、数据通信的设置,实现设备状态的监控及数据归档的分配。
16.进一步地,所述数据控制层在应用过程中,分为后端框架和前端框架,所述后端框架使用entityframeworkcore应用程序数据访问技术,能够扩展并且支持跨平台,支持数据库:microsoft sqlserver 2012 、mysql 5.7 、oracle(11g\12c)、sqlite、postgresql;
17.所述前端框架基于ng-alain前端框架进行开发,ng-alain前端框架为企业中后台前端/设计解决方案脚手架,提供通用性业务模块。
18.进一步地,所述后端框架包括:模块化组件系统设计模块、自动化注册模块、数据存储设计模块、身份认证设计模块、功能权限授权模块和数据权限授权模块;所述模块化组件系统设计模块设计一个模块系统,每个模块以一个实现了模块基类hsharppack的类作为入口,完成本模块的服务添加addservice和模块初始化工作;
19.所述自动化注册模块在系统初始化时,通过反射检索程序集的方式,检索出所有服务类型servicetype与服务实现implementationtype及生命周期类型servicelifetime的相关数据,将依赖注入服务注册到服务容器servicecollection中;
20.所述数据存储设计模块通过unitofwork-repository的模式设计一个泛型的实体仓储接口irepository,设计iunitofworkmanager接口来管理多数据库连接事务,每个iunitofwork,通过iunitofwork模式管理dbcontext的创建与缓存;
21.所述身份认证设计模块使用aspnetcore原生的用户身份认证框架,身份认证相关操作统一使用usermanager,rolemanager两个入口;
22.所述功能权限授权模块和数据权限授权模块自动收集系统的所有业务点ifunction和数据实体ientityinfo,用于对系统的功能权限、数据权限、数据缓存、操作审计实用功能提供数据支持。
23.进一步地,所述功能权限授权模块的授权流程为:
24.框架自动创建功能点function信息,存储到数据库;
25.用户创建树形模块module信息,并创建模块与功能点的分配关系,存储到数据库;将模块module分配给角色role;将角色role分配给用户user。
26.进一步地,所述数据权限授权模块的授权流程为:新增角色与数据实体操作对应信息,增角色对数据实体的筛选规则。
27.进一步地,所述数据归档层提供规范的webapi接口,启用功能模块或第三方产品对接,webapi接口包括数据归档处理进度的预览、下游采集服务中各个数据接口的运行状态监控、启用或停止指定接口的归档处理、写入性能实时计算;在应用过程中,数据归档层封装mqtt中间件,进行多线程及动态线程分配。
28.进一步地,所述多线程及动态线程分配过程中服务启动流程为:
29.管理进程读取mysql库的接口列表,动态创建各个接口的归档线程;
30.管理进程启动mqtt监听线程,监听运行监测测试主题;
31.各接口归档线程初始化基本信息;
32.各接口归档线程开启mqtt监听线程;各接口归档线程启动一个写入td线程。
33.动态线程分配过程中基于线程数分配原则进行分配,先超限先入列,归档服务将对动态处理队列做出栈处理,将可用动态线程分配额全部分配给该接口的归档服务线程,直到该接口的队列数量小于等于最低下限,则自动释放动态线程分配额,归档服务继续对动态处理队列做出栈处理,将动态线程可分配额分配对出栈接口,如果动态处理队为空,则不处理。
34.本发明具有如下优点:
35.本发明公开了一种基于mqtt的通用数据采集系统,满足了实时数据库采集控制的所有要求,达到时序数据库每秒百万级数据写入要求,可应用于企业内部局域网,又可应用于互联网,并且能够根据实际用户需要和硬件,定制数据的完整性需求,三层数据缓存机制,最大限度的保证数据传输的稳定性。
附图说明
36.为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引申获得其它的实施附图。
37.本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。
38.图1为本发明实施例提供的一种基于mqtt的通用数据采集系统架构图;
39.图2为本发明实施例提供的数据控制层后端框架结构图;
40.图3为本发明实施例提供的数据控制层前端框架结构图;
41.图4为本发明实施例提供的多线程及动态线程分配架构图。
具体实施方式
42.以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
43.实施例
44.参考图1,本实施例公开了一种基于mqtt的通用数据采集系统,所述系统包括:数据采集层、mqtt中间层、数据控制层和数据归档层,所述数据采集层完成各种控制系统工业接口协议的转换和数据采集存储,接收控制指令、发送反馈消息、发送压缩数据流;所述mqtt中间层对多种消息进行发布、订阅管理和客户端连接管理;所述数据控制层提供时序数据库、数据采集层的基础数据管理、数据查询、sql工具功能,完成控制指令的下发,反馈消息的接收、数据归档的管理及接口运行状态的监控;所述数据归档层完成压缩数据流的接收、解压、并发控制写入,接收控制层指令,根据正常采集数据流和存储转发数据流,采用动态线程争用方式完成各接口数据的解压、大批量快速写入。
45.所述数据采集层支持各种工业控制系统接口和通用互联网消息传递接口,如opc/da/ua/a&e、串口、104规约、odbc、modbus、redis、mqtt,按照管理方式分为:工业控制系统接口采集和物联网设备接口采集;
46.所述工业控制系统接口采集包括:多接口管理、接口测试、接口启停、采集配置接收、数据的多种采集方式(同步/异步/订阅)、采集频率、采集日志、网络中断后数据的本地存储,网络恢复后数据的转发,同时还需要反馈各种状态包括:接口启停状态、接口采集状态、所有采集数据的质量状态、存储转发状态;
47.所述物联网设备接口采集通过将程序封装到单片机形式提供,包括:接口状态反馈、采集配置、采集数据上传,存储转发。
48.mqtt中间层通过定制方式和通用方式完成消息的发布、订阅管理和客户端连接管理,所述通用方式采用互联网通用mqtt产品实现,如emqx、hivemq、rabbitmq,所述定制方式利用mqtt协议自主定制,在将产品发布到互联网时,采用通用方式,在将产品发布到局域网时,既可以采用通用方式也可以采用定制方式。
49.数据控制层集成了接口信息管理、设备管理、数据安全通信和消息订阅能力的管理平台,针对工业控制系统采集接口,采用集中管控方式,由数据控制层定义采集的方式、接口的启停、采集的频率、采集的分组、采集位号的管理,实现采集配置的下发、采集状态的监控、日志的记录、数据归档的分配;
50.针对物联网采集接口,采用主动配置管理,被动接收数据方式,由数据控制层定义智能设备基本信息、数据规则、数据通信的设置,实现设备状态的监控及数据归档的分配。
51.数据控制层应用asp.net core angular技术路线,基础配置信息存放在mysql数据库,技术成熟稳定又保持先进性。采用b/s架构使系统能集中部署分布使用,有利于系统
升级维护。使用分工更明确的前后端分离开发模式,能快速扩展业务功能,不影响现有功能的正常使用,满足系统运行要求的同时,实现成本最小化。数据控制层支持跨平台及云平台安装部署,界面友好、ui组件完备,有完善的权限、日志、消息管理及报表功能。
52.数据控制层在应用过程中,分为后端框架和前端框架,所述后端框架使用entityframeworkcore应用程序数据访问技术,entityframeworkcore简称efcore,框架的数据存储基于efcore的orm实现的,能够扩展并且支持跨平台,支持数据库:microsoft sqlserver 2012 、mysql 5.7 、oracle(11g\12c)、sqlite、postgresql。
53.参考图2,后端框架包括:模块化组件系统设计模块、自动化注册模块、数据存储设计模块、身份认证设计模块、功能权限授权模块和数据权限授权模块;所述模块化组件系统设计模块设计一个模块系统,每个模块以一个实现了模块基类hsharppack的类作为入口,完成本模块的服务添加addservice和模块初始化工作;一个模块是一系列高内聚低耦合的服务组织,对象提供一个功能,如缓存功能,日志功能,数据存储功能或完成一组业务处理如身份认证,权限授权;
54.所述自动化注册模块在系统初始化时,通过反射检索程序集的方式,检索出所有服务类型servicetype与服务实现implementationtype及生命周期类型servicelifetime的相关数据,将依赖注入服务注册到服务容器servicecollection中;
55.所述数据存储设计模块通过unitofwork-repository的模式设计一个泛型的实体仓储接口irepository,避免每个实体都需实现一个仓储的繁琐操作。设计iunitofworkmanager接口来管理多数据库连接事务,每个iunitofwork,通过iunitofwork模式管理dbcontext的创建与缓存,使同连接对象的多个上下文共享事务,达到多上下文的事务同步能力;
56.所述身份认证设计模块使用aspnetcore原生的用户身份认证框架,身份认证相关操作统一使用usermanager,rolemanager两个入口,保持了原生identity的体系强大性与功能完整性;
57.所述功能权限授权模块和数据权限授权模块自动收集系统的所有业务点ifunction和数据实体ientityinfo,用于对系统的功能权限、数据权限、数据缓存、操作审计实用功能提供数据支持。
58.从底层开始,自动收集了系统的所有业务点(ifunction)和数据实体(ientityinfo),用于对系统的功能权限、数据权限、数据缓存、操作审计等实用功能提供数据支持
59.数据实体entityinfo与数据库中的各个数据实体一一对应,基于数据实体,可以配置实现数据权限,基于角色-实体的数据权限设计,通过配置实现某个角色是否有权访问某个实体数据;
60.经常遇到的组织机构数据问题。总经理可看到整个组织,部门经理只能看到自己的组织。
61.功能权限授权模块的授权流程为:
62.框架自动创建功能点function信息,存储到数据库;
63.用户创建树形模块module信息,并创建模块与功能点的分配关系,存储到数据库;将模块module分配给角色role;将角色role分配给用户user。
64.数据权限授权模块的授权流程为:新增角色与数据实体操作对应信息,增角色对数据实体的筛选规则。
65.数据权限验证流程为:
66.系统初始化时,将角色-实体的筛选规则加载至缓存。
67.数据查询时,根据当前用户的角色列表及对应筛选规则,自动形成数据查询表达式,从而得到数据权限限制下的合法数据。
68.参考图3,所述前端框架基于ng-alain前端框架进行开发,ng-alain前端框架为企业中后台前端/设计解决方案脚手架,提供通用性业务模块。让开发者更加专注于业务,秉承ant design的设计价值观,目标非常简单,希望在angular上面开发企业后台更简单、更快速。涉及框架为:angular、ng-zorro、ng-alain,技术栈为nodejs、yarn、npm、typescript。
69.所述数据归档层,提供规范的webapi接口,启用功能模块或第三方产品对接,webapi接口包括数据归档处理进度的预览、下游采集服务中各个数据接口的运行状态监控、启用或停止指定接口的归档处理、写入性能实时计算;在应用过程中,数据归档层封装mqtt中间件,进行多线程及动态线程分配。
70.封装mqtt中间件,进行灵活简洁的客户端配置,数据归档层提供了mqtt的配置,包括服务器地址、用户名、密码、默认主题等。数据归档初始化后用于访问mqtt;
71.提供标准接口,mqtt是一个基于客户端-服务器的消息发布/订阅传输协议。数据归档层封装并提供规范的连接/断开mqtt服务器接口、断线重连接口、消息订阅接口、消息推送接口、订阅消息接收后处理接口。
72.在进行动态线程分配时,服务启动流程管理进程读取mysql库的接口列表,动态创建各个接口的归档线程;管理进程启动mqtt监听线程,监听运行监测测试主题prodb/runstate/test;各接口归档线程初始化基本信息也是归档处理进度监控的基本信息,包括:接口名称、归档运行状态,默认空值(running-归档pause-暂停stop-停止)、当前队列剩余数量、sqlite剩余数量、接口采集进程状态(0-正常其他-异常)、opc状态(0-正常其他-异常)、存储转发状态、是否存储转发(0:否,1:转发,2:存储)、存储转发数据量(条);
73.各接口归档线程开启mqtt监听线程,主题包括:数据推送主题(prodb/datapush/接口简称)、数据状态推送主题(prodb/datastate)、)运行监测主题(prodb/runstate/接口简称);
74.各接口归档线程启动1个写入td线程,如果队列数量为0,则线程休眠1秒,如果sqlite有剩余数量,说明存在异常数据,优先处理,当sqlite数量 队列数量》150万时,主动向mqtt的运行监测回复主题(prodb/runstate/接口简称-ans)发送busy,通知采集服务暂停推送该接口实时数据。直到sqlite数量处理完成,且sqlite数量 队列数量《=20万,此时主动向mqtt的运行监测回复主题(prodb/runstate/接口简称-ans)发送ok,通知采集进程恢复推送该接口实时数据,其中队列最大数量和最小数量可根据实际情况自定义指定。
75.参考图4,动态分配线程的线程分配原则为:静态线程数量 动态分配线程数量尽量不大于16,当接口数量大于等于16的时候,此时静态线程数也大于等于16,即动态线程可分配额为0。那么固定动态可分配线程数量从1开始测试,得出客户生产环境写td性能最大化的线程数量。其中动态可分配线程数可在配置文件中自定义调整。
76.动态线程分配方法为:谁先超限,谁入队列,哪个接口的内存数据队列数量超过设
定的上限,那么该接口名称被归档服务自动记录到动态处理队列,先入先出,归档服务将对动态处理队列做出栈处理,将可用动态线程分配额全部分配给该接口的归档服务线程,直到该接口的队列数量小于等于最低下限,则自动释放动态线程分配额,归档服务继续对动态处理队列做出栈处理,将动态线程可分配额分配对出栈接口。如果动态处理队为空,则不处理。有且仅有一个接口独占所有可用动态线程分配额。
77.本实施例公开的一种基于mqtt的通用数据采集系统,满足了实时数据库采集控制的所有要求,达到时序数据库每秒百万级数据写入要求,可应用于企业内部局域网,又可应用于互联网,并且能够根据实际用户需要和硬件,定制数据的完整性需求,三层数据缓存机制,最大限度的保证数据传输的稳定性。
78.虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献