2015-01-21 10 views
1

Я в настоящее время использую RTI DDS в системе, где у нас будет одна основная тема для нескольких элементов, например car topic с несколькими номерами vin. Поскольку это проект, я пытаюсь затем создать "keyed" topic, который в основном является темой, в которой член действует как ключ (вроде первичного ключа в базе данных), который в этом примере будет vin каждого автомобиля. Для реализации keyed topics я использую файл IDL, который выглядит следующим образом,DDS Keyed Topics

const string CAR_TOPIC = "CAR"; 
enum ALARMSTATUS { 
    ON, 
    OFF 
}; 

struct keys { 

    long vin; //@key 

    string make; 

    ALARMSTATUS alarm; 

}; 

Когда я бегу IDL файл через rtigen инструмент для создания C, Java и т.д. вид файлов из IDL, единственное, что я могу сделать, это запустить программу и увидеть

Writing keys, count 0 
Writing keys, count 1 ... 

и

keys subscriber sleeping for 4 sec... 
Received: 
    vin: 38 
    make: 
    alarm : ON 

keys subscriber sleeping for 4 sec... 
Received: 
    vin: 38 
    make: 
    alarm : ON ... 

Таким образом, трудно понять, как работают ключевые темы, и если они действительно работают вообще. Кто-нибудь имеет какой-либо вклад, что делать с файлами, созданными из файлов ID, чтобы сделать программу более функциональной? Также я никогда не вижу тему CAR, поэтому я не уверен, что использую правильный синтаксис для установки темы для DDS.

ответ

1

Когда вы говорите «единственное, что я могу сделать, это запустить программу», неясно, что такое «программа». Я не понимаю точный результат, который вы даете, так что вы скорректировали код сгенерированного примера?

Во всяком случае, отвечая на некоторые из ваших замечаний:

Таким образом, что делает его трудно увидеть, как ключевидные темы работы, и если они действительно работают на всех.

Концепция клавиш наиболее четко видна, когда у вас есть значения для нескольких экземпляров (то есть разных значений ключа), присутствующих одновременно в вашем DataReader. Это сопоставимо с таблицей базы данных, содержащей несколько строк одновременно. Поэтому, чтобы продемонстрировать ключевую концепцию, вам придется назначать разные значения ключевым полям на стороне DataWriter и write() результирующим образцам. Это не происходит по умолчанию в сгенерированных примерах, поэтому вам нужно выполнить настройку кода для достижения этого.

На стороне DataReader вам необходимо убедиться, что для демонстрации эффекта сохраняются несколько значений. Это означает, что вы не должны делать take() (что похоже на «деструктивное чтение»), но read(). Таким образом, количество значений в вашем DataReader будет расти в соответствии с количеством различных ключевых значений, которые вы написали.

Обратите внимание, что в реальной жизни вы не должны постоянно увеличивать количество ключевых значений, так же как вы не хотите, чтобы таблица базы данных содержала постоянно растущее число строк.

Также я никогда не вижу тему CAR, поэтому я не уверен, что использую правильный синтаксис для установки темы для DDS.

Ознакомьтесь с фрагментом кода, который создает тему.Имя метода зависит от языка, который вы используете, но в нем должно быть что-то вроде create_topic(). Второй параметр для этого вызова - это название темы. В общем, константа IDL CAR_TOPIC, которую вы определили, не будет автоматически использоваться в качестве названия темы, вы должны указать это в коде.

В зависимости от вашего примера вы можете попробовать -h, чтобы получить дополнительные флаги. Возможно, вы сможете увеличить многословие, чтобы увидеть имя создаваемой темы, или указать имя темы из командной строки.

Если вы хотите проверить название темы в своей системе, вы можете использовать rtiddsspy для просмотра данных. Его выпуск включает имена тем, которые он обнаруживает.

+0

жаль, что я имел в виду, что есть '** classname ** Publisher.java', и все, что я могу действительно делать с файлами по умолчанию, запускает этот класс издателя. Поэтому в основном я должен подключаться к этим классам и использовать их в этом. Его тип генератора классов, например jaxb per say, где они не предназначены для запуска программы, но дополняют то, что вы хотите сделать? – jgr208

+0

OK - обратите внимание, что это '** classname ** Publisher.java' чисто предназначено в качестве примера для вас. Он не должен использоваться в вашем приложении. Если вы хотите понять различные фрагменты кода в этом примере, я предлагаю вам ознакомиться с разделом «Программирование How-To's» в разделе «Модули» в справочном руководстве. См. Http://community.rti.com/rti-doc/500/ndds/doc/html/api_java/ –

+0

ahh ok, спасибо. Я знал, что делаю это правильно, но не знал, что делать после того, как создаются классы, это очень помогло. Так что я могу перезаписать то, что там, и читателю, если мне нравится правильно? – jgr208

 Смежные вопросы

  • Нет связанных вопросов^_^