DDS (Data Distribution Service) 数据分发服务-规范中文翻译_004

DDS (Data Distribution Service) 数据分发服务-规范中文翻译_004


2.以数据为中心的订阅发布(DCPS)

2.2 平台无关模型(Platform Independent Model ,PIM)

2.2.2 平台无关模型(PIM)描述

DCPS由五大模块组成。
在这里插入图片描述

图 2 4 DCPS模块分类

  1. 基础设施模块定义了抽象类和由其他模块细化的接口。它还为中间件提供了两种交互方式(基于通知和等待)的支持。
  2. 域模块包含DomainParticipant类,它充当中间件服务的入口点,并充当许多类的工厂。DomainParticipant类还充当组成服务的其他对象的容器。
  3. 主题定义模块包含Topic,ContentFilteredTopic,MultiTopic类和TopicListener接口,也就是主题定义模块包含应用程序所需用来定义Topic对象并将QoS策略附加到对象上的全部内容。
  4. 发布模块包含PublisherDataWriter类以及PublisherListener和DataWriterListener接口,也就是包含发布端所需的全部内容。
  5. 订阅模块包含Subscriber,DataReader,ReadCondition和QueryCondition类,以及SubscriberListener和DataReaderListener接口,也就是包含订阅方所需的全部内容。

在PIM级别,我们选择将任何实体建模为类或接口。然而值得注意的是这并不意味着它们中的任何一个都将被转换为IDL接口。通常我们选择将应用程序必须扩展的实体建模为接口,以便与中间件服务进行交互。其余实体已建模为类。

2.2.2.1 基础设施模块

在这里插入图片描述
图 2 5 DCPS基础设施模块的类模型

DCPS基础设施模块由以下类组成:

  • Entity
  • DomainEntity
  • QosPolicy
  • Listener
  • Status
  • WaitSet
  • Condition
  • GuardCondition
  • StatusCondition
2.2.2.1.1 Entity类

此类是支持QoS策略,监听器和状态条件的所有DCPS对象的抽象基类。

在这里插入图片描述
StatusKind是一个枚举类型,用于标识每个具体的Status类型。

以下子条款详细说明了Entity类的所有方法。

2.2.2.1.1.1 set_qos(抽象方法)

此方法用于设置实体的QoS策略,必须由每个派生的实体类(DomainParticipant,Topic,Publisher,DataWriter,Subscriber,DataReader)提供,以便可以设置对每个实体有意义的策略。

通过qos_list参数指定的策略集应用于现有QoS之上,替换先前设置的任何策略值。

如2.2.3支持的QoS所述,中某些策略是“不可变的”,它们只能在创建实体时设置,或者在实体启用之前设置。如果在实体启用后调用set_qos尝试更改 “不可变”策略的值,此操作将失败并返回IMMUTABLE_POLICY。

2.2.3支持的QoS小节还描述了QoS策略的某些值可能与其他策略的设置不兼容。如果通过set_qos方法指定一组QoS值,与现有QoS值组合将导致不一致的策略,则set_qos方法也将失败。在这种情况下,返回值为INCONSISTENT_POLICY。

如果应用程序为服务不支持的QoS策略提供非默认值,则set_qos方法将失败并返回UNSUPPORTED。

仅当set_qos方法成功才会更改现有策略集,此时返回OK。在所有其他情况下,没有任何策略会被修改。

每个派生的实体类(DomainParticipant,Topic,Publisher,DataWriter,Subscriber,DataReader)都具有相应的QoS特殊值(PARTICIPANT_QOS_DEFAULT,PUBLISHER_QOS_DEFAULT,SUBSCRIBER_QOS_DEFAULT,TOPIC_QOS_DEFAULT,DATAWRITER_QOS_DEFAULT,DATAREADER_QOS_DEFAULT)。此特殊值可用作set_qos方法的参数,意味着应更改实体的QoS以匹配实体工厂中的当前默认QoS集。set_qos无法修改不可变的QoS,因此成功返回值表明已修改实体的可变QoS以匹配实体工厂的当前默认值。

除标准返回错误代码外,还可能返回错误代码:INCONSISTENT_POLICY,IMMUTABLE_POLICY。

2.2.2.1.1.2 get_qos(抽象方法)

此方法允许访问实体的现有QoS策略集,必须由每个派生的实体类(DomainParticipant,Topic,Publisher,DataWriter,Subscriber,DataReader)提供,以便获取对特定实体有意义的策略。

2.2.2.1.1.3 set_listener(抽象方法)

此方法在实体上安装监听器。只有在特定掩码代表的通信状态更改时才会调用监听器。

允许使用’nil’作为监听器的值。“nil”监听器不执行任何操作。

每个实体只能附加一个监听器。如果已经设置了监听器,set_listener方法将使用新的替换它。因此,如果将值“nil”当做set_listener方法的监听器参数,则将删除任何现有监听器。

此方法必须由每个派生的实体类(DomainParticipant,Topic,Publisher,DataWriter,Subscriber,DataReader)提供,以便监听器具有适合特定实体的具体类型。

2.2.2.1.1.4 get_listener(抽象方法)

此方法允许访问附加到实体的现有监听器。

此方法必须由每个派生的实体类(DomainParticipant,Topic,Publisher,DataWriter,Subscriber,DataReader)提供,以便监听器具有适合特定实体的具体类型。

2.2.2.1.1.5 get_statuscondition

此方法允许访问与实体关联的状态条件(2.2.2.1.9,StatusCondition类),可以将返回的条件添加到等待集(2.2.2.1.6,WaitSet类),以便应用程序可以等待影响实体的特定状态的更改。

2.2.2.1.1.6 get_status_changes

此方法将检索实体中“已触发”的通信状态列表。即自上次应用程序读取状态以来其值更改的状态列表。 2.2.4.2状态变化给出了通信状态“触发”的准确定义。

首次创建实体或未启用实体时,所有通信状态都处于“未触发”状态,因此get_status_changes方法返回的列表将为空。

get_status_changes方法返回的状态列表是指在实体自身触发的状态,不包括适用于包含实体的状态。

2.2.2.1.1.7 enable

此方法启用实体。可以启用或禁用实体对象。这由实体相应的工厂上ENTITY_FACTORY Qos策略(2.2.3.20,ENTITY_FACTORY)的值控制。
默认情况下,ENTITY_FACTORY的设置是不必在新创建的实体上显式调用enable方法(请参阅2.2.3.20,ENTITY_FACTORY)。
enable方法是幂等的。在已启用的Entity上调用enable将返回OK并且无效。
如果尚未启用实体,则可以在其上调用以下类型的操作:

  • 设置或获取实体的QoS策略(包括默认QoS策略)和监听器的方法
  • get_statuscondition
  • “工厂”方法
  • get_status_changes和其他获取状态方法(尽管已禁用的实体状态永远不会更改)
  • “查找”操作

其他方法可以明确声明可以在禁用的实体上调用它们,这种情况不会返回错误返回值NOT_ENABLED。

通过工厂调用正确的方法来删除尚未启用的实体是合法的。

无论ENTITY_FACTORY Qos策略的设置如何,通过已禁用的工厂创建的实体都会被禁用。

在未启用工厂的实体上调用enable将失败并返回PRECONDITION_NOT_MET。

如果ENTITY_FACTORY QoS策略将autoenable_created_entities设置为TRUE,则工厂上的enable方法将自动启用从工厂创建的所有实体。

在启用实体之前,不会调用与实体关联的监听器。与未启用的实体关联的条件是“非活动”,即trigger_value == FALSE(请参阅2.2.4.4,条件和等待集)。

2.2.2.1.1.8 get_instance_handle

此方法返回表示实体的InstanceHandle_t。


译文连载

上一篇:DDS (Data Distribution Service) 数据分发服务-规范中文翻译_003

下一篇:DDS (Data Distribution Service) 数据分发服务-规范中文翻译_005

发布了3 篇原创文章 · 获赞 5 · 访问量 982

猜你喜欢

转载自blog.csdn.net/DDS_CSIT/article/details/104769027
dds