CN101847107B - 基于消息队列的外界数据接收方法 - Google Patents
基于消息队列的外界数据接收方法 Download PDFInfo
- Publication number
- CN101847107B CN101847107B CN2010101356706A CN201010135670A CN101847107B CN 101847107 B CN101847107 B CN 101847107B CN 2010101356706 A CN2010101356706 A CN 2010101356706A CN 201010135670 A CN201010135670 A CN 201010135670A CN 101847107 B CN101847107 B CN 101847107B
- Authority
- CN
- China
- Prior art keywords
- message
- task
- msgqevent
- application task
- data receiving
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Computer And Data Communications (AREA)
Abstract
一种基于消息队列的外界数据接收方法,其特征是为每个与外界有交互的应用任务定义一个消息队列msgQEvent,作为该任务接收跟外界传入数据相关的事件的唯一方式;若有事件需要通知该任务,则往msgQEvent中放入一条消息,这样应用任务那边收到消息后,就可以被唤醒并执行相应的处理。本发明通过将应用任务接收外界数据的操作与定时器机制实现了分离,使应用任务可以按自己的需求定制每个操作的定时器。本发明的方法具有风险低,可实现多方数据通讯,方便灵活,可提高系统的运行效率。
Description
技术领域
本发明涉及一种自动控制设备的重要数据接收方法,尤其是一种对安全要求特别高的场合如轨道交通自动控制中使用的数据接收方法,具体地说是一种基于消息队列的外界数据接收方法。
背景技术
众所周知,在一些涉及重大人身和设备安全的自动控制系统领域,如城市地下轨道交通系统就要求系统具有极高的实时性,为此,在系统中运行的任务执行操作所花的时间会有严格的要求。但在任务的执行过程中,部分操作因为要等待外界传入数据,它的执行时间在运行过程中是不确定的。在高安全性系统中,这些执行时间不确定性的因素属于风险的一部分,对其需要有完善的防护措施。要做到一旦操作执行超时了,就进行相应的异常处理,而且处理后应用任务能够照常运行。
应用任务接收外界数据的操作通常是调用一个函数,不妨假设它为recv函数。为了防止recv函数超时,在实现recv函数的时候,通常会加入定时器机制,一旦超过某个时间值,该函数就会返回,告诉应用任务超时了。
这样的实现方式虽然能满足风险防护的要求,但从机制上讲不够灵活。recv函数如果是由自己来实现,其定时器机制肯定能满足自己的需求,但如果recv函数是第三方接口,那么其中的定时器机制就不一定能满足自己的需求了。例如,在某些实时性系统中,定时器不能采用系统时钟,而要采用专用的独立信号来实现。对这种特殊的情况,定时器机制需要自己来实现。但recv函数却是第三方接口,两者没法融合在一起。
导致这样结果的原因就在于recv函数与定时器机制捆绑在了一起。因此,急需发明一种将接收外界数据的操作和定时器分开方法来解决数据接收的安全和灵活兼容的问题。
发明内容
本发明的目的是针对现有的设备控制系统需将数据接收与定时器捆绑进行带来的灵活性差,存在安全隐患的问题,提供一种基于消息队列的外界数据接收方法。该方法将应用任务接收外界数据的操作与定时器机制实现了分离,使应用任务可以按自己的需求定制每个操作的定时器。
本发明的技术方案是:
一种基于消息队列的外界数据接收方法,首先,为每个与外界有交互的应用任务定义一个消息队列msgQEvent,作为该任务接收跟外界传入数据相关的事件的唯一方式;其次,若有事件需要通知该任务,则往msgQEvent中放入一条消息,这样应用任务那边收到消息后,就可以被唤醒并执行相应的处理,其特征是所述的消息类型有数据接收完毕消息和数据接收超时消息;所述的数据接收完毕消息是:假设应用任务中接收外界数据的函数为recv函数,采用消息队列msgQEvent后,将recv函数从应用任务中挪出,换成从msgQEvent中等待消息,另外用一个独立的任务Task A单独进行recv操作,该任务的优先级要高于应用任务,当recv操作完成后,Task A往msgQEvent中放入数据接收完毕消息,应用任务从msgQEvent收到该消息后,就去获取具体的数据,然后进行下一步的处理;所述的数据接收超时消息是指:在应用任务从msgQEvent中等待消息之前,启动一个定时器,该定时器可以采用系统时钟实现,也可以用其他的时钟源实现,当定时器超时后,则往msgQEvent中发送数据接收超时消息,这样,应用任务就可以被唤醒,然后进行相应的异常处理。
本发明的有益效果:
本发明通过将应用任务接收外界数据的操作与定时器机制实现了分离,使应用任务可以按自己的需求定制每个操作的定时器。
本发明的方法具有风险低,可实现多方数据通讯,方便灵活,可提高系 统的运行效率。
附图说明
图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收到该消息后,进入异常处理分支。
本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。
Claims (1)
1.一种基于消息队列的外界数据接收方法,首先,为每个与外界有交互的应用任务定义一个消息队列msgQEvent,作为该任务接收跟外界传入数据相关的事件的唯一方式;其次,若有事件需要通知该任务,则往msgQEvent中放入一条消息,这样应用任务那边收到消息后,就可以被唤醒并执行相应的处理,其特征是所述的消息类型有数据接收完毕消息和数据接收超时消息;所述的数据接收完毕消息是:假设应用任务中接收外界数据的函数为recv函数,采用消息队列msgQEvent后,将recv函数从应用任务中挪出,换成从msgQEvent中等待消息,另外用一个独立的任务Task A单独进行recv操作,该任务的优先级要高于应用任务,当recv操作完成后,Task A往msgQEvent中放入数据接收完毕消息,应用任务从msgQEvent收到该消息后,就去获取具体的数据,然后进行下一步的处理;所述的数据接收超时消息是指:在应用任务从msgQEvent中等待消息之前,启动一个定时器,该定时器可以采用系统时钟实现,也可以用其他的时钟源实现,当定时器超时后,则往msgQEvent中发送数据接收超时消息,这样,应用任务就可以被唤醒,然后进行相应的异常处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101356706A CN101847107B (zh) | 2010-03-30 | 2010-03-30 | 基于消息队列的外界数据接收方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101356706A CN101847107B (zh) | 2010-03-30 | 2010-03-30 | 基于消息队列的外界数据接收方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101847107A CN101847107A (zh) | 2010-09-29 |
CN101847107B true CN101847107B (zh) | 2012-07-04 |
Family
ID=42771732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101356706A Active CN101847107B (zh) | 2010-03-30 | 2010-03-30 | 基于消息队列的外界数据接收方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101847107B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495755B (zh) * | 2011-11-03 | 2013-04-17 | 深圳市开立科技有限公司 | 超声测量系统的模块交互方法和超声测量系统 |
CN102521104A (zh) * | 2011-12-13 | 2012-06-27 | 南京恩瑞特实业有限公司 | 高安全性系统运行进度的监控方法 |
CN104361458B (zh) * | 2014-11-20 | 2016-03-30 | 合一网络技术(北京)有限公司 | 基于消息驱动的用户任务管理系统 |
CN106293884B (zh) * | 2015-05-20 | 2019-06-07 | 苏州简约纳电子有限公司 | 一种消息驱动系统中无效超时消息的检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1571376A (zh) * | 2003-07-16 | 2005-01-26 | 深圳市中兴通讯股份有限公司 | 实现嵌入式系统中任务间自适应通讯的方法 |
CN1645331A (zh) * | 2004-01-02 | 2005-07-27 | 微软公司 | 隐式可配置消息队列基用户接口自动同步的系统和方法 |
CN101582786A (zh) * | 2009-06-17 | 2009-11-18 | 中兴通讯股份有限公司 | 一种及时消息及时处理的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8984530B2 (en) * | 2008-01-31 | 2015-03-17 | Microsoft Corporation | Queued message dispatch |
-
2010
- 2010-03-30 CN CN2010101356706A patent/CN101847107B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1571376A (zh) * | 2003-07-16 | 2005-01-26 | 深圳市中兴通讯股份有限公司 | 实现嵌入式系统中任务间自适应通讯的方法 |
CN1645331A (zh) * | 2004-01-02 | 2005-07-27 | 微软公司 | 隐式可配置消息队列基用户接口自动同步的系统和方法 |
CN101582786A (zh) * | 2009-06-17 | 2009-11-18 | 中兴通讯股份有限公司 | 一种及时消息及时处理的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101847107A (zh) | 2010-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101847107B (zh) | 基于消息队列的外界数据接收方法 | |
CN101136828B (zh) | 一种基于rs485多主机有线串行通讯的方法 | |
CN103092682A (zh) | 异步网络应用程序处理方法 | |
CN102271123A (zh) | 一种通信方法、系统及设备 | |
CN107528706A (zh) | 一种基于链路协议的设备主备倒换方法和装置 | |
CN102455940A (zh) | 一种定时器和异步事件的处理方法及系统 | |
CN203232436U (zh) | 一种手持快递派件终端 | |
CN111221662A (zh) | 任务调度方法、系统及装置 | |
CN1925386A (zh) | 时钟同步方法以及应用该方法的第一部件和第二部件 | |
CN102479392A (zh) | 电子不停车收费和人工收费合一车道的控制方法 | |
CN103064711A (zh) | 一种基于Spread分布式应用系统的热加载方法 | |
CN101604270B (zh) | 基于vxworks操作系统的ARINC429通信冗余方法 | |
CN111200653B (zh) | 多平台通讯方法、多平台通讯装置及中间服务器 | |
CN113112034A (zh) | 还车处理方法、自行车、服务器及用户终端 | |
CN102368223A (zh) | 双核嵌入式系统及控制方法 | |
CN202481100U (zh) | 轨道交通指挥调度系统 | |
CN101937190B (zh) | 卫星同步时钟装置模块化多源输入无缝切换方法 | |
CN104660638A (zh) | 数据传输方法及系统 | |
CN101162960B (zh) | 一种主备控制单元信号同步的方法 | |
CN101931467A (zh) | 一种外置光纤Bypass设备和光信号通道的切换方法 | |
CN102196044A (zh) | 数据传输方法及系统 | |
CN102055606A (zh) | 一种业务支撑系统中的业务处理方法、系统及设备 | |
CN101989250B (zh) | 一种串行通信的方法和系统 | |
CN114126028B (zh) | 一种差动保护方法、装置、通信单元和存储介质 | |
CN104135414A (zh) | 一种基于信息交换总线二次安全防护同步跨区服务的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |