一种基于优先级和分段的数据采集方法
技术领域
本发明涉及一种数据采集方法,特别是涉及一种基于标准Modbus协议的通讯系统、方法和装置,具体是一种基于优先级和分段的数据采集方法的设计。
背景技术
在工业通信领域,Modbus协议由于其协议开放、实施简单、可靠性高的特点,已经成为事实上的工业标准,得到了众多产商的产品支持。
随着信息技术的不断发展,许多应用场合要求使用现有的Modbus设备进行数据通信,对数据的实时性要求也越来越高,如地铁综合监控领域,从站数据量不断增加、主站对从站的数据采集量远大于标准Modbus协议支持的单次最大数据采集量、数据采集的实时性要求越来越高,为了兼容标准Modbus报文最大长度为256字节的限制,同时满足大数据量和高实时性的要求,加上网络原因或者设备故障,传统的数据采集方法经常会出现数据上报延时长,而影响了整个综合监控系统的可扩展性和实时性。
发明内容
本发明所要解决的技术问题是提供一种基于优先级和分段的数据采集方法,在兼容标准Modbus协议提前下,以解决因更多从站接入和大数据范围的采集带来的数据实时性问题。采集分优先级,并根据采集器与从站数据交换状况自动调整采集频率,有效保障了高优先级数据的实时性,减少了从站负担,该方法不仅增加数据的实时性而且减少了通信错误开销和网络带宽的占用。
为实现上述发明目的,本发明提供基于优先级和分段的数据采集方法,包括多采集器并发采集、按照优先级对大范围数据分段采集和根据采集器与从站数据交换状况自动调整采集频率。
所述多采集器并发采集,采用是的多线程并发采集技术,一个采集器就是一个线程,一个采集器与一个从站通讯,不同的采集器互不干扰并将采集的数据更新于不同的内存块,以备上层应用使用。针对每个从站,主站分配一个固定的内存块用于存储该从站的数据,采集器对该固定的内存块只有写权限。
所述按照优先级对大范围数据分段采集,采集器初使化时将生成一个采集任务循环队列,该队列是根据每个数据范围优先级的不同生成的,采集器将依据该任务队列进行采集工作。采集任务循环队列的生成包括以下步骤:
步骤一:采集器读取配置文件,包括数据类型、优先级、功能码、单次最大数据采集量、采集范围、映射范围;
步骤二:根据配置参数,将超过单次最大数据采集量的每个待采集数据范围分段,将其转化为待采集数据分段组,使每个分段组的各分段范围之和等于原数据范围;
步骤三:根据每个分段组优先级的不同生成采集任务循环队列,使不同优先级的分段按照它们的采集频率比例分散地分布于采集任务循环队列中。
生成的循环队列可以表示为对从站的采集的数据是通常有优先级别的不同,有些数据范围的实时性要求高,比如,开关量数据DI量相对模拟量数据AI量或者MI量的实时性高很多,为了确保DI量的实时性而且又不失AI或MI的完成性,在Qn队列中:(假设它们的优先级从高到低的顺序为DI>AI>MI,优先级不限于三个优先级别,更多的优先级别时以递归方式推理)
DI量的两个分段查询之间,最多存在一个AI量或者MI量分段,这样做的目的是在DI量、AI量和MI量中,保证DI量的实时性最高;
AI量的两个分段查询之间,最多存在一个MI量分段,这样做的目的是在AI量和MI量中,保证AI量的实时性较高;
在Qn队列中,只有一个完成MI量数据范围,个AI量的数据范围和个DI量的数据范围。
所述按照优先级对大范围数据分段采集,采集器将按照该队列中任务的排序进行工作,既保证了实时性要求高的数据范围的实时性,也保证了较低实时性数据范围的完整性。采集器工作的步骤包括以下步骤:
步骤一:采集器响应采集任务事件,从采集任务循环队列中取出当前任务,根据任务属性:[Code,Start,Count,NextTask]中的Code(功能码)、Start(开始地址)和Count(请求字数)组成标准的Modbus报文发送给目标从站,并将在NestTask(毫秒)时间后启动下次任务。
步骤二:采集器收到该任务响应报文后,判断其是否错误,如果是则执行步骤三,否则执行步骤四;
步骤三:清零正常数据交换计数,采集器有限次数地重新发送对该分段的Modbus请求报文,如果请求次数超过预设的阀值,采集器将主动与从站的重新建立连接,如果连接成功,执行步骤一,否则直到连接成功。
步骤四:采集器处理下一个任务定时事件,判断上一次Modbus请求是否及时和正确响应,如果是则执行步骤五,否则执行步骤三。
步骤五:主站取出任务响应报文中的有效数据并更新到指定内存块,并累记正常数据交换计数,如果次数达到预设的阀值,将下一个任务启动时间NextTask提前一个预设的单位时间,否则按照采集任务循环队列的时间正常启动下一个任务。
所述根据采集器与从站数据交换状况自动调整采集频率,任务属性NextTask,是在采集任务循环队列生成时确定的,它是采集器执行下一个任务时间点的重要参考值。采集器执行下一个任务的事件是由当前任务执行步骤一后生成的定时器事件,两个任务之间的时间差即为分段请求从站的频率,这个频率不是一成不变的,而是根据采集器与从站的通讯情况来决定的。经大量的实践证明,分段请求报文时,下一个分段请求的发送如果以上一个分段的响应为时间点,常常会给从站带来瞬间较重的负担,有时会导致从站假死现象甚至崩溃。为了解决这个问题,下一个分段的请求报文可以在上一个分段响应之后的一段时间后再发送,这样做的目的是缓解从站的瞬间重负担。一种等效且易控制的方法,如上所述,即采用定时器产生事件的方式来触发下一个分段请求报文的发送,并通过统计之前报文的响应情况来动态改变下一个定时器事件触发的时间,从而实现根据采集器与从站的通讯状况来动态调整它们的数据交换频率,以进一步提高数据采集的完整性和实时性。
附图说明
图1是本发明实施例一中主站和从站的网络部署示意图;
图2是本发明实施例一中主站软件功能模块示意图;
图3是本发明实施例二中任务循环队列生成及任务执行流程图;
图4是本发明实施例二中任务执行详细流程图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一,参见图1,图2。
本发明提供一种基于优先级和分段的数据采集方法,利用Vxworks实时操作系统的终端机作为主站,采集对象是Modbus设备或Modbus子系统的从站,一个主站支持与N(1<=N<=100)个从站并发数据采集。如图1所示,一台安装Vxworks实时操作系统的终端机作为主站,通过RJ-45接口或者RS232接口与多个从站连接。主站的每个采集器与一个从站连接,分别完成对从站的数据采集。如图2所示,是对图1的细化,针对主站的采集器的模块做了细化,并给出了模块之间的关系和数据流向。其中,主模块负责业务功能和对协议解析模块、配置文件解析模块和网络通讯模块的实例化和应用以及通过内存数据库接口更新数据;配置文件解析模块主要负责采集任务循环队列的生成和其他配置项的存储;网络通讯模块在主模块的主导下与从站进行通讯,对从站的响应数据仅进行分类和帧完整性验证,并将通讯状态和数据交由主模块处理;协议解析模块在主模块的主导下负责数据解析。数据采集利用多线程并发采集技术,一个采集器就是一个线程,一个采集器与一个从站通讯,不同的采集器互不干扰并将采集的数据更新于不同的内存块,以备上层应用使用。
实施例二,参见图3,图4。
本发明提供一种基于优先级和分段的数据采集方法,主站N(1<=N<=100)个采集器与N个从站并发进行数据交换而完成数据采集工作。采集器的采集工作分为两方面,第一:采集器的配置文件解析模块对配置文件进行分析,根据优先级的不同和最大单次查询长度生成任务循环队列;第二:采集器依据任务循环队列与从站数据交换。
如图3所示,任务循环队列的生成包括以下步骤
步骤一:读取配置文件,包括数据类型、优先级、功能码、单次最大数据采集量、采集范围、映射范围;
步骤二:将待采集数据范围转化为待采集数据分段组,根据配置参数,将超过单次最大数据采集量的每个待采集数据范围分段,将其转化为待采集数据分段组,使每个分段组的各分段范围之和等于原数据范围;
步骤三:根据每个数据分段组优先级生成采集任务循环队列,使不同优先级的分段按照它们的采集频率比例分散地分布于采集任务循环队列中。
如图4所示,采集器与从站的数据交换包括以下步骤:
步骤一:采集器与从站连接或者重连成功后,启动当前执行任务事件;
步骤二:处理定时事件:从采集任务循环队列取出当前任务i;
步骤三:生成并发送Modbus请求报文,根据任务所属性:[Code,Start,Count,NextTask]中的Code、Start和Count组成标准的Modbus报文发送给目标从站;
步骤四:采集器收到该任务响应报文后,判断其是否错误,如果是则执行步骤五,否则执行步骤六;
步骤五:清零正常数据交换计数及重连从站,
步骤六:分析响应报文并更新数据
步骤七:累计正常数据交换计数,如果计数达到阀值,则修改下一个任务执行的时间,使其提前一个预设的单位时间;
步骤八:修改任务循环队列当前任务,完成一个分段的数据请求与响应的后,将当前任务指向下一个任务。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
由上可见,本发明提供的一种基于优先级和分段的数据采集方法,有以下优点。
(1)便于部署,降低成本
主站采用一对多的方式对从站进行数据采集,并且采用了多网卡和多串口的接入方式,一个主站可以同时采集不同接入方式和不同网段的从站数据。主站是一台终端机,支持接入N(1<=N<=100)个从站,部署简单,成本低。
(2)兼容性好,应用范围广
主站采用的是标准的Modbus协议和常用的功能码与从站通讯,很好的兼容了现有的Modbus设备或者Modbus子系统,并在数据采集量和数据采集实时性上做了较大提升,对大数据量采集和多子系统的接入有较广的应用范围。
(3)数据实时性高
主站利用Vxworks实时操作系统下的多线程并发采集技术,对不同从站的数据采集互不干扰;采用了优先级、分段和动态频率采集的方法,既保证了实时性要求高数据的实时性,也保证了较低实时性数据范围的完整性。
(3)错误开销小,网络带宽使用率高
主站采用了基于优先级和分段的数据采集方法,分优先级采集,保证了高优先级数据实时性和低优先级数据范围的完整性,因减少了对低优先级数据的采集,而减少了网络带宽的占用和并减轻了从站的工作负担;分段采集的方法不仅是对标准Modbus协议的支持,也减少了错误开销。