掌桥专利:专业的专利平台
掌桥专利
首页

基于消息队列的多协议自动化设备监控系统及其控制方法

文献发布时间:2023-06-19 11:19:16


基于消息队列的多协议自动化设备监控系统及其控制方法

技术领域

本发明涉及自动化设备监控技术领域,具体涉及一种基于消息队列的多协议自动化设备监控系统及其控制方法。

背景技术

目前,自动化设备的监控系统拥有着广泛的应用场景。例如,高楼大厦中针对调节温度以及空气流通的排气扇监控系统;温室农业中的,为了保持恒定的温度以及光照强度而设计的监控系统等。

随着时代发展,传统监控系统已经不能满足时代的要求了。虽然当前的监控系统对底层设备的通讯没有太大的改变,都是基于RS485标准的串口通讯标准。但是目前社会对监控系统的要求是逐渐提高。以往的监控系统以一个客户端的形式,利用文件系统的方式存储自动化设备的设置数据以及实时数据,通过串口,发送串口数据,从而监控系统中的所有自动化设备。这种监控方式监控的自动化设备数据量少,监控场景少,已经不能满足现在的要求了。

现在的监控系统中的设备数量大,以往系统只需要监控10万左右的自动化设备,现在可能到达的百万数量级,甚至千万数量级;以往的监控系统只需要对一个地方的自动化设备进行监控,目前对针对处于不同地方的自动化设备,需要同时进行监控;自动化设备类型多,以往的工厂监控的是单一自动化设备,现在监控系统需要监控多种不同自动化设备,代表这系统需要同时支持多种串口协议;以往的监控系统对自动化设备的优先控制功能支持不太好,需要进一步地优化。

发明内容

为了克服现有技术存在的缺陷与不足,本发明提供一种基于消息队列的多协议自动化设备监控系统及其控制方法,通过消息队列在系统中进行信息的传递,实现数据中心与控制模块的进行有效分离,从而提高系统的可组装性,可扩展性,让系统不仅仅只是监控一种自动化设备,不仅仅只是监控一台串口服务器下的自动化设备,让监控系统脱离物理连接的依赖。

为了达到上述目的,本发明采用以下技术方案:

本发明提供一种基于消息队列的多协议自动化设备监控系统,包括:任务功能模块、数据中心模块和控制模块;

所述任务功能模块用于管理系统功能及底层自动化设备的系统任务,将系统任务推入任务队列;

所述数据中心模块包括Redis内存数据库以及MySQL;

所述Redis内存数据库用于存储自动化设备的实时状态,实时的设置信息以及报警信息,所述MySQL用于存储用户信息,区域信息和自动化设备设置信息;

所述控制模块包括任务队列处理器与多个串口控制器;

所述任务队列处理器用于获取任务队列中的系统任务并转化成控制命令,将控制命令推入对应的串口队列中;

所述串口控制器包括串口队列处理器和串口协议解析器,所述串口队列处理器用于获取串口队列中的控制命令,串口协议解析器用于将控制命令组装成串口控制命令;

所述串口控制器将串口控制命令发送到底层自动化设备中,控制底层自动化设备,所述串口控制器监听底层自动化设备的返回信息,解析后推入同步信息队列中;

所述数据中心模块通过同步信息队列,将控制模块扫描得到的自动化设备数据实时更新Redis内存数据库中的自动化设备状态缓存表,同步更新MySQL中的自动化设备设置。

作为优选的技术方案,所述系统任务设有优先级,采用优先级队列作为任务队列,优先执行高优先级的任务,所述控制模块的任务队列处理器通过检测数据中心模块中的自动化设备设置缓存表,获得高优先级的任务内容,然后组装成对应的高优先级控制命令。

作为优选的技术方案,所述底层自动化设备包括串口,中继器以及自动化设备,所述串口控制器与串口连接,所述串口与中继器连接,所述中继器与自动化设备连接,控制模块通过串口查询中继器中的自动化设备信息,以及对中继器进行对应的控制,所述中继器用于实时获取自动化设备的状态,以及将控制命令转化为自动化设备的控制命令,完成对自动化设备的控制。

作为优选的技术方案,所述串口控制器分别与底层自动化设备连接,每个串口队列处理器处理一条串口队列和一个串口。

本发明还提供一种基于消息队列的多协议自动化设备监控系统的控制方法,包括下述步骤:

串口控制器初始化;

任务功能模块将系统任务推入任务队列中;

控制模块中的任务队列处理器获取任务队列中的系统任务;

任务队列处理器获取系统任务中的自动化设备ID,通过数据中心模块获取自动化设备设置缓存表中自动化设备的实时任务信息;

任务队列处理器将自动化设备的ID与自动化设备实时设置信息,组装成系统的控制命令;

任务队列处理器通过控制命令中的串口ID,获取自动化设备需要发送到系统的串口队列,将控制命令推入对应的串口队列中;

串口队列处理器监听串口队列中的控制命令,若串口队列中存在数据则获取串口队列中的控制命令,若不存在数据,则继续监听;

串口协议解析器将控制命令组装成串口控制命令;

判断串口协议解析器是否能将控制命令转换为串口控制命令,若能转换,则获取串口控制命令后,串口队列处理器直接将数据发送到串口中,若不能转换,则将控制命令丢弃;

判断串口中返回数据是否合法,若不合法,则说明发送失败,串口队列处理器重新发送串口控制命令,如果发送失败次数超过阈值,则说明串口控制命令发送失败,返回重新监听串口队列中的控制命令;

获取串口接收到的数据,串口队列处理器通过串口协议解析器检测串口接收到的数据的合法性,如果合法,串口协议解析器将串口返回的自动化设备信息进行解析,封装成自动化设备返回信息,如果不合法,重新发送串口控制命令,如果发送失败次数超过阈值,则说明串口控制命令发送失败,返回重新监听串口队列中的控制命令;

串口队列处理器将自动化设备返回信息,推入同步信息队列;

数据中心模块读取同步信息队列中的数据,实时同步自动化设备状态缓存表。

作为优选的技术方案,所述串口控制器初始化具体步骤包括:

串口控制器先读取串口控制器内部配置文件;

设置串口控制器ID,同时连接监控系统;

判断连接监控系统是否成功,如果成功则读取串口协议规则文件,否则串口控制器停止运行;

检测串口协议规则文件的合法性,如果不合法,串口控制器停止运行,如果合法则解析串口规则文件,生成对应的串口协议解析器;

访问监控系统,获取当前串口控制器需要控制的串口;

串口控制器打开需要被控制的串口;

检测串口是否打开成功,如果打开失败,则删除串口对应的监控系统中的串口队列,打开成功,生成串口队列处理器;

检测是否还有下一个需要打开的串口,如果需要打开下一个串口,串口控制器打开需要被控制的串口并重新检测串口是否打开成功,否则,串口控制器的初始化完成。

作为优选的技术方案,所述串口控制器内部配置文件的内容采用XML形式建立,内容包括自动化设备监控系统的IP地址和控制器的编号ID。

作为优选的技术方案,所述串口协议规则文件中的串口协议采用基于UART的串口规则协议或基于MODBUS RTU协议编写的串口规则协议。

作为优选的技术方案,检测串口协议规则文件的合法性,所述串口协议采用基于UART的串口规则协议,返回数据不合法的检测步骤如下:

返回数据长度为0,代表没有接收到串口数据;

返回数据长度小于70,代表没有接收到完整的串口返回数据;

返回的串口数据没有找到协议头部以及协议尾部,代表返回的串口数据错误;

返回的串口数据,进行CRC校验失败;

返回的串口数据,解析后发现与发送的中继器不匹配。

作为优选的技术方案,检测串口协议规则文件的合法性,所述串口协议采用基于MODBUS RTU协议,返回数据不合法的检测步骤如下:

返回数据长度为0,代表没有返回数据;

发送数据后,中继器返回MODBUS RTU的异常错误数据,代表协议发送失败。

本发明与现有技术相比,具有如下优点和有益效果:

(1)本发明通过消息队列在系统中进行信息的传递,实现数据中心与控制模块的进行有效分离,从而提高系统的可组装性,可扩展性,让系统不仅仅只是监控一种自动化设备,不仅仅只是监控一台串口服务器下的自动化设备,让监控系统脱离物理连接的依赖。

(2)本发明通过优先级消息队列控制自动化设备,高优先级的控制操作可以优先控制底层自动化设备,实现一些特定场景的优先控制。

(3)本发明可以兼容多种协议,解决多种底层自动化设备和系统的通讯问题。

附图说明

图1为本发明基于消息队列的多协议自动化设备监控系统结构示意图;

图2为本发明串口控制器中的初始化流程图;

图3为本发明监控自动化设备的流程图;

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

实施例

如图1所示,本实施例提供一种基于消息队列的多协议自动化设备监控系统,用于大型场景的自动化设备监控,可以管理大型场景,实时监控场景中的自动化设备状态,实时控制自动化设备转速,对自动化设备进行紧急状态控制,设置自动化设备的速度,制定定时任务、消防任务等。在实施例中自动化设备监控系统通过串口通讯的方式与底层的自动化设备进行交互。具体包括:任务功能模块、数据中心模块以及控制模块;

