一种应用于工业控制系统的数据异步存储及访问机制的制作方法

文档序号:6507636阅读:261来源:国知局
一种应用于工业控制系统的数据异步存储及访问机制的制作方法
【专利摘要】本发明涉及一种应用于工业控制系统的数据异步存储及访问机制,包括工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤,在工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤中均采用内存数据库,所述内存数据库中的实时数据结构为先进先出的环形队列,所述环形队列中的数据项采用变长方式,并且设置头指针和尾指针,所述头指针指向环形队列头部待读取的数据的第一个字节,所述尾指针指向队列尾部已写入数据的下一个可用空字节。本发明应用在广域测量、实时交易、军事监测等领域的数据交换中,使用变长循环队列结构的内存数据库,通过对数据的缓存、组织,使数据访问做到异步、可延时。
【专利说明】—种应用于工业控制系统的数据异步存储及访问机制
【技术领域】
[0001]本发明涉及一种数据异步存储及访问机制,更具体的说涉及一种应用于工业控制系统的数据异步存储及访问机制。
【背景技术】
[0002]对于实时、高并发数据访问的应用系统环境下,恰当地处理和组织数据的方法越来越多地倾向于使用内存数据库,由于其自身较高的性能,尤其适合应用在广域测量、实时交易、军事监测等领域。与传统基于磁盘存储的数据库相比,内存数据库特点十分明显,由于数据存储、处理都在物理内存中进行,使得数据访问的响应时间在本机内达到微秒级甚至更高,在广域网络访问方面,能提供高达普通数据库几十倍的吞吐量。鉴于这些优点,内存数据库能解决广域测量系统中测量值与实际测量时间准确对应、网络交易系统高并发访问的实时性等问题。
[0003]内存数据库的另一个重要作用就是实时数据的缓存、组织和延时异步访问,它可以把工业控制系统产生的实时数据高速进行缓存,在读取和处理这些数据的过程存在延时或者不确定时,暂时保存数据,解决数据的产生与处理之间的速率不匹配问题。同时,由于缓存技术的应用,使得系统可以应对复杂的运行中的不可预期事件和错误,甚至系统的停止和间断出现时,也能以最大程度保证数据的可靠、有效、不丢失,极大地提高了系统的容错性。
[0004]现有的大多数内存数据库的设计不是以缓存和异步访问为出发点进行构造的,它们多倾向于复杂的系统结构和丰富的附加功能(如客户端/服务器网络访问,和sql语句的解释执行等),这样的产品使用于工业控制系统的缓存和异步访问中,往往得不到预期的效果,由于复杂的功能使得数据库访问效率大幅度降低,面对工业控制系统缓存的环境中对高速实时要求较高对复杂sql语句功能并不需要的情况,尤其显得不能合适和胜任。
[0005]因此对于工业控制系统数据交换和高速缓存情况需要建立高效、简捷、良好的结构化设计的内存数据库系统,提供数据的异步访问机制。

【发明内容】

[0006]为解决现有技术的不足,本发明的目的在于提供一种应用于工业控制系统的数据异步存储及访问机制,使工业控制系统的数据交换和高速缓存变得高效、简捷,大大提高了工业系统的效率。
[0007]为达到上述目的,本发明是通过以下的技术方案来实现的:一种应用于工业控制系统的数据异步存储及访问机制,包括工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤,在工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤中均采用内存数据库,所述内存数据库中的实时数据结构为先进先出的环形队列,所述环形队列中的数据项采用变长方式,并且设置头指针和尾指针,所述头指针指向环形队列头部待读取的数据的第一个字节,所述尾指针指向队列尾部已写入数据的下一个可用空字节。[0008]本发明技术方案的进一步限定为,所述内存数据库中的实时数据结构为先进先出的环形队列的方式为:内存数据库的数据区域采用操作系统的共享内存技术,预先开辟一块一定大小的操作系统级别的共享内存区域,所述共享内存区域独立于系统中运行的各进程,并被各个进程映射访问;当进程映射访问了所述共享内存区域,在进程中得到映射的共享内存区域首地址,内存数据库依据得到的共享内存区域首地址把共享内存区域结构化成环形队列。
[0009]进一步地,所述工业控制系统的实时数据缓存步骤中,将工业控制系统的实时数据处理为环形队列的数据包,数据包的缓存在队尾进行,按顺序使数据包节点入队,数据包节点入队包括数据长度入队步骤和数据内容入队步骤,其中,所述数据长度入队步骤具体为:
[0010]①在数据包中获取需要入队的数据长度data_size和数据内容;
[0011]②获取队列当前的头指针head和尾指针tail的位置;
[0012]③判断环形队列的空间是否可容纳当前需要入队的数据,如果data_siZe>(tail_p+total_size - head_p)%total_size,则执行步骤④,否则,返回步骤①,其中data_siz为需要入队的数据包中数据长度所占的字节数,tail_p为环形队列的尾指针的位置,head_p为环形队列的头指针的位子,total_size为环形队列的总长度;
[0013]④将数据包中的数据长度data_Size入队,入队时判断尾指针tail是否到达环形队列的末端;
[0014]⑤如果尾指针tail到达环形队列末端或到达环形队列末端长度不够容纳数据长度,则使用分拆方法将数据长度分成两段存储;如果尾指针tail未到达环形队列末端,则将数据长度直接存储;
[0015]所述数据内容入队步骤具体为:
[0016]①数据内容入队时,判断队尾指针tail到达环形队列末端的长度是否可容纳数据内容的长度,如果队尾指针到末端不够容纳数据,使用拆分方法将数据内容分成两段存储;如果尾指针tail未到达环形队列末端,则把数据内容直接存储;
[0017]②更新环形队列队尾指针tail,完成数据包节点入队。
[0018]进一步地,所述工业控制系统的数据读取步骤在队头进行,按入队顺序和长度依次使数据包出队,具体步骤为;
[0019]①判断环形队列中是否有数据,如果head_p==tail_p,则直接返回;否则,执行步骤②;
[0020]②如果环形队列头指针head到尾指针tail的长度大于等于4字节,在环形队列头指针head处直接读出4字节长度的数据;否则,使用聚合方法将环形队列末端和首端数据组合成4字节长度,然后读出4字节长度的数据;
[0021]③根据读出4字节长度的数据承载的数据值,判断头指针head到环形队列末端的数据长度是否大于等于此数据值,如果大于等于此数据值,则直接读取数据内容,否则使用聚合方法将环形队列末端和首端数据组成完整的数据,再读取数据内容;
[0022]④数据内容读取后,更新环形队列头指针head,完成数据出队。
[0023]进一步地,步骤②中,读出4字节长度的数据后,判断长度的合理性,如果长度不在合理范围内,则将环形队列内数据清空,头指针head和尾指针tail归零,然后返回。[0024]进一步地,所述内存数据库中设置一个互斥锁mutexWrite,两个信号量used和free,其中,信号量used的值对应使用的空间大小,信号量free的值对应空闲的空间大小,且 used+free==size -1。
[0025]进一步地,所述内存数据库中设置写入数据时使用的互斥锁mutexWrite及消息队列writeQueue,当完成工业控制系统的实时数据缓存步骤时,发送无数据的通知消息WRITE_MSG到消息队列writeQueue,监控进程实时读取消息队列里的消息,读取到写入消息WRITE_MSG时,对共享内存区域的循环队列进行读取,一直读取到队列为空。
[0026]进一步地,所述内存数据库中设置对循环队列的写访问之间保护的互斥锁mutexWrite和对循环队列的读访问之间保护的互斥锁mutexRead,所述写访问和读访问之间设置一个标识队列中可读数据包格式的信号量readable。
[0027]本发明的有益效果是:本发明所述的一种应用于控制系统的数据异步存储及访问机制,应用在广域测量、实时交易、军事监测等领域的数据交换中,使用变长循环队列结构的内存数据库,通过对数据的缓存、组织,使数据访问做到异步、可延时,主要起到3方面作用:①数据缓存,解决读写速率不匹配造成的操作等待或数据丢失;②高速访问,毫秒级响应时间,使数据读写在内存中进行,极高的访问效率;③实现了无缝的数据交换与进程间的通信。鉴于这些作用,使大型工业系统的可靠性、容错性大大加强,使系统效率大幅提升。
【专利附图】

