REDHAWK中的组件“无法查询属性值”错误

时间:2013-06-27 22:31:04

标签: redhawksdr

我的波形在启动时初始化很好,但在处理几秒钟后,它会在IDE的SCA Explorer选项卡右侧的符号上弹出一个红色标记。工具提示“无法查询属性值”。

我认为问题是由组件中的“进程”方法花费的时间过长引起的,但我需要能够获得相当长的数据块列表中的某个元素,因此我可以处理每个块。因此,我需要让组件的属性成为对这长长的数据列表的引用。有没有更好的方法呢?我已经创建了一个子进程来完成所有这些工作,但这种做法违背了使用REDHAWK来管理执行的目的。

谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

钟,

第一步是准确了解发生了什么错误。这可以通过遵循列出的here步骤来完成。基本上是:

  1. 窗口>显示视图>其他......
  2. 选择常规>属性。现在应该可以看到属性视图
  3. 在SCA Explorer视图中,选择带有红色标记符号的应用程序
  4. 现在,在“属性”视图中,您应该看到两个选项卡"属性"和"高级"。在"高级"选项卡所在的状态字段为"无法查询属性值..."。当您选择此字段时,它将显示"详细信息..."按钮。单击该按钮以接收错误的堆栈跟踪。
  5. 另一种方法是使用Python Sandbox(或unittest)功能来启动组件并尝试查询。等效错误将作为Python异常抛出。您可以了解沙箱here

    至于你问题的第二部分,REDHAWK process()方法已经作为一个子线程执行,所以它不会阻止查询()操作,除非你已经创建了一个线程锁(或者使用了serviceFunction中的propertySetAccess锁定。如果您正在使用锁,那么query()可能会阻塞,直到达到CORBA超时。您将知道是否发生了这种情况,因为堆栈跟踪将是CORBA超时错误。

    但是,你说"我需要让组件的属性引用这个长长的数据列表"所以我认为您可能会收到与最大CORBA传输大小相关的错误。您可以通过编辑/etc/omniORB.cfg来调整CORBA最大传输大小,以免问题消失,但是您的组件会给使用它的其他人带来问题。更好的选择是重新考虑组件的设计。您可能希望使用BULKIO端口将数据传入和传出组件。

    如果您可以提供有关您正在使用的算法或源代码示例的更多详细信息,那么可以提供有助于隔离根问题的其他信息。