任务功能模块:主要对系统任务进行管理,系统中存在很多针对底层自动化设备的任务,如监控系统实时扫描底层自动化设备,获取自动化设备实时状态的轮询任务。在监控系统中的系统任务分别为:轮询任务,设置任务,定时任务,面板任务,消防任务,紧急任务以及自检任务。部分系统任务是系统启动时,自动触发的,如轮询任务;部分是通过特殊情况触发的,如定时任务,需要到一个时间点才会触发定时任务,消防任务需要系统中检测到消防报警后才会触发的消防任务;还有部分系统任务,通过用户触发的,如设置任务,面板任务,紧急任务,用户通过对自动化设备设置速度,产生对应的系统任务。

这些系统任务拥有自己的优先级,需要执行任务的自动化电机ID,上述系统任务,从左往右优先级逐渐提高。另外任务功能模块,也是系统中其他功能模块的集合,如用户管理功能,登录管理,系统日志管理等功能管理集合。

数据中心模块:数据中心模块主要对系统中的数据进行整合,包括Redis内存数据库以及MySQL。Redis中存贮自动化设备的实时状态,实时的设置信息,以及报警信息。MySQL中存贮的是系统中的用户信息,区域信息,自动化设备设置信息等一些需要持久化存储的信息。

数据中心模块通过同步信息队列,将控制模块扫描得到的自动化设备数据实时更新Redis中的自动化设备状态缓存表,甚至同步更新MySQL中的自动化设备设置。当用户通过任务功能模块更新自动化设备的设置时,数据中心模块更新Redis的自动化设备设置缓存表。任务功能模块更新信息,如用户信息,日志信息等,也会在MySQL中进行更新。

控制模块:控制模块的主要功能是查询底层自动化设备的信息以及控制底层自动化设备。控制模块由2个部分组成,任务队列处理器与多个串口控制器组成。任务队列处理器主要获取任务队列中的任务,经过处理后,将任务数据转化成控制命令,将控制命令推入对应的串口队列中。每个串口控制器存在串口控制器编号ID,每个串口控制器控制多个串口。每个串口都进行了ID编码,串口ID由串口控制器ID+串口号组成。串口控制器包括串口队列处理器和串口协议解析器。串口队列处理器主要获取串口队列中的控制命令,将控制命令放入串口协议解析器中组装成串口控制命令。串口控制器直接控制串口,通过监听串口数据从而获取监控系统中的自动化设备信息,通过发送串口控制命令到对应的中继器中,通过中继器控制底层的自动化设备。

控制模块通过任务队列获取系统需要执行的系统任务,通过任务队列处理器,将系统任务组装成多条控制命令,通过串口控制器将控制命令发送的底层自动化设备中,实现控制底层自动化设备的功能。同时,串口控制器监听底层自动化设备的返回信息,解析后,将自动化设备数据推入同步信息队列中。

本发明的监控系统通过消息队列,将控制模块和系统的其他模块进行分离。具体将监控自动化设备的功能与数据收集的功能进行了分离,并通过串口协议规则文件支持不同类型地中继器。监控系统分为两部分,一部分是直接与底层自动化设备进行交互的上层模块,任务功能模块,数据中心模块;另一部分是控制模块,通过串口与底层自动化设备交互。

监控系统中的控制模块存在多个串口控制器。每一个串口控制器运行在一台与底层自动化设备连接的电脑上,控制电脑中的部分串口。每个串口控制器从串口队列中获取系统的控制命令,转化成串口控制命令后,发送到对应的串口中,实现对自动化设备的控制功能;另外,串口控制器检测到被控制的串口存在底层自动化设备返回的数据后,取出返回数据进行解析,再通过同步信息队列与监控系统的数据中心模块进行系统的数据同步。这种设计摆脱了监控系统与底层自动化设备的通讯连接上的桎梏,实现数据中心与控制模块的分离,从而摆脱了一个监控系统只能监控一处地方的自动化设备的情况,提高了系统的可扩展性。

监控系统在同一时间可能会存在多种控制的命令,系统只会执行最高优先级的命令。第一重实现机制,监控系统采用优先级队列作为任务队列,高优先级的任务可以先被执行,从而保障命令的优先执行。第二重实现机制,控制模块的任务队列处理器在将任务队列中的系统任务组装控制命令时,通过检测数据中心模块中的自动化设备设置缓存表,获得高优先级的任务内容,然后组装成对应的高优先级控制命令。监控系统使用这两种机制共同保证了任务的优先执行。

控制模块需要在一定周期内控制全部的自动化设备。控制模块的串口控制器,针对串口独占性,设计了串口队列处理器的模块。本发明的监控系统中控制模块的各个串口控制器在启动时读取串口协议规则文件,通过串口协议规则文件进行初始化,生成不同的控制器,可以适配不同类型的自动化设备。通过这种方式实现监控系统中的多协议需求。

每个串口队列处理器处理一条串口队列和一个串口,各个串口队列处理器间的发送和接收不受影响,可以并行执行。基于该特性,串口控制器中的串口队列处理器是一个个互不影响的线程,可以并行执行。这种机制的优点:

1)监控系统通过轮询任务更新自动化设备的实时状态,采用以上的机制,扫描系统全部自动化设备的周期,其周期长短限制不是由系统中自动化设备数量决定,而是串口下的自动化设备数量决定。

2)串口间不同的系统任务互不影响,例如串口1执行的是定时任务,串口2发送的是消防任务命令,两者间的系统任务可以并行执行。

监控系统中存在多种类型的自动化设备,对不同类型的自动化设备,监控系统可以进行识别以及控制。基于这个需求,本监控系统设置一种串口协议规则文件,解析基于UART串口通讯协议规则或者MODBUS RTU串口通讯协议规则组成的串口协议。控制模块中的控制器在启动时,先读取自身的串口协议规则文件,然后进行初始化,生成了适配不同自动化设备的串口控制器,从而控制不同的底层自动化设备。

底层自动化设备包括串口,中继器以及自动化设备。运行串口控制器的电脑设备都称为串口服务器。串口服务器与底层的设备通过串口进行连接,通过串口控制器控制底层的自动化设备,一台串口服务器中拥有N个串口,监控系统中的一个串口可以连接30台中继器,一台中继器最多可以连接30台自动化设备。监控系统通过串口查询中继器中的自动化设备信息,以及对中继器进行对应的控制。中继器主要是实时获取自动化设备的状态,以及将中继器中的控制命令转化为自动化设备的控制命令,实现对底层自动化设备的控制,所以本实施例中的控制模块中的串口控制器需要运行在与自动化设备连接的串口服务器上,通过串口服务器下的串口查看底层自动化设备的状态以及控制设备。

本实施例还提供一种基于消息队列的多协议自动化设备监控系统的控制方法,具体步骤如下:

如图2所示,进行串口控制器的初始化:

步骤101:串口控制器先读取串口控制器内部配置文件;

串口控制器内部配置文件的内容是通过XML形式建立,内部内容是自动化设备监控系统的IP地址,以及控制器的编号ID;

步骤102:设置串口控制器ID,同时连接监控系统;

步骤103:判断连接监控系统是否成功,如果成功则进入步骤105,否则进入步骤104;

步骤104:串口控制器停止运行;

步骤105:读取串口协议规则文件;

串口规则文件主要是通过文件的形式,生成适合不同自动化设备的串口协议。其中串口协议有两种形式,基于UART的串口规则协议或基于MODBUS RTU协议编写的串口规则协议;

步骤106:检测串口协议规则文件的合法性,如果不合法则跳转到步骤104,如果合法则跳转到步骤107;

步骤107:解析串口规则文件,生成对应的串口协议解析器;

步骤108:访问监控系统,获取本串口控制器需要控制的串口;

串口控制器访问监控系统串口控制器需要打开的串口号,监控系统通过JSON传输串口信息到串口控制器中;

步骤109:串口控制器打开需要被控制的串口;

由于串口具有独占性,当串口控制器打开该串口后,其他程序无法使用该串口,代表串口已经被串口控制器控制;

步骤110:检测串口是否打开成功,如果打开失败,则跳转到步骤111,打开成功,跳转到步骤112;

步骤111:打开失败,删除串口对应的监控系统中的串口队列,然后跳转到步骤113;

步骤112:串口打开成功,生成串口队列处理器,跳转到步骤113;

步骤113:检测是否还有下一个需要打开的串口,如果需要打开下一个串口,跳转到步骤109,否则串口控制器的初始化完成。

上述的串口控制器初始化成功后,代表监控系统有能力监控底层的自动化设备。监控系统通过任务功能模块,数据中心模块以及控制模块对自动化设备进行控制。任务功能模块生成了需要控制底层自动化设备的系统任务,控制模块解析系统任务,转换成串口控制命令,对自动化设备进行控制,同时自动化设备返回的自动化设备状态信息通过同步信息队列,更新数据中心模块中的数据。

如图3所示,监控系统中控制底层自动化设备的具体步骤包括:

步骤201:任务功能模块将系统任务推入任务队列中;