【附图说明】
[0028]图1为本发明所述的环形队列内存数据库结构示意图;
[0029]图2为本发明所述的工业控制系统的实时数据缓存步骤的流程示意图;
[0030]图3为本发明工业控制系统的数据读取步骤的流程示意图;
[0031]图4为本发明所述的同步互斥实施方法I的伪代码流程示意图;
[0032]图5为本发明所述的同步互斥实施方法2的伪代码流程示意图;
[0033]图6为本发明所述的同步互斥实施方法3的伪代码流程示意图。
【具体实施方式】
[0034]以下结合附图和具体实施例对本发明作具体的介绍。
[0035]实施例1:
[0036]本发明提供一种应用于工业控制系统的数据异步存储及访问机制,解决大型工业控制系统数据交换和缓存的异步数据访问问题,提供较高的系统数据交换效率和容错性。
[0037]本发明包括工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤,在工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤中均采用内存数据库,所述内存数据库中的实时数据结构为先进先出的环形队列,环形队列的数据结构如图1所示。所述环形队列中的数据项采用变长方式,并且设置头指针和尾指针,所述头指针指向环形队列头部待读取的数据的第一个字节,所述尾指针指向队列尾部已写入数据的下一个可用空字节。本发明保证数据交换时有序数据的正确高速访问,由于数据在内存中组织和缓存,空间的利用率相对重要,考虑到队列中缓存的数据内容长度的不确定性,使用定长数据项的队列可能出现空间的浪费、或者数据的超长丢失,所以设计队列中数据项采用变长方式,数据包的结构定义如下:[0038]
【权利要求】
1.一种应用于工业控制系统的数据异步存储及访问机制,包括工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤,在工业控制系统的实时数据缓存步骤和工业控制系统的数据读取步骤中均采用内存数据库,其特征在于,所述内存数据库中的实时数据结构为先进先出的环形队列,所述环形队列中的数据项采用变长方式,并且设置头指针和尾指针,所述头指针指向环形队列头部待读取的数据的第一个字节,所述尾指针指向队列尾部已写入数据的下一个可用空字节。
2.根据权利要求1所述的一种应用于工业控制系统的数据异步存储及访问机制,其特征在于,所述内存数据库中的实时数据结构为先进先出的环形队列的方式为:内存数据库的数据区域采用操作系统的共享内存技术,预先开辟一块一定大小的操作系统级别的共享内存区域,所述共享内存区域独立于系统中运行的各进程,并被各个进程映射访问;当进程映射访问了所述共享内存区域,在进程中得到映射的共享内存区域首地址,内存数据库依据得到的共享内存区域首地址把共享内存区域结构化成环形队列。
3.根据权利要求1所述的一种应用于工业控制系统的数据异步存储及访问机制,其特征在于,所述工业控制系统的实时数据缓存步骤中,将工业控制系统的实时数据处理为环形队列的数据包,数据包的缓存在队尾进行,按顺序使数据包节点入队,数据包节点入队包括数据长度入队步骤和数据内容入队步骤,其中,所述数据长度入队步骤具体为: ①在数据包中获取需要入队的数据长度data_Size和数据内容; ②获取队列当前的头指针head和尾指针tail的位置; ③判断环形队列的空间是否可容纳当前需要入队的数据,如果data_siZe>(tail_p+total_size - head_p)%total_size,则执行步骤④,否则,返回步骤①,其中data_siz为需要入队的数据包中数据长度所占的字节数,tail_p为环形队列的尾指针的位置,head_p为环形队列的头指针的位子,total_size为环形队列的总长度; ④将数据包中的数据长度`data_Size入队,入队时判断尾指针tail是否到达环形队列的末端; ⑤如果尾指针tail到达环形队列末端或到达环形队列末端长度不够容纳数据长度,则使用分拆方法将数据长度分成两段存储;如果尾指针tail未到达环形队列末端,则将数据长度直接存储; 所述数据内容入队步骤具体为: ①数据内容入队时,判断队尾指针tail到达环形队列末端的长度是否可容纳数据内容的长度,如果队尾指针到末端不够容纳数据,使用拆分方法将数据内容分成两段存储;如果尾指针tail未到达环形队列末端,则把数据内容直接存储; ②更新环形队列队尾指针tail,完成数据包节点入队。
4.根据权利要求1所述的一种应用于工业控制系统的数据异步存储及访问机制,其特征在于,所述工业控制系统的数据读取步骤在队头进行,按入队顺序和长度依次使数据包出队,具体步骤为; ①判断环形队列中是否有数据,如果head_p== tail_p,则直接返回;否则,执行步骤②; ②如果环形队列头指针head到尾指针tail的长度大于等于4字节,在环形队列头指针head处直接读出4字节长度的数据;否则,使用聚合方法将环形队列末端和首端数据组合成4字节长度,然后读出4字节长度的数据; ③根据读出4字节长度的数据承载的数据值,判断头指针head到环形队列末端的数据长度是否大于等于此数据值,如果大于等于此数据值,则直接读取数据内容,否则使用聚合方法将环形队列末端和首端数据组成完整的数据,再读取数据内容; ④数据内容读取后,更新环形队列头指针head,完成数据出队。
5.根据权利要求4所述的一种应用于工业控制系统的数据异步存储及访问机制,其特征在于,步骤②中,读出4字节长度的数据后,判断长度的合理性,其方法为比较长度的上下限范围,上限为队列中现有数据的总长度((tail_p+data_size - head_p) %data_size),下限为大于O (不能小于或等于)。如果长度不在合理范围内,则将环形队列内数据清空,头指针head和尾指针tail归零,然后返回。
6.根据权利要求1所述的一种应用于工业控制系统的数据异步存储及访问机制,其特征在于,所述内存数据库中设置一个互斥锁mutexWrite,两个信号量used和free,其中,信号量used的值对应使用的空间大小,信号量free的值对应空闲的空间大小,且used+free==size -1。
7.根据权利要求1所述的一种应用于工业控制系统的数据异步存储及访问机制,其特征在于,所述内存数据库中设置写入数据时使用的互斥锁mutexWrite及消息队列writeQueue,当完成工业控制系统的实时数据缓存步骤时,发送无数据的通知消息WRITE_MSG到消息队列writeQueue,监控进程实时读取消息队列里的消息,读取到写入消息WRITE_MSG时,对共享内存区域的循环队列进行读取,一直读取到队列为空。
8.根据权利要求1所述的一种应用于工业控制系统的数据异步存储及访问机制,其特征在于,所述内存数据库中设置对循环队列的写访问之间保护的互斥锁mutexWrite和对循环队列的读访问之间保护的互斥锁mutexRead,所述写访问和读访问之间设置一个标识队列中可读数据包格式的信号量readable。
【文档编号】G06F12/08GK103514261SQ201310351073
【公开日】2014年1月15日 申请日期:2013年8月13日 优先权日:2013年8月13日
【发明者】吴克河, 安思成, 崔文超 申请人:江苏华大天益电力科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1