[发明专利]基于消息队列的外界数据接收方法有效
申请号: | 201010135670.6 | 申请日: | 2010-03-30 |
公开(公告)号: | CN101847107A | 公开(公告)日: | 2010-09-29 |
发明(设计)人: | 蔡李峰;束元;朱骞 | 申请(专利权)人: | 南京恩瑞特实业有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F9/50;G05B19/418 |
代理公司: | 南京天华专利代理有限责任公司 32218 | 代理人: | 徐冬涛;瞿网兰 |
地址: | 211110 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 消息 队列 外界 数据 接收 方法 | ||
技术领域
本发明涉及一种自动控制设备的重要数据接收方法,尤其是一种对安全要求特别高的场合如轨道交通自动控制中使用的数据接收方法,具体地说是一种基于消息队列的外界数据接收方法。
背景技术
众所周知,在一些涉及重大人身和设备安全的自动控制系统领域,如城市地下轨道交通系统就要求系统具有极高的实时性,为此,在系统中运行的任务执行操作所花的时间会有严格的要求。但在任务的执行过程中,部分操作因为要等待外界传入数据,它的执行时间在运行过程中是不确定的。在高安全性系统中,这些执行时间不确定性的因素属于风险的一部分,对其需要有完善的防护措施。要做到一旦操作执行超时了,就进行相应的异常处理,而且处理后应用任务能够照常运行。
应用任务接收外界数据的操作通常是调用一个函数,不妨假设它为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所示。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京恩瑞特实业有限公司,未经南京恩瑞特实业有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010135670.6/2.html,转载请声明来源钻瓜专利网。