精华内容
下载资源
问答
  • DDS原理

    2019-04-28 13:26:44
    为此,了解DDS模块对数字信号处理及其硬件实现有着很重要的作用DDS的结构主要由相位累加器、波形存储器、数模(D/A)转换器和低通滤波器等四个大的结构组成。其结构框图如下 图中,相位累加器是由N位加法器与N位...

    DDS技术是一种全新的频率合成方法,最早由JOSEPH TIERENY等三人提出,其具有输出频率分辨率高、功耗低、频率切换速度快且频率切换时输出信号的相位连续的特点。为此,了解DDS模块对数字信号处理及其硬件实现有着很重要的作用。

    DDS的结构主要由相位累加器、波形存储器、数模(D/A)转换器和低通滤波器等四个大的结构组成。其结构框图如下

    这里写图片描述

    图中,相位累加器是由N位加法器与N位累加寄存器构成,它是DDS模块中一个极其重要的部分。在参考频率时钟的驱动下,DDS模块开始工作;当每来一个参考时钟时,累加器就把频率控制字FW与寄存器输出的值进行累加,将相加后的结果再输入到寄存器中,而累加寄存器就将在上一个参考时钟作用时产生的数据通过反馈的方式输送到累加器中。这样,在时钟的作用下,就可以不停的对频率控制字进行累加。此时,用相位累加器输出的数据作为地址在波形存储器中通过查找地址所对应的幅值表,就可以完成其从相位到幅值之间的转化。

    在DDS模块中,输出频率的公式为
    这里写图片描述
    输出信号的频率分辨率为
    这里写图片描述
    从上两式可以看出,在参考信号与加法器或寄存器的位数给定时,信号最终的输出频率主要由频率控制字决定。故当频率控制字变化时,输出频率也跟着变化,从而可以实现调频的基本功能。

    展开全文
  • DDS工作原理

    千次阅读 2018-09-16 16:57:23
    为此,了解DDS模块对数字信号处理及其硬件实现有着很重要的作用。  DDS的结构主要由相位累加器、波形存储器、数模(D/A)转换器和低通滤波器等四个大的结构组成。其结构框图如下  图中,相位累加器是由N位加法器与N...

    DDS工作原理 
    DDS技术是一种全新的频率合成方法,最早由JOSEPH TIERENY等三人提出,其具有输出频率分辨率高、功耗低、频率切换速度快且频率切换时输出信号的相位连续的特点。为此,了解DDS模块对数字信号处理及其硬件实现有着很重要的作用。 
    DDS的结构主要由相位累加器、波形存储器、数模(D/A)转换器和低通滤波器等四个大的结构组成。其结构框图如下 
    这里写图片描述

    图中,相位累加器是由N位加法器与N位累加寄存器构成,它是DDS模块中一个极其重要的部分。在参考频率时钟的驱动下,DDS模块开始工作;当每来一个参考时钟时,累加器就把频率控制字FW与寄存器输出的值进行累加,将相加后的结果再输入到寄存器中,而累加寄存器就将在上一个参考时钟作用时产生的数据通过反馈的方式输送到累加器中。这样,在时钟的作用下,就可以不停的对频率控制字进行累加。此时,用相位累加器输出的数据作为地址在波形存储器中通过查找地址所对应的幅值表,就可以完成其从相位到幅值之间的转化。

    在DDS模块中,输出频率的公式为 
    这里写图片描述 
    输出信号的频率分辨率为 
    这里写图片描述 
    从上两式可以看出,在参考信号与加法器或寄存器的位数给定时,信号最终的输出频率主要由频率控制字决定。故当频率控制字变化时,输出频率也跟着变化,从而可以实现调频的基本功能。

    展开全文
  • OpenDDS学习笔记(3):OpenDDS概述

    千次阅读 2019-04-30 15:00:17
    文章目录一、DCPS概述1.1 基本组成1.2 内置主题1.3 QoS策略1.4 Listener1.5 条件二、OpenDDS实现2.1 兼容性2.2 OpenDDS架构 一、DCPS概述 1.1 基本组成 域(Domain) 域是DCPS内部最基本区分单元。每个...


    一、DCPS概述

    1.1 基本组成

    PIM平台框架结构

    • 域(Domain)
      域是DCPS内部最基本区分单元。每个实体必须属于某一个域,并且只能在相同域中与其他实体进行相互作用。应用程序代码可以通过实体自由地与多个域进行相互作用。
    • 域参与者(DomainParticipant)
      域参与者是应用程序入口点,以方便在特定域中进行交互。域参与者是写入或读取数据多个对象的工厂。
    • 主题(Topic)
      主题是发布、订阅应用程序之间进行交互作用的根本手段。每个主题在域里面都有一个独特的名称以及它发布的一个具体数据类型。发布数据时,发布过程总是指定主题。订阅者通过主题请求数据。在DCPS模型中,使用者可以通过不同实例发布相同主题的数据样本。
    • 数据写入者(DataWriter)
      发布应用程序通过数据写入者把数值传递给DDS。每个数据写入者必须是一个特定的主题。应用程序使用数据写入者指定类型的接口,在主题上发布例子。数据写入者负责对数据编码,并传递到发布者处准备传输。
    • 发布者(Publisher)
      发布者负责获取所发布的数据,并且把它分发到域中所有相关订阅者处。采用的准确机制由服务实现决定。
    • 订阅者(Subscriber)
      订阅者从发布者处接受信息,并递送到任何与它相连的、相关的数据读取者上。
    • 数据读取者(DataReader)
      数据读取者从订阅者处获取数据,将主题解码到适当类型中,然后把样本递送到应用程序处。每个数据读取者必须是一个特定的主题。应用程序使用数据读取程序的特定类型接口,便于接收样本。

    1.2 内置主题

    DDS规范定义了许多主题,这些主题被嵌入到DDS实现中。订阅这些嵌入式主题,使应用程序开发人员能访问正在被使用的域的状态,包括哪个主题被注册,哪个DataReader、DataWriter被连接以及被断开,以及各种各样实体的QoS设置。当被订阅时,应用程序接收样本,而这些样本指示在域内部、实体中所发生的改变。下表为DDS中定义的嵌入式主题。

    主题名称 描述
    DCPS 参与者 每个实例代表了一个域参与者
    DCPS 主题 每个实例代表了一个标准的(不是嵌入式的)主题
    DCPS 发布 每个实例代表了一个DataWriter
    DCPS 订阅 每个实例代表了一个DataReader

    1.3 QoS策略

    DDS规范定义了许多QoS策略,应用程序利用这些策略,指定它们对于服务质量QoS的要求。参与者指定:从服务中,需要什么行为。同时,服务也决定了如何实现这些行为。这些策略可应用到DCPS的所有实体中(比如主题、DataWriter、DataReader、发布者、订阅者、域参与者),但对于所有所有实体类型而言,不是所有的策略均有效。
    通过使用请求-提供(Request-Offered,RxO)模式,可以把订阅者和发布者进行匹配。订阅者请求一组最低程度需求的策略。发布者向潜在的订阅者提供一组QoS策略。然后DDS的实现利用所提供的策略,开始尝试匹配提出的策略;如果兼容,形成关联。

    1.4 Listener

    DCPS层为每个实体定义了一个回调接口,便于应用程序进程可以侦听(Listeners)关于那个实体的某些状态改变或者事件。例如,当不存在可以读取的可用数据时,就会通知DataReader。

    1.5 条件

    条件(Condition)和等待集(WaitSet)能够为Listeners在DDS中检测感兴趣的事件提供选择。一般模式为:

    • 应用程序创建一种特定的Condition对象,比如状态条件,并附加到一个WaitSet上。
    • 应用程序在WaitSet上等待,直到一个或多个条件为true。
    • 应用程序在相应的实体对象上进行调用,以便于提取必要信息。
    • DataReader接口也具有带有读取条件参数的操作。
    • 提供查询条件对象,以作为订阅内容配置文件实现的一部分。查询条件接口扩展了条件参数接口。

    二、OpenDDS实现

    2.1 兼容性

    2.1.1 DDS兼容性

    DDS规范定义了DDS实现的5点兼容性:

    • 最小的配置文件。
    • 内容-订阅配置文件。
    • 持久性配置文件。
    • 所有权配置文件。
    • 对象模型配置文件。

    OpenDDS符合DDS规范的整个DCPS层,而且包括带有以下注释说明的所有QoS实现:

    • 只有在使用TCP,IP多点发送传输,或者RTPS_UDP传输时,才支持RELIABILITY.kind=RELIABLE。
    • 由于QoS可变,所以没有实现TRANSPORT_PRIORITY。

    2.1.2 DDS-RTPS兼容性

    OpenDDS还没有实现的项目:

    • 非默认生存性(LIVELINESS)QoS。
    • 写入程序方面的内容过滤。
    • 关于表示(PRESENTATION)QoS的相干集合。
    • 直接地写入。
    • 属性列表。
    • 关于持久性(DURABLE)数据的写入信息。
    • 不生成键杂凑值,但是可选择。
    • wait_for_acknowledgements()函数方法。
    • nackSuppressionDuration以及heartbeatSuppressionDuration。

    2.2 OpenDDS架构

    2.2.1 设计原理

    OpenDDS实现是在OMG IDL PSM严格解释说明的基础上的。几乎所有的案例中,OMG C++语言映射被用来定义如何将DDS规范中的IDL映射到C++ API,达到方便OpenDDS使用者的目的。
    与OMG IDL PSM的主要区别:本地接口被用于实体以及各种其他接口。在DDS规范中,这些被定义为不受限制的非本地接口。把它们定义为本地接口,可以提高性能、减少内存的使用,简化使用者与接口的交互,让使用者更加容易创建实现。

    2.2.2 可扩展传输框架

    OpenDDS使用由DDS规范定义的IDL接口,以便于初始化以及控制服务使用。通过一个OpenDDS特有的传输框架,可以实现数据传输,而此框架可以允许服务利用各种传输协议,因此可称为可插拔的传输层,使得OpenDDS的架构具有很大的灵活性。
    目前,OpenDDS支持TCP/IPUDP/IPIP多点发送共享内存以及RTPS_UDP等多种传输协议,如图。传输协议可以通过配置文件指定,并在发布和订阅者进程中附于各种实体。

    OpenDDS可扩展传输框架
    可扩传输框架能够让应用程序开发人员自行定制传输协议,包括设定一些传输框架中的级别。当创建应用时,UDP传输协议为开发人员提供了良好的使用基础,可见目录$DDS_ROOT/dds/DCPS/transport/udp

    2.2.3 DDS发现

    DDS实现必须通过一些集中式代理或者分布式策略发现彼此,而OpenDDS的一个重要特征是:通过利用DCPS信息仓库(DCPSInfoRepo)或者RTPS发现(Discovery),但在DataWriter和DataReader之间采用不同的传输协议实现数据传输。
    OMG DDS规范给出发现到实现的详细过程。在DDS实现之间的互操作性方面,OMG DDS-RTPS规范提供了关于发现对等类型的要求。OpenDDS提供两个关于发现的选项:

    • 信息仓库 (InfoRepo)集中式的储存库类型,其作为一个单独的进程运行,可以允许发布者和订阅者以集中式发现彼此。
    • RTPS发现:一种对等的发现类型,使用RTPS协议通知可用性和本地信息。
      其他DDS实现的互操作性必须使用对等方法,但只在OpenDDS部署中才有用。

    2.2.3.1 利用DCPSInfoRepo的集中式发现

    DCPSInfoRepo是OpenDDS执行的一种独立式服务,以便于实现集中式方法,他作为一个CORBA服务器进行实现。当用户请求一个关于主题的订阅时,DCPSInfoRepo就会定位主题,通知发布者目前有新的订阅者。当在非RTPS配置中使用OpenDDS时,就需要运行DCPSInfoRepo,而RTPS配置时则不需要使用DCPSInfoRepo。DCPSInfoRepo不包含在数据传播中,它的任务被限制在发现彼此的OpenDDS应用程序范围内。
    应用程序使用者可利用DCPS域的非重叠性部分,灵活、自由地运行多个InfoRepo。
    域操作可以在多个仓库上进行,从而形成一个分布式虚拟仓库,即仓库联盟(Repository Federation)。为了使每个仓库参与到联盟中,每个仓库都必须在启动时指定它自己的联盟标识符数值(一个32位的数字值)。

    2.2.3.2 利用RTPS的对等发现

    需要对等发现模式的DDS应用程序可由OpenDDS性能设定,通过使用RTPS协议可以完成这种类型的发现。这个简单的发现形式可通过DDS对DataReader和DataWriter简单配置发现,如图。

    利用OpenDDS InfoRepo的集中式发现
    当每个参与者的进程激活DataReader和写入程序的DDS-RTPS发现机制时,利用默认的或者配置的网络端口,网络端点才能被创建,以便于DDS参与者可以发布DataReader以及写入程序的可用性。一段时间后,基于标准的、彼此寻觅的那些就会基于所配置的、可插拔的传输协议,发现彼此并建立一个连接。
    当开发并部署需要使用RTPS发现的应用程序时,开发人员需考虑以下限制因素:

    • 由于UDP端口的方式被分配给域ID,那么,域ID应当在0~231(包含231)之间。在每个OpenDDS进程、每个域中,支持多达120个域参与者。
    • 主题名称以及类型识别码被限制到256个字符。
    • 由于全局唯一标识符(GUID)的方式被指定,OpenDDS的本地多点发送传输不能与RTPS发现一并工作(如果试图这样,那么将发布一个警告信息)。

    2.2.4 线程

    OpenDDS创建ORB以及单独的线程。它也使用它自己的线程,以便于处理输入的和输出的非COBRA传输I/O。由于存在不能预料的连接关闭,创建一个单独的线程,以便于资源的清除。应用程序可通过DCPS的Listener机制,从这些线程中得到回调。
    当通过DDS发布一个样本时,OpenDDS试图通过调用线程把样本发送给已连接的任何订阅者。如果发送线程被堵塞,那么样本可能在单独的服务线程上,排队等待着发送。此行为取决于QoS策略的设定值。
    所有订阅者中的输入数据,由服务线程进行读取,并由应用程序进行排队,等待读取。从服务线程调用DataReaderListener。

    2.2.5 配置

    OpenDDS包括一个基于文件的配置框架,用于配置全局项。例如调试级别、内层分配以及发现,以及关于发布者和订阅者的传输实现详细信息。也可以直接以代码的方式实现配置,但建议使配置具体化,以便于是维护变得简单,并且减少运行时的错误。


    展开全文
  • 基于FPGA的DDS设计

    2018-09-24 15:39:26
    DDS(Direct Digital Synthesizer)直接数字合成器,这是直译过来的名字。设计人员一般 把它叫做信号发生器,用它来产生一些数字意义上的波形。它的意义还是挺大的,例如我们 学习滤波器,就需要一个...有很大的作用
  • 而且,它的某些部分还没有起作用。 但是,这里有一些组件和想法值得在DDS和RTSJ社区之间共享。 引文 戴安娜斯(JA); Díaz,M。 “使用标准将软实时组件集成到动态分布式体系结构中”,计算机标准和接口。 爱思...
  • 在各行各业的测试应用中,信号源扮演着极为重要的作用。但信号源具有许多不同的类型,不同类型的信号源在功能和特性上各不相同,分别适用于许多不同的应用。目前,常见的信号源类型包括任意波形发生器,函数发生器,...
  • 学习DDS的基本原理与框架,熟悉每一组成部分的工作,学习Simulink各个模块的同时深入了解DDS每一部分的作用与实现方式。分析DDS每一部分的工作原理与实现方法,在Simulink里利用相应模型搭建实现DDS每一部分的功能。
  • 在各行各业的测试应用中,信号源扮演着极为重要的作用。但信号源具有许多不同的类型,不同类型的信号源在功能和特性上各不相同,分别适用于许多不同的应用。目前,常见的信号源类型包括任意波形发生器,函数发生器,...
  • 频率源是现代雷达电子系统的重要组成部分,是整个雷达...分析在理想条件下DDS输出信号的频谱,在此基础上,分析并仿真影响DDS杂散噪声的原因,提出几种有效地抑制DDS杂散的办法,对改进DDS电路的杂散有很大的促进作用
  • 频率切换时相位连续的优点,可以输出宽带正交信号,其输出相位噪声低,对参考频率源的相位噪声有改善作用;可以产生任意波形;全数字化实现,便于集成,体积小,重量轻。  本文介绍了DDS的基本原理,同时针对DD
  •  频率源是现代短波射频通信系统的,对整个系统的正常运行起着决定性的作用。作为射频电路与系统的设备,频率源的好坏关系着整个系统的稳定性。现在的频率合成技术正朝着杂散和相位噪声更低的方向发展,同时还要求有...
  • OpenDDS应用开发中,将遇到如opendds_idl、tao_idl、idl2jni等工具,各自的作用如下 opendds_idl tao_idl idl2jni 1)opendds_idl编译HelloMsg.idl的结果文件 HelloMsgTypeSupport.idl HelloMsgTypeSupport.cpp...

    OpenDDS处理IDL时,分别将用TAO和OpenDDS的IDL编译器进行处理,处理命令包含opendds_idl、tao_idl、idl2jni等,各自的作用如下

    1. tao_idl,将IDL文件生成C++语言的表示;
    2. opendds_idl,将IDL生成DDS类型指定接口的C++语言的表示;
    3. idl2jni,java本地方法的实现;

    以HelloMsg.idl为例

    1)tao_idl HelloMsg.idl,执行tao_idl的编译HelloMsg.idl的结果文件,
    HelloMsgC.cpp
    HelloMsgC.h
    HelloMsgC.inl
    HelloMsgS.cpp
    HelloMsgS.h

    #if TAO_MAJOR_VERSION != 2 || TAO_MINOR_VERSION != 3 || TAO_BETA_VERSION != 0
    #error This file should be regenerated with TAO_IDL
    #endif
    
    #if defined (TAO_EXPORT_MACRO)
    #undef TAO_EXPORT_MACRO
    #endif
    #define TAO_EXPORT_MACRO HelloCommon_Export
    
    namespace Hello
    {
      struct HelloMsg;
    
      typedef
        ::TAO_Var_Var_T<
            HelloMsg
          >
        HelloMsg_var;
    
      typedef
        ::TAO_Out_T<
            HelloMsg
          >
        HelloMsg_out;
    
      struct HelloCommon_Export HelloMsg		//HelloMsg.idl对应的结构
      {   
        typedef HelloMsg_var _var_type;
        typedef HelloMsg_out _out_type;
        
        ::TAO::String_Manager msg;
      };
    } // module Hello
    
    TAO_BEGIN_VERSIONED_NAMESPACE_DECL
    
    
    // Arg traits specializations.
    namespace TAO
    {
      template<>
      class Arg_Traits< ::Hello::HelloMsg>	
        : public
            Var_Size_Arg_Traits_T<
                ::Hello::HelloMsg,
                TAO::Any_Insert_Policy_Noop
              >
      {
      };
    }
    
    TAO_END_VERSIONED_NAMESPACE_DECL
    
    TAO_BEGIN_VERSIONED_NAMESPACE_DECL
    
    // Traits specializations.
    namespace TAO
    {
    }
    TAO_END_VERSIONED_NAMESPACE_DECL
    
    TAO_BEGIN_VERSIONED_NAMESPACE_DECL
    //HelloMsg序列化成TAO_InputCDR,TAO_OutputCDR反序列化成HelloMsg
    HelloCommon_Export ::CORBA::Boolean operator<< (TAO_OutputCDR &, const Hello::HelloMsg &);
    HelloCommon_Export ::CORBA::Boolean operator>> (TAO_InputCDR &, Hello::HelloMsg &);
    
    TAO_END_VERSIONED_NAMESPACE_DECL

    2)opendds_idl HelloMsg.idl,执行opendds_idl编译HelloMsg.idl的结果文件
    HelloMsgTypeSupport.idl
    HelloMsgTypeSupportImpl.cpp
    HelloMsgTypeSupportImpl.h 

    生成了支持串行化和主键的代码,用于数据包的数据封装和拆封,同时生成DataWriter和DataReader所使用的类型相关的支持代码。

    IDL生成文件包含HelloMsgTypeSupport,,HelloMsgDataWriter和HelloMsgDataReader接口定义。这些特定类型的DDS接口将用于向域注册定义的数据类型、发布该类型的数据及接收该类型的数据。

    module Hello {
    #pragma DCPS_SUPPORT_ZERO_COPY_READ
    #pragma DCPS_GEN_ZERO_COPY_READ
    
    #if !defined (__TAO_IDL) || (__TAO_IDL >= 0x060101)
    #pragma DCPS_DATA_SEQUENCE_TYPE "Hello::HelloMsgSeq"
    typedef sequence<Hello::HelloMsg> HelloMsgSeq;
    #else
    native HelloMsgSeq;
    #endif
    
    /** Support topic registration for HelloMsg data type.
     *
     * See the DDS specification, OMG formal/04-12-02, for a description of
     * this interface.
     */
    local interface HelloMsgTypeSupport : OpenDDS::DCPS::TypeSupport {
    };
    
    /** DataWriter interface for HelloMsg data type.
     *
     * See the DDS specifications, OMG formal/04-12-02 and formal/07-01-01,
     * for a description of this interface.
     */
    local interface HelloMsgDataWriter : ::DDS::DataWriter {
        ::DDS::InstanceHandle_t register_instance(
                    in Hello::HelloMsg instance);
    
        ::DDS::InstanceHandle_t register_instance_w_timestamp(
                    in Hello::HelloMsg instance,
                    in ::DDS::Time_t timestamp);
    
        ::DDS::ReturnCode_t unregister_instance(
                    in Hello::HelloMsg instance,
                    in ::DDS::InstanceHandle_t handle);
    
        ::DDS::ReturnCode_t unregister_instance_w_timestamp(
                    in Hello::HelloMsg instance,
                    in ::DDS::InstanceHandle_t handle,
                    in ::DDS::Time_t timestamp);
    
        //WARNING: If the handle is non-nil and the instance is not registered
        //         then this operation may cause an access violation.
        //         This lack of safety helps performance.
        ::DDS::ReturnCode_t write(
                    in Hello::HelloMsg instance_data,
                    in ::DDS::InstanceHandle_t handle);
    
        //WARNING: If the handle is non-nil and the instance is not registered
        //         then this operation may cause an access violation.
        //         This lack of safety helps performance.
        ::DDS::ReturnCode_t write_w_timestamp(
                    in Hello::HelloMsg instance_data,
                    in ::DDS::InstanceHandle_t handle,
                    in ::DDS::Time_t source_timestamp);
    
        ::DDS::ReturnCode_t dispose(
                    in Hello::HelloMsg instance_data,
                    in ::DDS::InstanceHandle_t instance_handle);
    
        ::DDS::ReturnCode_t dispose_w_timestamp(
                    in Hello::HelloMsg instance_data,
                    in ::DDS::InstanceHandle_t instance_handle,
                    in ::DDS::Time_t source_timestamp);
    
        ::DDS::ReturnCode_t get_key_value(
                    inout Hello::HelloMsg key_holder,
                    in ::DDS::InstanceHandle_t handle);
    
        ::DDS::InstanceHandle_t lookup_instance(
                    in Hello::HelloMsg instance_data);
    };
    
    /** DataReader interface for HelloMsg data type.
     *
     * See the DDS specification, OMG formal/04-12-02, for a description of
     * this interface.
     */
    local interface HelloMsgDataReader : OpenDDS::DCPS::DataReaderEx {
        ::DDS::ReturnCode_t read(
                    inout HelloMsgSeq received_data,
                    inout ::DDS::SampleInfoSeq info_seq,
                    in long max_samples,
                    in ::DDS::SampleStateMask sample_states,
                    in ::DDS::ViewStateMask view_states,
                    in ::DDS::InstanceStateMask instance_states);
    
        ::DDS::ReturnCode_t take(
                    inout HelloMsgSeq received_data,
                    inout ::DDS::SampleInfoSeq info_seq,
                    in long max_samples,
                    in ::DDS::SampleStateMask sample_states,
                    in ::DDS::ViewStateMask view_states,
                    in ::DDS::InstanceStateMask instance_states);
    
        ::DDS::ReturnCode_t read_w_condition(
                    inout HelloMsgSeq data_values,
                    inout ::DDS::SampleInfoSeq sample_infos,
                    in long max_samples,
                    in ::DDS::ReadCondition a_condition);
    
        ::DDS::ReturnCode_t take_w_condition(
                    inout HelloMsgSeq data_values,
                    inout ::DDS::SampleInfoSeq sample_infos,
                    in long max_samples,
                    in ::DDS::ReadCondition a_condition);
    
        ::DDS::ReturnCode_t read_next_sample(
                    inout Hello::HelloMsg received_data,
                    inout ::DDS::SampleInfo sample_info);
    
        ::DDS::ReturnCode_t take_next_sample(
                    inout Hello::HelloMsg received_data,
                    inout ::DDS::SampleInfo sample_info);
    
        ::DDS::ReturnCode_t read_instance(
                    inout HelloMsgSeq received_data,
                    inout ::DDS::SampleInfoSeq info_seq,
                    in long max_samples,
                    in ::DDS::InstanceHandle_t a_handle,
                    in ::DDS::SampleStateMask sample_states,
                    in ::DDS::ViewStateMask view_states,
                    in ::DDS::InstanceStateMask instance_states);
    
        ::DDS::ReturnCode_t take_instance(
                    inout HelloMsgSeq received_data,
                    inout ::DDS::SampleInfoSeq info_seq,
                    in long max_samples,
                    in ::DDS::InstanceHandle_t a_handle,
                    in ::DDS::SampleStateMask sample_states,
                    in ::DDS::ViewStateMask view_states,
                    in ::DDS::InstanceStateMask instance_states);
    
        ::DDS::ReturnCode_t read_next_instance(
                    inout HelloMsgSeq received_data,
                    inout ::DDS::SampleInfoSeq info_seq,
                    in long max_samples,
                    in ::DDS::InstanceHandle_t a_handle,
                    in ::DDS::SampleStateMask sample_states,
                    in ::DDS::ViewStateMask view_states,
                    in ::DDS::InstanceStateMask instance_states);
    
        ::DDS::ReturnCode_t take_next_instance(
                    inout HelloMsgSeq received_data,
                    inout ::DDS::SampleInfoSeq info_seq,
                    in long max_samples,
                    in ::DDS::InstanceHandle_t a_handle,
                    in ::DDS::SampleStateMask sample_states,
                    in ::DDS::ViewStateMask view_states,
                    in ::DDS::InstanceStateMask instance_states);
    
        ::DDS::ReturnCode_t read_next_instance_w_condition(
                    inout HelloMsgSeq data_values,
                    inout ::DDS::SampleInfoSeq sample_infos,
                    in long max_samples,
                    in ::DDS::InstanceHandle_t previous_handle,
                    in ::DDS::ReadCondition a_condition);
    
        ::DDS::ReturnCode_t take_next_instance_w_condition(
                    inout HelloMsgSeq data_values,
                    inout ::DDS::SampleInfoSeq sample_infos,
                    in long max_samples,
                    in ::DDS::InstanceHandle_t previous_handle,
                    in ::DDS::ReadCondition a_condition);
    
        ::DDS::ReturnCode_t return_loan(
                    inout HelloMsgSeq received_data,
                    inout ::DDS::SampleInfoSeq info_seq);
    
        ::DDS::ReturnCode_t get_key_value(
                    inout Hello::HelloMsg key_holder,
                    in ::DDS::InstanceHandle_t handle);
    
        ::DDS::InstanceHandle_t lookup_instance(
                    in Hello::HelloMsg instance_data);
    };
    };

    opendds_idl命令行参数选项

    选项

    描述

    缺省值

    -v

    开启执行时显示过程细节,

    不显示细节

    -h

    打印帮助信息并退出

    -V

    打印TAO和OpenDDS的版本号

    -Wb,export_macro=macro

    export_macro是否用于C++代码实现的编译。

    不使用

    -Wb,export_include=file

    生成的代码中是否附加头文件到#include中,

    -Wb,pch_include=file

    编译头文件将包含在生成的C++代码中

    -Dname[=value]

    定义预处理宏

    -Idir

    添加预处理头文件的路径

    -o outputdir

    opendds_idl保存生成文件的路径

    当前路径

    -Wb,java

    启用OpenDDS的java绑定,以生成各种数据类型的实践类

    不支持java

    -Gws

    为Wireshark捕获生成配置文件,文件名形式是<file>_ws.ini

    不生成配置文件

    -Gitl

    生成一个数据类型的中间类型语言描述,供Wireshark解剖器使用

    不生成

    -GfaceTS

    生成FACE传输方式的服务API,FACE(Future Airborne Capability

    Environment---未来气动运载环境)

    不生成

    -Lface

    为C++和FACE的映射生成IDL文件

    不生成

    -Lspcpp

    为C++和安全前导文件的映射生成IDL文件

    不生成

    -Wb,tao_include_prefix=s

    给#include指令加上前缀s,意味着要包含tao_idl生成的头文件

    -Wb,v8

    生成类型转换支持代码,数据转换成JavaScript v8的对象

    不生成

    -ZC include

    给生成的C++文件添加一条#include指令

    不添加

    -St

    无论是否加-L选项,都不生成IDL类型代码

    生成IDL类型代码

    3)tao_idl HelloMsgTypeSupport.idl,tao_idl编译HelloMsgTypeSupport.idl的结果文件
    HelloMsgTypeSupportC.cpp
    HelloMsgTypeSupportC.h
    HelloMsgTypeSupportC.inl
    HelloMsgTypeSupportS.cpp
    HelloMsgTypeSupportS.g

    4)idl2jni Hello.idl,idl2jni编译Hello.idl的结果文件
    HelloJC.cpp
    HelloJC.h

    一系列HelloMsg*.java
    5)idl2jni HelloSupport.idl,idl2jni编译HelloSupport.idl的结果文件
    HelloTypeSupportJC.cpp
    HelloTypeSupportJC.h

    一系列HelloMsgTypeSupport*.java

    展开全文
  • 研究了一种基于DDS芯片AD9850和单片机AT89S52的信号发生器系统,能够产生正弦波、三角波和方波三种波形。该系统频率、幅值均可数控调节,相比传统信号发生器的...频率合成时,相位累加器在参考时钟的作用下对时钟脉冲进
  • 在阐述直接数字频率合成技术的工作原理、电路构成的基础上,分别介绍了上位机虚拟仪器监控面板的功能和结构,以及实现DDS功能的下位机FPGA器件各模块化电路的作用。经过设计和电路测试,输出波形达到了技术要求,...
  • 在各行各业的测试应用中,信号源扮演着极为重要的作用。但信号源具有许多不同的类型,不同类型的信号源在功能和特性上各不相同,分别适用于许多不同的应用。目前,最常见的信号源类型包括任意波形发生器,函数发生器...
  • 利用Matlab/Simulink、DSP Builder、QuartusⅡ 3个工具软件,进行基本DDS建模,然后在DDS模块的基础上,通过单片机等电路组成的控制单元的逻辑控制作用,根据通信系统中数字调制方式的基本原理,设计并实现了数字...
  • 频率切换时相位连续的优点,可以输出宽带正交信号,其输出相位噪声低,对参考频率源的相位噪声有改善作用;可以产生任意波形;全数字化实现,便于集成,体积小,重量轻。  本文介绍了DDS的基本原理,同时针对DD
  • 基于FPGA的DDS信号发生器系统框图如下图所示,采取查表法。 (1)对一个完整周期的波形进行采样,将采样点存在ROM中; (2)依次给出ROM的访问地址,即可输出一个完整的波形; (3)通过设置不同的频率控制字可以让...
  • 采用DDS技术的设计思路,用VHDL硬件描述语言对FPGA器件编程产生了两相四路高频信号。该信号经过驱动隔离电路施加于H桥逆变器中,在电感的平滑作用下,生成了满足USM测试要求的可调频、调相、调幅的两相高频交流信号...
  • FPGA基础之数字信号发生器(DDS

    千次阅读 2019-10-27 19:32:41
    波形存储器的作用是存储不同相位对应地址的波形值,相位累加器根据不同的相位产生对应的地址,用于选择不同的波形值,频率发生器根据输入频率产生频率控制字,其大小决定了相位累加器地址累加的速度,不同的累加速度...
  • 前言   用RAM实现一个DDS,从原理上来说很简单,在实际使用的时候,可能...相位累加器在时钟的作用下对相位进行累加,每次的累加值是通过phase increment 来指定的。累加得到的结果,通过量化器,取其高位,低位舍
  •  频率源是现代短波射频通信系统的核心,对整个系统的正常运行起着决定性的作用。作为射频电路与系统的核心设备,频率源的好坏关系着整个系统的稳定性。现在的频率合成技术正朝着杂散和相位噪声更低的方向发展,同时...
  • 在各行各业的测试应用中,信号源扮演着极为重要的作用。但信号源具有许多不同的类型,不同类型的信号源在功能和特性上各不相同,分别适用于许多不同的应用。目前,最常见的信号源类型包括任意波形发生器,函数发生器...
  • 研究了一种基于DDS芯片AD9850和单片机AT89S52的信号发生器系统,能够产生正弦波、三角波和方波三种波形。该系统频率、幅值均可数控调节,相比传统信号发生器的性能...频率合成时,相位累加器在参考时钟的作用下对时钟脉
  • 基于DDS技术的正弦衰减信号源,陈健,蒋辰,正弦衰减信号是质子旋进、弹簧阻尼振荡的振幅特征信号。这方面的仪器的研发对科学的进步起到了重要作用。本文讲述了早期此类信号
  • 3.DDS设计(有错误)

    2016-12-20 22:27:51
    累加寄存器一方面将上一时钟周期作用后所产生的新的数据反馈到加法器的输入端,以使加法器在下一时钟的作用下继续与频率控制数字相加;另一方面将这个值作为取样地址值送入幅度/相位转换电路,此电路根据取样地址输....
  • 这篇说明简单讲解了ROS2和DDS/RTPS的关系,以及引出RMW的作用。感觉其中部分句子翻译的不好,而且vendors不知道怎么翻译,用了原词,希望指正。 原文链接:...
  • 信号发生器在自动化测量等领域发挥着越来越重要的作用,直接数字合成(DDS)技术可以方便地对信号频率进行控制从而直接合成所需波形I该系统主控芯片采用Cygnal公司的高性能单片机C8051F040,实现整个电路的控制

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

dds作用