任务功能模块中生成的系统任务有,轮询任务,设置任务,定时任务,面板任务,消防任务,紧急任务和自检任务。系统任务中存在两个信息,自动化设备ID编号以及系统任务优先级;

步骤202:控制模块中的任务队列处理器获取任务队列中的系统任务;

步骤203:任务队列处理器获取系统任务中的自动化设备ID,通过数据中心模块获取自动化设备设置缓存表中自动化设备的实时任务信息,其中自动化设备同时处于多个任务中的话,取最高优先级的任务设置;

步骤204:任务队列处理器将自动化设备的ID与自动化设备实时设置信息,组装成系统的控制命令;

由于监控系统的命令是针对中继器发送的,每个中继器理论上控制30台自动化设备。所以构建的控制命令,是构建对中继器的控制命令,也是对30台自动化设备的控制命令。如果30台自动化设备中的一些自动化设备不存在系统中,构建一个默认的控制命令;通过需要发送的中继器ID,确定控制命令需要发送到的串口ID,将串口ID放入控制命令中;

步骤205:任务队列处理器通过控制命令中的串口ID,获取自动化设备需要发送到系统的串口队列,将控制命令推入对应的串口队列中;

步骤206:控制模块中的控制器中的串口队列处理器监听串口队列中的控制命令,如果串口队列中存在数据跳转到步骤207,否则重复步骤206;

步骤207:获取串口队列中的控制命令;

步骤208:串口协议解析器将控制命令组装成串口控制命令;

步骤209:串口协议解析器如果能将控制命令转换为串口控制命令,则将跳转到步骤211,否则跳转到步骤210;

例如控制命令中设置自动化设备A逆时针转动,但是串口协议解析器中没有设置自动化设备逆时针转动的命令,则串口协议解析器无法将控制命令转化成串口控制命令;

步骤210:上接步骤209,将控制命令丢弃;

步骤211:上接步骤209,获取串口控制命令后,串口队列处理器直接将数据发送到串口中;

根据步骤213,如果串口中返回数据不合法,说明发送失败,串口队列处理器重新发送串口控制命令,如果发送3次失败,则说明串口控制命令发送失败,跳转到步骤206;

步骤212:等待一段时间后,获取串口接收到的数据;

串口协议一般是触发式的,监控系统发送命令给中继器,中继器才会返回数据给监控系统,所以对于发送完串口控制命令后,需要等待一段时间,串口才能接收到中继器返回的数据;

步骤213:串口队列处理器通过串口协议解析器检测串口接收到的数据的合法性,如果合法,跳转到步骤214,如果不合法,重新发送串口控制命令,跳转到步骤211;

串口接收到的数据,先放入串口协议解析器中进行解析,其中基于UART协议的返回数据不合法的情况如下:

1)返回数据长度为0,代表没有接收到串口数据;

2)返回数据长度小于70,代表没有接收到完整的串口返回数据;

3)返回的串口数据没有找到协议头部以及协议尾部,代表返回的串口数据错误;

4)返回的串口数据,进行CRC校验失败;

5)返回的串口数据,解析后发现与发送的中继器不匹配,本来串口控制命令发送中继器A中,但是返回数据是中继器B进行返回;

基于MODBUS RTU协议的串口返回数据不合法情况:

1)返回数据长度为0,代表没有返回数据;

2)发送数据后,中继器返回MODBUS RTU的异常错误数据,代表协议发送失败;

步骤214:串口协议解析器将串口返回的自动化设备信息进行解析,封装成自动化设备返回信息;

步骤215:串口队列处理器将自动化设备返回信息,推入同步信息队列;

步骤216:数据中心模块读取同步信息队列中的数据,实时同步自动化设备状态缓存表。

本发明是基于消息队列的多协议自动化设备监控系统,其优化的点在于采用了消息队列后,将对自动化设备的控制部分与监控系统的数据部分进行了分离,让监控系统摆脱物理连接的桎梏,通过横向添加控制模块中的串口控制器,从而控制更多的自动化设备;通过控制器中的多个串口队列处理器,实现对串口的并行控制,极大的提高了控制的效率;本发明使用了优先级消息队列和数据中心模块中的自动化设备设置缓存表,共同实现了对高优先级命令的优先执行;本发明利用串口协议规则文件,解析不同类型的中继器,提高了监控系统的可扩展性。通过这些机制,本发明提供了一种新型的大型自动化设备监控系统。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

相关技术
  • 基于消息队列的多协议自动化设备监控系统及其控制方法
  • 基于消息队列的分布式机房监控系统及方法
技术分类

06120112881014