The topic already exists but it is associated with a different TypeName. You can see in Administration Panel (Tools->RTI DDS Toolkit-> RTI DDS Administration Panel) the number of topics you have created. DDS Entities such as topics, readers, or writers are not clean when you stop the VI. They remain in memory while there are VIs that uses the DDS Toolkit in memory. Topics are clean when there are no Readers or Writers using them. Remember to always use the "Release Reader/Writer" once you have finished using them. You also can use the VI "Release Unused Entities VI" for force cleaning unused entities. Have a look at the Getting Started Guide to Appendix B "Creation and Release of DDS Entities" and section 6.7.1 Using Administration Panel (for Windows Systems only) especially the description of "Timeout to delete inactive DDS entities" functionality.
Are you calling the "Dispose Writer" vi in the same VI where you call "Create Simple/Advanced Writer" vi? You need to always release the Reader/Writers in the same VI that you create them.
Can you provide more details about what are you doing or upload a VI that reproduces the error?
I create a class to do the dds work. The dds ref save in class property. Create and dispose the dds in different method. I thought the dds can be disposed if the vi can get the dds ref.
You have to create the Reader/Writers and release them in the same VI. You should do it in the same VI where you perform the read/write operation. In the same VI you have to do:
The RTI DDS Toolkit for LabVIEW stores the state of your entities during some time to improve the performance of re-running the same VI (with no changes). By default, this time is 10 seconds, although you can modify it in the "RTI DDS Administration Panel --> Time to delete inactive DDS entities (s)". If you want to delete your DDS entities every time you call 'Release Reader/Writer", you may want to set this time to 0.
The error that you mentioned might happen in these scenarios:
Creating a new entity with a different datatype and using the same TypeName (inside the advanced reader/writer configuration).
Changing the TypeName of a writer/reader within the next 10 seconds after releasing it.
Which one is your case? In case it is 1, that is an unsupported use-case. One topic name is associated with exactly one TypeName (and data type). If your case is the second one, you may want to modify the 10 seconds to a lower number.
Also, the "Debugging window" shows all the log messages independently of the severity level that they have. In your latest picture, those are debugging messages and the execution is normal. You can modify the 'Filter Level' in the 'RTI DDS Administration Panel" to see these messages as well as their corresponding debugging level. Also, whenever you see an error, you can find more details (warning and/or error log messages associated with the LabVIEW error) in the Administration Panel. You can find more information about the Administration panel in the GSG section "6.7 Debugging an RTI Connext DDS LabVIEW Application".
That may make sense since you are deleting several DDS entities, especially if you only have only one Reader/Writer running (the release Reader/Writer will delete readers/writers publishers/subscribers and domain participants that are no longer used). As Ismael mentioned before, entities are shared and if we set the time to 0, they will be deleted when they are not used anymore. If the time is not 0, all entities will be deleted when closing LabVIEW. Also, the 'release reader/writer' VIs shouldn't be in our critical code path, are they?
Back to your error, would you mind letting me know which scenario are you running into? I guess it is the second one.
Creating a new entity with a different datatype and using the same TypeName (inside the advanced reader/writer configuration).
Changing the TypeName of a writer/reader within the next 10 seconds after releasing it.
From an architectural point of view, you shouldn't be using the same typename for different topics, this is error-prone and may avoid your readers/writers to match. For example, if you have a typename that is 'temperature' and another one that is 'humidity' they shouldn't be using to the same topic 'environmental_conditions'. If you have a publisher that publishes 'temperature' and a subscriber that reads 'humidity' within the same topic, there won't be communication. You can either combine 'temperature' and 'humidity' within the same cluster and publish altogether with the same typename and the same topic. Or you can use different topics for publishing different data types. The key idea is that one datatype (temperature) matches one typename and only one topic.
The topic already exists but it is associated with a different TypeName. You can see in Administration Panel (Tools->RTI DDS Toolkit-> RTI DDS Administration Panel) the number of topics you have created. DDS Entities such as topics, readers, or writers are not clean when you stop the VI. They remain in memory while there are VIs that uses the DDS Toolkit in memory. Topics are clean when there are no Readers or Writers using them. Remember to always use the "Release Reader/Writer" once you have finished using them. You also can use the VI "Release Unused Entities VI" for force cleaning unused entities. Have a look at the Getting Started Guide to Appendix B "Creation and Release of DDS Entities" and section 6.7.1 Using Administration Panel (for Windows Systems only) especially the description of "Timeout to delete inactive DDS entities" functionality.
Hi Ismael Mendez,
The "Release Reader/Writer.vi“ not work. Why?
Are you calling the "Dispose Writer" vi in the same VI where you call "Create Simple/Advanced Writer" vi? You need to always release the Reader/Writers in the same VI that you create them.
Can you provide more details about what are you doing or upload a VI that reproduces the error?
I create a class to do the dds work. The dds ref save in class property. Create and dispose the dds in different method. I thought the dds can be disposed if the vi can get the dds ref.
You have to create the Reader/Writers and release them in the same VI. You should do it in the same VI where you perform the read/write operation. In the same VI you have to do:
Create Reader/Witer->Read/Write->Dispose Reader/Writer
The read and write operations can be inside a loop.
If the Reader/Writer refs are passed to different VIs where they were created won't work.
It's still unable to delete topic.
Hi yugonghui,
The RTI DDS Toolkit for LabVIEW stores the state of your entities during some time to improve the performance of re-running the same VI (with no changes). By default, this time is 10 seconds, although you can modify it in the "RTI DDS Administration Panel --> Time to delete inactive DDS entities (s)". If you want to delete your DDS entities every time you call 'Release Reader/Writer", you may want to set this time to 0.
The error that you mentioned might happen in these scenarios:
Which one is your case? In case it is 1, that is an unsupported use-case. One topic name is associated with exactly one TypeName (and data type). If your case is the second one, you may want to modify the 10 seconds to a lower number.
Also, the "Debugging window" shows all the log messages independently of the severity level that they have. In your latest picture, those are debugging messages and the execution is normal. You can modify the 'Filter Level' in the 'RTI DDS Administration Panel" to see these messages as well as their corresponding debugging level. Also, whenever you see an error, you can find more details (warning and/or error log messages associated with the LabVIEW error) in the Administration Panel. You can find more information about the Administration panel in the GSG section "6.7 Debugging an RTI Connext DDS LabVIEW Application".
I hope this helps,
Angel.
Hi angel,
I try to set the "Time to Delete Inactive DDS Entities (s)" to 0. And the DDS entities close success. But a new problem generate:
The "release reader.vi" takes 3 seconds to finish. You can see the time in "Probe Watch Window".
Hi yugonghui,
That may make sense since you are deleting several DDS entities, especially if you only have only one Reader/Writer running (the release Reader/Writer will delete readers/writers publishers/subscribers and domain participants that are no longer used). As Ismael mentioned before, entities are shared and if we set the time to 0, they will be deleted when they are not used anymore. If the time is not 0, all entities will be deleted when closing LabVIEW. Also, the 'release reader/writer' VIs shouldn't be in our critical code path, are they?
Back to your error, would you mind letting me know which scenario are you running into? I guess it is the second one.
From an architectural point of view, you shouldn't be using the same typename for different topics, this is error-prone and may avoid your readers/writers to match. For example, if you have a typename that is 'temperature' and another one that is 'humidity' they shouldn't be using to the same topic 'environmental_conditions'. If you have a publisher that publishes 'temperature' and a subscriber that reads 'humidity' within the same topic, there won't be communication. You can either combine 'temperature' and 'humidity' within the same cluster and publish altogether with the same typename and the same topic. Or you can use different topics for publishing different data types. The key idea is that one datatype (temperature) matches one typename and only one topic.
Regards,
Angel.