实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_006

本文详细介绍了DDS数据读取者(DataReader)如何从RTPS Reader的HistoryCache获取数据,包括过滤器的工作原理以及read和take方法的影响。内容涵盖RTPS协议的多个转换过程,如T1到T4,解释了DataReader在不同操作下的行为。此外,还提供了DDS DataReader访问HistoryCache的状态图和转换表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字:OMG,RTPS,DDS

The Real-time Publish-Subscribe Protocol (RTPS) DDS Interoperability Wire Protocol Specification,Version 2.2,September 2014

8.2.9.2. DDS 数据读取者(DataReader)

DDS DataReader从相应RTPS Reader的HistoryCache获取其接收的数据。存储在HistoryCache中的更改数由QoS设置(如HISTORY和RESOURCE_LIMITS QoS)确定。

每个匹配的Writer将尝试将所有相关数据样本从其HistoryCache传输到Reader的HistoryCache中。在DDS DataReader上调用read或take方法访问HistoryCache。返回给用户的更改是HistoryCache中的更改,它们通过了Reader设置的所有过滤器(如果有)限制。

Reader过滤器同样地由DDS_FILTER(reader,change)表示。如上所述,DDS实现可能在Writer端执行大部分过滤。在这种情况下,被过滤的数据样本永远不会被发送(因此不会出现在Reader的HistoryCache中),或者包含应用于何处的过滤器及其对应的结果信息(基于内容的过滤)。

DDS DataReader还可以决定从HistoryCache中删除更改以满足TIME_BASED_FILTER等QoS的设置。这种确切的行为仍然是特定于实现的,并且不由RTPS协议建模。

以下状态图说明了DDS DataReader如何访问HistoryCache中的更改。

在这里插入图片描述
图 8 7 DDS DataReader访问HistoryCache状态图

表 8 12 DDS DataReader访问HistoryCache转换表
在这里插入图片描述

8.2.9.2.1. 转换 T1

这种转换是由创建DDS DataReader“the_dds_reader”触发的。
转换在虚拟机中执行以下逻辑动作:

 the_rtps_reader = new RTPS::Reader;
 the_dds_reader.related_rtps_reader := the_rtps_reader;
8.2.9.2.2. 转换 T2

这种转换是通过DDS DataReader“the_dds_reader”调用“read”方法读取数据触发的。 返回到应用程序的更改将保留在RTPS Reader的HistoryCache中,后续的read或take方法可以再次找到它们。

转换在虚拟机中执行以下逻辑动作:

the_rtps_reader := the_dds_reader.related_rtps_reader;
a_change_list := new();
FOREACH change IN the_rtps_reader.reader_cache.changes 
{
    if DDS_FILTER(the_rtps_reader, change) ADD change TO a_change_list;
}
RETURN a_change_list;

DDS_FILTER()方法反映了DDS DataReader API根据CacheChange :: kind,QoS,内容过滤器和其他机制选择更改子集的功能。请注意上面的逻辑动作仅反映行为,而不一定反映协议的实际实现。

8.2.9.2.3. 转换 T3

这种转换是通过DDS DataReader“the_dds_reader”调用“take”方法读取数据触发的。 返回到应用程序的更改将从RTPS Reader的HistoryCache中删除,后续的read或take方法找不到相同的更改。

转换在虚拟机中执行以下逻辑动作:

the_rtps_reader := the_dds_reader.related_rtps_reader;
a_change_list := new();
FOREACH change IN the_rtps_reader.reader_cache.changes 
{
			if DDS_FILTER(the_rtps_reader, change) 
			{
				ADD change TO a_change_list;
			}
			the_rtps_reader.reader_cache.remove_change(a_change);
}
RETURN a_change_list;

DDS_FILTER()方法反映了DDS DataReader API根据CacheChange :: kind,QoS,内容过滤器和其他机制选择更改子集的功能。请注意上面的逻辑动作仅反映行为,而不一定反映协议的实际实现。
转换后,以下后置条件成立:

FOREACH change IN a_change_list
			change BELONGS_TO the_rtps_reader.reader_cache.changes == FALSE
8.2.9.2.4. 转换 T4

这种转换是由DDS DataReader“the_dds_reader”的析构触发的。

转换在虚拟机中执行以下逻辑动作:

delete the_dds_reader.related_rtps_reader;

译文连载

RTPS规范-上一篇:实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_005
RTPS规范-下一篇:实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_007
DDS规范-译文连载:DDS (Data Distribution Service) 数据分发服务-规范中文翻译_001

相关链接

【1-What:什么是DDS?
【2-Why:为什么选择DDS?
【3-How:DDS如何工作?
DDS科普:一文读懂DDS(数据分发服务)
产品介绍:BLUE DCS分布式数据连接解决方案
产品试用: 海蓝云平台-Blue DCS

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值