从其他组件动态调用allocateCapacity / deallocateCapacity

时间:2014-07-28 12:44:29

标签: frontend redhawksdr

我正在使用Redhawk 1.9.0在RHEL 5上开发符合FRONTEND标准的Redhawk设备。阅读完文档之后,我仍然在理解是否可以在运行时从使用该设备的组件动态分配调谐器方面遇到一些麻烦。我目前对分配属性范例的理解是,Application Factory是一个直接引用Device并在依赖组件实例化时直接调用allocateCapacity的应用工厂。这仍然让我有几个问题:

  1. 组件在实例化后的生命周期内是否可以动态地请求进一步分配调谐器?如果是这样,怎么样?有没有办法在运行时获取FRONTEND设备的引用,还是应该通过消息传递来完成?
  2. 使用分配属性依赖关系策略时,依赖组件在运行时如何知道使用了哪个allocationId?这是否可以查询?
  3. 我在使用Redhawk IDE设置分配属性依赖项时遇到问题。 IDE中的“依赖关系向导”似乎不允许指定具有结构值的属性引用 - 我是否采用了错误的方法?

1 个答案:

答案 0 :(得分:2)

在最新版本的REDHAWK 1.10中,IDE中有一些工具可以帮助分配和释放前端设备。这可以通过在SCA Explorer视图中展开设备,然后选择在该特定设备上执行分配来实现。在1.9中,所提出的解决方案如下所列。

有一些方法可以完成动态分配,并在Application Factory之外建立设备关系。应用工厂在启动波形/组件时执行以下操作:

  1. 在可执行/可加载设备上调用加载并执行,并满足任何协同定位要求。

  2. 分配设备资源,并在分配成功时跟踪必要的关系。

  3. 在组件之间建立连接。

  4. 在组件及其相关设备,服务,事件通道等之间建立连接

  5. 通过调用组件上的configure()来初始化重载的属性。

  6. 创建负责跟踪波形生命周期和波形特定属性的波形对象。

  7. Application工厂解析sad.xml文件,这些文件本质上不是很动态。在1.9中,控制设备/组件交互的动态实体必须是外部资源,例如python脚本或组件。为了为支持Frontend Interface的设备创建自己的任务机制,您可以创建执行以下步骤的资产。这些步骤可以用任何语言完成,但为了简单起见,使用redhawk python实用程序显示了python片段:

    1. 正常启动波形/组件,或引用正在运行的波形/组件。

      from ossie.utils import redhawk
      dom = redhawk.attach('REDHAWK_DEV') #OR your Domain Nameapplication = dom.createApplication('APPNAME')
      
    2. 创建分配属性。

      prop = Your_Property_used_for_Allocation
      
    3. 循环浏览域中的所有设备并尝试分配它们。

      myDevice = None
      for ii in dom.devMgrs:
          for jj in ii.devs:
              if (jj.allocateCapacity(prop)):
                  myDevice = jj
                  break
      if not myDevice:
          print 'Could Not Allocate... Exiting'
          exit()
      
    4. 在完成分配的设备和波形/组件之间建立连接。

      outPort = myDevice.getPort('NAME OF USES PORT')
      inPort = application.getPort('NAME OF PROVIDES PORT')outPort.connectPort(inPort, 'connection name based off allocation id')
      
    5. 跟踪这些关系,以便在解除分配时关闭连接等。