我正在嘗試創建最簡單的C#應用程序,該程序將允許我獲取選定DDS域中當前可用的主題。但我似乎無法讓它工作。在DDS中訂閱內置主題「DCPSTopic」
// Create the DDS Domain participant on domain ID 0
DDS.DomainParticipant participant =
DDS.DomainParticipantFactory.get_instance().create_participant(
0,
DDS.DomainParticipantFactory.PARTICIPANT_QOS_DEFAULT,
null, /* Listener */
DDS.StatusMask.STATUS_MASK_NONE);
DDS.Subscriber sub = participant.get_builtin_subscriber();
DDS.DataReader reader1 = sub.lookup_datareader("DCPSTopic");
DDS.TopicBuiltinTopicDataDataReader builtinReader1 =
(DDS.TopicBuiltinTopicDataDataReader)reader1;
DDS.TopicBuiltinTopicDataSeq topicSeq = new DDS.TopicBuiltinTopicDataSeq(10) ;
DDS.SampleInfoSeq infoSeq = new DDS.SampleInfoSeq(10);
builtinReader1.read(topicSeq,
infoSeq,
10,
DDS.SampleStateKind.ANY_SAMPLE_STATE,
DDS.ViewStateKind.ANY_VIEW_STATE,
DDS.InstanceStateKind.ANY_INSTANCE_STATE);
當運行上面的代碼,我得到的最後一行「Retcode_NoData」異常(builtinReader1.read(...))儘管出版商和用戶都在同一個域中運行,並且發佈(域0)。你知道我的代碼有什麼問題嗎?
順便說一句。我使用RTI Connext 5.0實現DDS。
問候 約翰
Reinier您好,感謝您的反饋!我已經實施了您的3條建議,並且現在也正在使用訂閱和發佈內置主題/數據讀取器。但我的應用程序仍然沒有給出任何反饋(除了「Retcode_NoData」例外)。我正在其他DDS應用程序運行的筆記本電腦上運行應用程序,所有這些應用程序都在域0上,但它們不會顯示在我的應用程序中。你有什麼其他的建議可能是錯的?再次感謝! John – Rauhe 2013-03-11 12:00:05
當你在筆記本電腦上運行'rtiddsspy'工具時,你看到什麼嗎?它應該發現總線上的所有DataReader和DataWriters並打印它們的主題,以及所有更新(通過defult)。如果沒有顯示任何結果,那麼您的筆記本電腦的設置有問題。如果它確實顯示了結果,請查看此代碼片段(http://pastebin.com/awEHZTBv),看看它是否適合您?爲了進行調試,我將首先使用筆記本電腦,然後結合RTI的Shapes演示程序運行該代碼段。 – 2013-03-11 13:21:40
我試着運行你的codesnippet而不是我的,你的工作就像它應該是:)內置的TopicReader沒有給出任何結果,但它可能(如你所說)從發佈者/訂閱者讀取主題。非常感謝您的幫助 ! – Rauhe 2013-03-11 14:45:22