书签 分享 收藏 举报 版权申诉 / 7

基于消息队列的外界数据接收方法.pdf

  • 上传人:n****g
  • 文档编号:805759
  • 上传时间:2018-03-13
  • 格式:PDF
  • 页数:7
  • 大小:273.70KB
  • 摘要
    申请专利号:

    CN201010135670.6

    申请日:

    2010.03.30

    公开号:

    CN101847107A

    公开日:

    2010.09.29

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效IPC(主分类):G06F 9/46申请日:20100330|||公开

    IPC分类号:

    G06F9/46; G06F9/50; G05B19/418

    主分类号:

    G06F9/46

    申请人:

    南京恩瑞特实业有限公司

    发明人:

    蔡李峰; 束元; 朱骞

    地址:

    211110 江苏省南京市江宁开发区将军大道39号

    优先权:

    专利代理机构:

    南京天华专利代理有限责任公司 32218

    代理人:

    徐冬涛;瞿网兰

    PDF完整版下载: PDF下载
    内容摘要

    一种基于消息队列的外界数据接收方法,其特征是为每个与外界有交互的应用任务定义一个消息队列msgQEvent,作为该任务接收跟外界传入数据相关的事件的唯一方式;若有事件需要通知该任务,则往msgQEvent中放入一条消息,这样应用任务那边收到消息后,就可以被唤醒并执行相应的处理。本发明通过将应用任务接收外界数据的操作与定时器机制实现了分离,使应用任务可以按自己的需求定制每个操作的定时器。本发明的方法具有风险低,可实现多方数据通讯,方便灵活,可提高系统的运行效率。

    权利要求书

    1.  一种基于消息队列的外界数据接收方法,其特征是为每个与外界有交互的应用任务定义一个消息队列msgQEvent,作为该任务接收跟外界传入数据相关的事件的唯一方式;若有事件需要通知该任务,则往msgQEvent中放入一条消息,这样应用任务那边收到消息后,就可以被唤醒并执行相应的处理。

    2.
      根据权利要求1所述的基于消息队列的外界数据接收方法,其特征是所述的消息类型有数据接收完毕消息和数据接收超时消息;所述的数据接收完毕消息是:假设应用任务中接收外界数据的函数为recv函数,采用消息队列msgQEvent后,将recv函数从应用任务中挪出,换成从msgQEvent中等待消息,另外用一个独立的任务Task A单独进行recv操作,该任务的优先级要高于应用任务,当recv操作完成后,Task A往msgQEvent中放入数据接收完毕消息,应用任务从msgQEvent收到该消息后,就去获取具体的数据,然后进行下一步的处理;所述的数据接收超时消息是指:在应用任务从msgQEvent中等待消息之前,启动一个定时器,该定时器可以采用系统时钟实现,也可以用其他的时钟源实现,当定时器超时后,则往msgQEvent中发送数据接收超时消息,这样,应用任务就可以被唤醒,然后进行相应的异常处理。

    说明书

    基于消息队列的外界数据接收方法
    技术领域
    本发明涉及一种自动控制设备的重要数据接收方法,尤其是一种对安全要求特别高的场合如轨道交通自动控制中使用的数据接收方法,具体地说是一种基于消息队列的外界数据接收方法。
    背景技术
    众所周知,在一些涉及重大人身和设备安全的自动控制系统领域,如城市地下轨道交通系统就要求系统具有极高的实时性,为此,在系统中运行的任务执行操作所花的时间会有严格的要求。但在任务的执行过程中,部分操作因为要等待外界传入数据,它的执行时间在运行过程中是不确定的。在高安全性系统中,这些执行时间不确定性的因素属于风险的一部分,对其需要有完善的防护措施。要做到一旦操作执行超时了,就进行相应的异常处理,而且处理后应用任务能够照常运行。
    应用任务接收外界数据的操作通常是调用一个函数,不妨假设它为recv函数。为了防止recv函数超时,在实现recv函数的时候,通常会加入定时器机制,一旦超过某个时间值,该函数就会返回,告诉应用任务超时了。
    这样的实现方式虽然能满足风险防护的要求,但从机制上讲不够灵活。recv函数如果是由自己来实现,其定时器机制肯定能满足自己的需求,但如果recv函数是第三方接口,那么其中的定时器机制就不一定能满足自己的需求了。例如,在某些实时性系统中,定时器不能采用系统时钟,而要采用专用的独立信号来实现。对这种特殊的情况,定时器机制需要自己来实现。但recv函数却是第三方接口,两者没法融合在一起。
    导致这样结果的原因就在于recv函数与定时器机制捆绑在了一起。因此,急需发明一种将接收外界数据的操作和定时器分开方法来解决数据接收的安全和灵活兼容的问题。
    发明内容
    本发明的目的是针对现有的设备控制系统需将数据接收与定时器捆绑进行带来的灵活性差,存在安全隐患的问题,提供一种基于消息队列的外界数据接收方法。该方法将应用任务接收外界数据的操作与定时器机制实现了分离,使应用任务可以按自己的需求定制每个操作的定时器。
    本发明的技术方案是:
    一种基于消息队列的外界数据接收方法,其特征是为每个与外界有交互的应用任务定义一个消息队列msgQEvent,作为该任务接收跟外界传入数据相关的事件的唯一方式;若有事件需要通知该任务,则往msgQEvent中放入一条消息,这样应用任务那边收到消息后,就可以被唤醒并执行相应的处理。
    所述的消息类型有数据接收完毕消息和数据接收超时消息;所述的数据接收完毕消息是:假设应用任务中接收外界数据的函数为recv函数,采用消息队列msgQEvent后,将recv函数从应用任务中挪出,换成从msgQEvent中等待消息,另外用一个独立的任务Task A单独进行recv操作,该任务的优先级要高于应用任务,当recv操作完成后,Task A往msgQEvent中放入数据接收完毕消息。注意:这里的数据接收完毕消息并不包含数据内容,如要获取具体的数据,属于下一步的处理,如通过全局数据区获取数据、从消息队列中获取数据等。应用任务从msgQEvent收到该消息后,就去获取具体的数据,然后进行下一步的处理;所述的数据接收超时消息是指:在应用任务从msgQEvent中等待消息之前,启动一个定时器,该定时器可以采用系统时钟实现,也可以用其他的时钟源实现,当定时器超时后,则往msgQEvent中发送数据接收超时消息,这样,应用任务就可以被唤醒,然后进行相应的异常处理。例如,如果该报文很重要,则在异常处理中,应用任务可以给对方发送重发请求,然后继续调用msgQReceive等待。
    本发明的有益效果:
    本发明通过将应用任务接收外界数据的操作与定时器机制实现了分离,使应用任务可以按自己的需求定制每个操作的定时器。
    本发明的方法具有风险低,可实现多方数据通讯,方便灵活,可提高系统的运行效率。
    附图说明
    图1是本发明的发送数据接收完毕消息流程示意图;
    图2是本发明的发送数据接收超时消息流程示意图;
    图3是本发明的多机容错系统示意图。
    具体实施方式
    下面结合附图和实施例对本发明作进一步的说明。
    如图1-3所示。
    一种基于消息队列的外界数据接收方法,首先是为每个与外界有交互的应用任务定义一个消息队列msgQEvent,作为该任务接收跟外界传入数据相关的事件的唯一方式。若有事件需要通知该任务,则往msgQEvent中放入一条消息,这样应用任务那边收到消息后,就可以被唤醒并执行相应的处理。为了满足应用任务正常功能的需要,消息的类型通常有:数据接收完毕消息、数据接收超时消息两种。
    一、数据接收完毕消息
    假设应用任务中接收外界数据的函数为recv函数。采用消息队列msgQEvent后,将recv函数从应用任务中挪出,换成从msgQEvent中等待消息。另外用一个独立的任务Task A单独进行recv操作,该任务的优先级要高于应用任务。当recv操作完成后,Task A往msgQEvent中放入数据接收完毕消息。(注意:这里的消息并不包含数据内容,如要获取具体的数据,属于下一步的处理,如通过全局数据区获取数据、从消息队列中获取数据等)。应用任务从msgQEvent收到该消息后,就去获取具体的数据,然后进行下一步的处理。发送数据接收完毕消息的流程如图1所示。
    二、数据接收超时消息
    在应用任务从msgQEvent中等待消息之前,起一个定时器。该定时器可以采用系统时钟实现,也可以用其他的时钟源实现。当定时器超时后,则往msgQEvent中发送数据接收超时消息。这样,应用任务就可以被唤醒,然后进行相应的异常处理。例如,如果该报文很重要,则在异常处理中,应用任务可以给对方发送重发请求,然后继续调用msgQReceive等待。发送数据接收超时消息的流程如图2所示。
    下面以多机容错系统为例进一步说明如下:
    如图3所示:该系统中多台计算机由统一的外部时钟信号驱动,在定时器机制上也必须采用外部时钟信号,保证每台计算机中定时器的一致性。该系统接收的外界数据都属于报文数据,所以下面涉及“数据”的地方都用“报文”替代。
    假设该系统中有两个应用任务跟外界有报文交互,分别为T1、T2,则分别创建msgQ1、msgQ2作为接收跟外界传入报文相关的事件的消息队列。将该系统中接收外界报文的recv函数放到Task A中执行。Task A一旦接收到报文,就会根据报文的类型通知相应的应用任务。
    假设应用任务T1对外发送了一个请求报文,然后等待外部传入确认请求报文。则T1会先启动一个定时器M1,然后调用msgQReceive。
    如果外界在规定时间内传入一个报文,则Task A收到报文后,发现该报文属于T1,就往msgQ1中放入报文接收完毕消息。应用任务T1收到消息后,取出报文,如果报文内容正确,则取消定时器M1,然后进行下面的处理;如果不是期望的报文,则继续调用msgQReceive。
    如果定时器M1到期时外界还未传入报文,则定时器触发,在触发函数中往应用任务T1的msgQ1中放入报文接收超时消息。T1收到该消息后,进入异常处理分支。
    本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。

    关 键  词:
    基于 消息 队列 外界 数据 接收 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:基于消息队列的外界数据接收方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-805759.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1