2013-06-27 44 views
0

我的波形在啓動時初始化良好,但在處理幾秒鐘後,它會在IDE的SCA Explorer選項卡右側的符號上彈出紅色標記。工具提示說「無法查詢屬性值」。REDHAWK中的組件出現「無法查詢屬性值」錯誤

我認爲這個問題是由組件中的「process」方法花了很長時間造成的,但我需要能夠獲得一長串數據塊的某個元素,所以我可以處理每個塊。因此,我需要將組件的屬性作爲對這一長串數據的引用。有沒有更好的方法來做到這一點?我已經創建了一個子進程來完成所有這些工作,但是這種做法違背了使用REDHAWK來管理執行的目的。

謝謝你的時間!

回答

1

本,

第一步將是要明確發生了什麼錯誤。這可以按照here列出的步驟完成。基本上是:

  1. 窗口>顯示視圖>其他...
  2. 選擇常規>屬性。現在,屬性視圖應該是可見的
  3. 在SCA資源管理器視圖中,選擇帶紅色標記符號的應用程序
  4. 現在,在「屬性」視圖中,應該會看到兩個選項卡「屬性」和「高級」。在「高級」選項卡中,將顯示「無法查詢屬性值...」的狀態字段。當你選擇這個字段時,它會顯示一個「Details ...」按鈕。單擊它以接收錯誤的堆棧跟蹤。

另一種替代方法是使用Python Sandbox(或unittest)功能啓動組件並嘗試查詢。等效錯誤將作爲Python異常拋出。您可以瞭解沙箱here

至於你的問題的第二部分,REDHAWK process()方法已經作爲一個子線程執行,所以它不會阻塞query()操作,除非你創建了一個線程鎖(或者使用了propertySetAccess鎖定在你的serviceFunction中)。如果您正在使用鎖定,則可能會阻塞query(),直到達到CORBA超時。你會知道這是否發生,因爲堆棧跟蹤將是一個CORBA超時錯誤。

但是,您說「我需要將組件的屬性作爲對此長數據列表的引用」,所以我認爲您可能會收到與最大CORBA傳輸大小有關的錯誤。您可以通過編輯/etc/omniORB.cfg來調整CORBA最大傳輸大小,這樣問題就會消失,但是您的組件會爲其他使用它的人帶來問題。更好的選擇是重新考慮組件的設計。您可能希望使用BULKIO端口將數據傳入和傳出組件。

如果您可以提供有關您正在使用的算法或源代碼示例的更多詳細信息,那麼可以提供有助於隔離根問題的其他信息。

+0

非常感謝您的幫助!我將該物業作爲「objref」,我認爲這不是支持的(至少這是我的主管說的),我們找到了解決方法。 –

+0

非常感謝您的幫助!我將該物業作爲「objref」,我認爲這不是支持的(至少這是我的主管說的),我們找到了解決方法。 –

相關問題