Įžvalgus DDS
Gynybos sistemų duomenų ryšys realiuoju laiku
Tarpinė programinė įranga, kuri palaiko kritiškai svarbias transporto priemonių platformas
Pilnai funkcionuojantis DDS su X-Types. Ginklų lygio DDS gynybai.
Powering defence
„Astute DDS“ yra duomenų paskirstymo tarpinė programinė įranga, esanti „Astute Systems“ visapusiško DEF-STAN 23-009 bendrosios transporto priemonės architektūros (GVA) sprendimo pagrindas. Nuo jutiklių iki ekranų – viena vieninga platforma jungia visas jūsų karinės transporto priemonės posistemes.
Why Publish/Subscribe
Tradicinės architektūros problema
Senesnėse transporto priemonių sistemose naudojami tiesioginiai ryšiai. Pridėjus naują posistemę, reikia modifikuoti kiekvieną sistemą, su kuria ji bendrauja. Tai sukuria:
- ❌ Brangi integracija – kiekvienam naujam komponentui reikalingas individualus programavimas
- ❌ Trapios sistemos – vienas gedimas gali kaskadomis išplisti visame tinkle
- ❌ Pririšimas prie tiekėjo – patentuoti protokolai įkalina jus tik su vienu tiekėju
- ❌ Lėti atnaujinimai – vienos posistemės pakeitimas reiškia visko pakartotinį testavimą
Publikavimo / prenumeratos sprendimas
Naudojant DDS publikavimo / prenumeratos architektūrą, posistemės tiesiog publikuoja duomenis į nurodytas temas. Bet kuri sistema, kuriai reikia šių duomenų, užsiprenumeruoja temą. Jokių tiesioginių jungčių. Jokių pasirinktinio integravimo kodo.
| Verslo nauda | Kaip pateikia „Pub/Sub“ |
|---|---|
| 💰 Mažesnės integracijos išlaidos | Pridėti naujų posistemių nemodifikuojant esamų |
| 🔧 Lengvesnė priežiūra | Pakeiskite arba atnaujinkite komponentus savarankiškai |
| 🛡️ Didesnis atsparumas | Sistemos toliau veikia net ir tada, kai kitos sugenda |
| 🏭 Kelių tiekėjų laisvė | Sujunkite skirtingų tiekėjų įrangą vienoje duomenų magistralėje |
| ⏱️ Greitesnis pateikimas į rinką | Standartinės sąsajos reiškia mažiau individualių programų kūrimo |
Vienas šaltinis visam GVA rinkiniui
„Astute Systems“ yra vienintelis tiekėjas, teikiantis visą, integruotą programinės įrangos paketą GVA reikalavimus atitinkančioms karinėms transporto priemonėms:
| Komponentas | Ką tai daro |
|---|---|
| Bohemiškas | Peržiūrėkite ir patvirtinkite „SysML“ modelius, generuokite sąsajų apibrėžimus |
| LDMX | Geriausias savo klasėje žemės duomenų modelio redaktorius ir validatorius, skirtas LDM v10.0.0 |
| ToolX | Automatinis kodo generavimas, integravimas į versijas ir diegimo įrankiai |
| Įžvalgus DDS | Sujunkite visas posistemes su saugiu duomenų paskirstymu realiuoju laiku |
| Žemės duomenų modelis v10.0.0 | Iš anksto sukurti GVA suderinami duomenų tipai visoms transporto priemonių sritims |
| Įžvalgus HMI | Įgulos ekrano programinė įranga, atitinkanti DEF-STAN 23-009 reikalavimus |
„Full Stack“ privalumai
| Nauda | Poveikis |
|---|---|
| 🎯 Vienas atsakomybės taškas | Viena sutartis, viena palaikymo komanda, vienas integracijos partneris |
| 📋 Įrodytas atitikimas | Iš anksto patvirtinta pagal DEF-STAN 23-009 reikalavimus |
| 🔄 Sklandūs atnaujinimai | Atnaujinkite bet kurį komponentą nesugadindami kitų |
| 💰 Numatomos išlaidos | Jokių netikėtų integracijos mokesčių ar licencijavimo nesklandumų |
| ⏱️ Greitesnis pristatymas | Pradėkite nuo veikiančios programinės įrangos, o ne nuo tuščių sistemų |
Comparison
Pirkimo aspektai
| faktorius | Įžvalgus DDS | RTI Connect | CiklonasDDS | Atviras DDS | Greitas DDS |
|---|---|---|---|---|---|
| Licencijos modelis | Lankstūs variantai | Reklaminis skelbimas vienai vietai | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Licencijos kaina | Konkurencingas | $$$ už dislokavimą | Nemokama | Nemokama | Nemokama |
| Palaikymo modelis | Australijos tiekėjo sutartis | Pasaulinė įmonė | Eclipse fondas | OCI reklama | eProsima reklama |
| Australijoje teikiama pagalba | ✅ Taip | ❌ Įsikūręs JAV | ❌ Ne | ❌ Įsikūręs JAV | ❌ Įsikūrusi Ispanijoje |
| GVA išankstinė integracija | ✅ Įmontuotas | ❌ Individualūs darbai | ❌ „Pasidaryk pats“ | ❌ „Pasidaryk pats“ | ❌ „Pasidaryk pats“ |
| Pilnas paketas prieinamas | ✅ Vienas šaltinis: HMI + LDM + DDS + įrankiai | ❌ Tik tarpinė programinė įranga | ❌ Tik tarpinė programinė įranga | ❌ Tik tarpinė programinė įranga | ❌ Tik tarpinė programinė įranga |
| SysML įrankiai | ✅ Bohemiškas + LDMX + ToolX | ❌ Nėra | ❌ Nėra | ❌ Nėra | ❌ Nėra |
| Eksporto kontrolė | Australijos jurisdikcija | JAV ITAR aspektai | ES | JAV | ES |
Techninių savybių palyginimas
| Funkcija | Įžvalgus DDS | RTI Connect | CiklonasDDS | Atviras DDS | Greitas DDS |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta |
| DDS saugumas 1.1 | ✅ Užbaigta | ✅ Užbaigta | ⚠️ Dalinis | ✅ Užbaigta | ✅ Užbaigta |
| X-Types 1.3 | ✅ Užbaigta | ✅ Užbaigta | ⚠️ Dalinis | ⚠️ Dalinis | ⚠️ Dalinis |
| Dinaminių duomenų API | ✅ Užbaigta | ✅ Užbaigta | ❌ Nėra | ⚠️ Pagrindinis | ⚠️ Pagrindinis |
| „TypeLookup“ paslauga | ✅ Užbaigta | ✅ Užbaigta | ❌ Nėra | ❌ Nėra | ⚠️ Dalinis |
| Turinio filtravimas | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta |
| Bendros atminties perdavimas | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta | ❌ Nėra | ✅ Užbaigta |
| TCP perdavimas | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta | ✅ Užbaigta |
| Nulinis kopijavimas | ✅ Palaikoma | ✅ Palaikoma | ✅ Palaikoma | ❌ Nėra | ✅ Palaikoma |
Standartų laikymasis
| Standartinis | Įžvalgus DDS | RTI Connect | CiklonasDDS | Atviras DDS | Greitas DDS |
|---|---|---|---|---|---|
| O Dieve, DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| OMG DDS saugumas 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| OMG IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Žemės duomenų modelis v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Kalbos ir platformos palaikymas
| Galimybė | Įžvalgus DDS | RTI Connect | CiklonasDDS | Atviras DDS | Greitas DDS |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | C99 apvalkalas | C++11 | C++11 |
| C | Per C++ | ✅ Gimtoji | ✅ Gimtoji | ❌ | ✅ Gimtoji |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rūdys | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Langai | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Veiksmų planas | ✅ | ⚠️ | ✅ | ⚠️ |
| Įterptieji / RTOS | ✅ Sukurta | ✅ Mikro variantas | ⚠️ | ⚠️ | ⚠️ |
| Statinis susiejimas | ✅ Viena biblioteka | ⚠️ | ⚠️ Bendros bibliotekos | ⚠️ Bendros bibliotekos | ⚠️ Bendros bibliotekos |
Kodėl „Astute DDS“ laimi
| palyginti su RTI Connext | prieš CycloneDDS | palyginti su OpenDDS | palyginti su greituoju DDS |
|---|---|---|---|
| Lanksčios licencijavimo galimybės | Visiškas X-Types palaikymas | Pilnas dinaminių duomenų API | Australijoje įsikūrusi palaikymo tarnyba |
| Australijos tiekėjas, nėra jokių problemų dėl ITAR | Integruotas saugumas | „TypeLookup“ paslauga | Visiškas atitikimas GVA |
| Vieno šaltinio pilnas GVA paketas | Geriausias savo klasėje LDMX + ToolX | Geriausias savo klasėje LDMX + ToolX | Paprastesnis diegimas |
| Įtraukta LDM 10.0.0 versija | Komercinė parama | Australijos jurisdikcija | Užpildykite X tipus |
Why Astute DDS
„Naudodami „Astute“ paketą, sutrumpinome GVA integracijos laiką 40 %. Turėdami vieną tiekėją, atsakingą už tarpinę programinę įrangą, HMI ir duomenų modelį, išvengėme kaltinimų, kurie kamavo ankstesnes programas.“
— Programos vadovas, JK gynybos ministras
Garantuotas sąveikumas
„Astute DDS“ yra visiškai suderinama su visomis pagrindinėmis DDS sistemomis. Jūsų transporto priemonė gali sklandžiai bendrauti su:
Nėra priklausomybės nuo tiekėjo. Jei partnerio sistema naudoja kitokią DDS diegimo sistemą, „Astute DDS“ prisijungs be pakeitimų.
Gynybos standartų laikymasis
Sukurta kariniams poreikiams
| Standartinis | Būsena |
|---|---|
| DEF-STAN 23-009 | ✅ Visiškas atitikimas GVA reikalavimams |
| Žemės duomenų modelis v10.0.0 | ✅ Pilni domenų tipai |
| NATO STANAG | ✅ Parengtas sąveikai |
| Kibernetinio saugumo pagrindai | ✅ Sertifikuotas saugumas |
Saugumas, kuriuo galite pasitikėti
- 🔐 Užšifruotas ryšys – visi duomenys perdavimo metu yra apsaugoti
- 🎫 Sertifikatais pagrįstas autentifikavimas – prisijungia tik įgaliotos sistemos
- 📋 Prieigos kontrolės politikos – apibrėžkite, kas gali publikuoti arba užsiprenumeruoti kiekvieną temą
- 📝 Išsamus audito žurnalavimas — išsamus saugumo peržiūrų įrašas
Patikrinta gamyboje
Įdiegta keliose programose
„Astute DDS“ pasitiki gynybos ministrai visoje Australijoje, JK ir sąjungininkų šalyse:
| Domenas | Paraiškos |
|---|---|
| 🎖️ Šarvuočiai | Įgulos ekranai, jutiklių suliejimas, ginklų integravimas |
| 🤖 Robotika ir autonominės sistemos | Bepiločiai antžeminiai automobiliai, robotinės platformos, autonominė navigacija |
| 🛡️ Priešinė bepiločių orlaivių sistema (CUAS) | Dronų aptikimo, sekimo ir išmušimo sistemos |
| ✈️ Antžeminės valdymo stotys | UAV valdymas ir valdymas, jutiklių tiekimas |
| 🚢 Karinio jūrų laivyno sistemos | Tilto ekranai, pažeidimų kontrolė, navigacija |
| 🏭 Mokymai ir modeliavimas | Sintetinės aplinkos, veiksmų pobūdis, aptarimas |
🎬 Užsisakykite demonstracinę versiją
Pamatykite „Astute DDS“ ir visą GVA paketą veikiant. Sužinokite daugiau apie mūsų paketą arba užsisakykite demonstraciją dabar.
Frequently Asked Questions
Dažniausiai kūrėjams užduodami klausimai, kai jie diegia „Astute DDS“.
1. Kas yra „Astute“ DDS?
„Astute DDS“ yra „OMG Data Distribution Service“ C++20 įgyvendinimas
(DDS) DCPS API, DDSI-RTPS 2.5 laidų protokolas, DDS-XTypes 1.3 tipų sistema,
DDS-Security 1.1/1.2 papildiniai ir IDL 4.2. Jis pateikiamas kaip statinis
biblioteka libastutedds.a (plius C, Python ir Rust sąsajos) ir pateikiama su
„ astutedds-inspect diagnostikos grafinė sąsaja ir sąveiki „Shapes“ demonstracinė versija.
2. Kaip publikuoti temą ir ją užsiprenumeruoti?
Sukurkite DomainParticipant , „ Topic ir DataWriter (leidėjo pusėje).
arba DataReader (abonento pusėje):
using namespace astutedds::dcps;
auto dpf = DomainParticipantFactory::get_instance();
auto dp = dpf->create_participant(0, PARTICIPANT_QOS_DEFAULT, nullptr, 0);
auto topic = dp->create_topic("Hello", "HelloMsg", TOPIC_QOS_DEFAULT, nullptr, 0);
// Publisher
auto pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, nullptr, 0);
auto writer = pub->create_datawriter(topic, DATAWRITER_QOS_DEFAULT, nullptr, 0);
writer->write(sample, HANDLE_NIL);
// Subscriber
auto sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, nullptr, 0);
auto reader = sub->create_datareader(topic, DATAREADER_QOS_DEFAULT, nullptr, 0);Žr. Darbo pradžia › Pirmasis prašymas .
3. Kuo skiriasi read() ir take() funkcijos?
-
read()grąžina pavyzdžius, bet **palieka juos skaitytuvo talpykloje**, kad vėlesni iškvietimai (arba kiti to paties abonento skaitytojai) galėtų juos dar kartą perskaityti. -
take()grąžina pavyzdžius ir **pašalina juos** iš talpyklos.
Naudokite read() , kai tema atitinka bendrą būseną, kurią norite patikrinti.
pakartotinai; naudokite take() , kai tema atitinka įvykius, kuriuos norite
suvartoti lygiai vieną kartą.
4. Kodėl vėliau prisijungę prenumeratoriai negauna ankstesnių pavyzdžių?
Pagal numatytuosius nustatymus DURABILITY yra VOLATILE , todėl pavyzdžiai, parašyti prieš prenumeratorių
sutampa, nepristatomi. Norint pristatyti istorinius pavyzdžius vėlai prisijungusiems asmenims,
sukonfigūruokite rašytoją ir atitinkamus skaitytojus naudodami TRANSIENT_LOCAL
patvarumas (kuriam taip pat reikalingas RELIABLE patikimumas):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Kad išliktų po rašymo įrenginio paleidimo iš naujo, naudokite
Nuolatinė tarnyba arba TRANSIENT / PERSISTENT
patvarumo rūšys.
5. Ką daro RELIABILITY QoS?
-
BEST_EFFORT(daugelio integruotų temų numatytoji reikšmė): laide prarasti pavyzdžiai nėra pakartotinai perduodami. Mažiausios pridėtinės išlaidos. -
RELIABLE: rašytojas seka patvirtinimus (ACKNACK/ širdies plakimą) iš kiekvieno sutampančio skaitytuvo ir pakartotinai siunčia praleistus sekos numerius, kol
skaitytojas pasiveja arba istorija pilna.
Patikimumas priklauso nuo rašytojo / skaitytojo ir turi būti suderinamas: BEST_EFFORT
Skaitytojas gali prilygti RELIABLE rašytojui, bet ne atvirkščiai.
6. Ką daro PATVARUMAS DURABILITY )?
DURABILITY kontroliuoja, ar mėginiai saugomi pristatymui skaitytojams.kurie sujungiami po pavyzdžio parašymo:
| Geras | Prieinama vėlyviems prisijungėjams? |
|---|---|
VOLATILE | Ne |
TRANSIENT_LOCAL | Taip, kol rašytojas gyvas |
TRANSIENT | Taip, per visą rašytojo gyvenimą (per „Persistence Service“) |
PERSISTENT | Taip, per visą procesų paleidimą iš naujo (diske) |
7. Kuo skiriasi HISTORY ir DURABILITY ?
HISTORY ( KEEP_LAST(depth) arba KEEP_ALL ) kontroliuoja, kiek pavyzdžių bus rašymo/skaitymo talpykla saugoma bet kuriuo metu. DURABILITY kontroliuoja, ar
rašytojas skaitytojams siūlo pavyzdžius, kurie vėliau sutampa. Jie dirba kartu, bet
išspręsti skirtingas problemas: vien KEEP_ALL neužtikrina pavyzdžių prieinamumo
vėlyviems prisijungėjams.
8. Kaip nurodyti domeno ID?
Domeno ID perduokite kaip pirmąjį argumentą funkcijai create_participant “:
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Dalyviai, esantys skirtinguose domenuose, nebendrauja. DDSI-RTPS prievadas
formulė 7400 + 250 * domain_id nustato pagrindinius UDP prievadus, naudojamus
atradimas.
9. Kodėl mano leidėjas ir prenumeratorius neranda vienas kito?
Dažnos priežastys:
- Skirtingi domenų ID – abu dalyviai turi naudoti tą patį ID.
- Daugiaadresis perdavimas užblokuotas – SPDP naudoja UDP daugiaadresį perdavimą
239.255.0.1adresu, kurį sukūrė
Numatytasis. Patikrinkite pagrindinio kompiuterio užkardą ir įjunkite IGMP šnipinėjimą. - Neteisinga tinklo sąsaja – daugiapakopiuose pagrindiniuose kompiuteriuose nustatykite
ASTUTEDDS_NETWORK_INTERFACE=arba sukonfigūruokite jį aptikimo JSON / XML profilyje (žr. JSON aptikimo konfigūracija ). - Nesuderinama QoS – žr. 15 klausimą.
- Skirtingi perdavimai – patikrinkite, ar abu mazgai naudoja UDPv4 (arba abu UDPv6,
TCP, SHM).
Įjunkite sekimo registravimą naudodami ASTUTEDDS_LOG_LEVEL=trace ir patikrinkite paketą
užfiksuoti naudojant astutedds-inspect .
10. Kokios IDL funkcijos yra palaikomos?
Komplekte esantis astutedds-idl kompiliatorius įgyvendina OMG IDL 4.2, įskaitant:
- Primityvūs tipai (
boolean,octet, integer tipaiint8–uint64,float/double/long double,char/wchar,string/wstring). - Struktūros, sąjungos, išvardijimai, bitų kaukės, tipų apibrėžimai.
- Ribotos ir neribotos sekos, masyvai, žemėlapiai.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Konstantos ir
modulevardų erdvės.
Sukurtas C++ pagal numatytuosius nustatymus naudoja XCDR2 su pasirenkamu XCDR1 sąveikai.
11. Kaip filtruoti mano paties publikuotus pavyzdžius?
Du variantai:
- Ignoruoti dalyvio lygmenyje : iškvieskite
dp->ignore_publication(handle)
perduodant vietinio rašytojoInstanceHandle_t. - Filtruoti skaitytojo grįžtamąjį ryšį naudojant
SampleInfo::publication_handle
ir palyginant jį su jūsų rašytojoget_instance_handle().
Pagal turinį filtruota tema taip pat gali neįtraukti savarankiškai publikuoto rakto lauko.
12. Kokie simboliai leidžiami temų pavadinimuose?
Temų pavadinimuose gali būti ASCII raidiniai ir skaitmeniniai simboliai, _ ir / kaip
hierarchijos skiriamasis ženklas. Ilgis apribotas 256 simboliais. Venkite pradžios
skaitmenys ir rezervuoti DDS integruoti prefiksai ( DCPS , dds ). Po jų pateikiami tipų pavadinimai.
ta pati taisyklė.
13. Kaip sužinoti, kada nuotolinis rašytojas ar skaitytojas išeina?
Įdiekite DataReaderListener ir įgyvendinkite on_subscription_matched /“
on_liveliness_changed “ arba „poll reader->get_subscription_matched_status() . current_count_changelaukas yra neigiamas, kai lygiavertis elementas nesutampa.
Gyvumą lemia LIVELINESS QoS rinkinys
kind = AUTOMATIC_LIVELINESS_QOS su lease_duration aptikimuitylūs bendraamžiai per ribotą laiką.
14. Kaip gauti atgalinį skambutį, kai gaunami nauji duomenys?
Pridėkite klausytoją su DATA_AVAILABLE_STATUS kauke:
class MyListener : public DataReaderListener {
void on_data_available(DataReader* reader) override {
// call reader->take(...) here
}
};
reader->set_listener(&listener, DATA_AVAILABLE_STATUS); on_data_available užsidega tiek naujiems pavyzdžiams, tiek egzemplioriaus gyvavimo ciklui pakeitimai; prieš panaikindami nuorodas į SampleInfo::valid_data visada patikrinkite
pavyzdinė naudingoji apkrova.
15. Ką reiškia „Nesuderinama QoS“?
Rašytojas ir skaitytojas sutampa tik tada, kai kiekviena užklausa / siūloma QoS yra
suderinamas:
| Politika | Pageidaujama ≤ Siūloma |
|---|---|
RELIABILITY | skaitytojas BEST_EFFORT ≤ rašytojas RELIABLE |
DURABILITY | skaitytojo tipas ≤ rašytojo tipas (pagal specifikaciją) |
DEADLINE | skaitytojo period ≥ rašytojo period |
LATENCY_BUDGET | skaitytojo duration ≥ rašytojo duration |
OWNERSHIP | turi būti lygūs ( SHARED arba EXCLUSIVE ) |
PARTITION | bent vieno skaidinio pavadinimas turi sutapti |
Klausytis on_offered_incompatible_qos “ / „ on_requested_incompatible_qos “
kad vykdymo metu rastumėte tikslų politikos ID.
16. Kaip siųsti didesnius nei UDP datagramo pavyzdžius?
„Astute DDS“ automatiškai fragmentuoja didesnius nei sukonfigūruotas mėginius
fragment_size (numatytoji reikšmė – 1344 baitai IPv4 atveju) ir juos vėl surenka skaitytuvas, naudojantis DDSI-RTPS DATA_FRAG subžinutes. Patikimumo protokolas
atkuria trūkstamus fragmentus nepersiunčiant viso mėginio.
Labai dideliems pavyzdžiams (≥ 1 MB) padidinkite OS lizdo buferius:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608ir apsvarstykite galimybę pereiti prie bendros atminties perdavimo vietiniams skaitytojams.
17. Kaip sukonfigūruoti, kuri tinklo sąsaja naudojama?
Trys variantai, prioriteto tvarka:
- Aplinkos kintamasis:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - JSON aptikimo konfigūracija – žr. JSON aptikimo konfigūracija .
- XML QoS profilis – žr. DDS-XML QoS profiliai .
Jei nenustatyta nieko, „Astute DDS“ parenka pirmąją ne kilpinės jungties sąsają su
daugiaadresį adresą.
18. Ar galiu naudoti „Astute DDS“ tinkle be daugiaadresio perdavimo?
Taip. Dvi alternatyvos:
- Unicast SPDP partnerių sąrašas : pateikite partnerių mazgų / prievadų porų sąrašą
Aptikimo konfigūracija; „Astute DDS“ siunčia SPDP pranešimus kiekvienam mazgui. - TCP perdavimas : perjunkite dalyvį į TCP RTPS perdavimą
aplinkos, kurios visiškai blokuoja UDP. Žr.
DDS domeno maršrutizatorius izoliuotiems tinklams kirsti.
19. Kaip suderinti mažą delsą?
- Naudokite
RELIABLEpatikimumą suKEEP_LAST(1)istorija abiejuose galuose, kad
pakartotinių transliacijų yra minimalios. - Įgalinti bendros atminties perdavimą toje pačioje vietoje esantiems dalyviams.
- Prisekite „Astute DDS“ gijas su procesoriaus afinitetu ir naudokite realaus laiko planavimą
(SCHED_FIFO) leidėjo ir prenumeratoriaus procesuose. - Išjunkite „Nagle“ naudodami UDP (numatytasis nustatymas).
- Padidinkite lizdų buferius (žr. 16 klausimą), kad sugertumėte impulsų pliūpsnius.
- Nustatykite
LATENCY_BUDGET = 0, kad išjungtumėte bet kokį paketavimo vėlavimą.
20. Kodėl publikuojant didelius pavyzdžius matau delsos šuolius?
Kai pavyzdžiai viršija numatytąjį OS lizdo buferį (dažnai 208 KB sistemoje „Linux“),
branduolys atmeta paketus, o patikimas protokolas turi juos perduoti iš naujo, todėl
šuoliai. Padidinti net.core.rmem_max / net.core.wmem_max bent iki
imties dydis išsprendžia šią problemą. Apsvarstykite fragmentavimą su mažesniu fragment_size
nuostolingais tinklais.
21. Kaip sujungti du DDS domenus?
Naudokite „Astute DDS“ domeno maršrutizatorių – paslaugą, kuri sujungia du ar daugiau
domenus ir persiunčia sukonfigūruotas temas tarp jų, su pasirinktiniu
Rakto / turinio filtravimas ir QoS vertimas. Žr.
DDS domeno maršrutizatorius .
22. Kokie kalbų susiejimai yra galimi?
| Kalba | Būsena | Pastabos |
|---|---|---|
| C++20 | Stabilus | Pagrindinė API — libastutedds.a |
| C | Stabilus | Plokščiosios C API sąsaja FFI, žr. include/astutedds/c/astutedds.h |
| Python | Stabilus | „pybind11“ susiejimai, CPython 3.10–3.13 |
| Rūdys | Beta versija | astutedds dėžė (saugus apvalkalas per C API) |
23. Kurios platformos ir OS versijos yra palaikomos?
| Platforma | Išbandytos versijos |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Langai | „Windows 10“, „Windows 11“, „Windows Server 2022“ |
„Linux Python“ ratai žymimi manylinux_2_28 (glibc ≥ 2.28) ir veikia
bet kuriame suderinamame platinime.
24. Kaip įjungti DDS apsaugą?
- Sukurti tapatybės (X.509) ir leidimų (pasirašyto XML) artefaktus.
- Konfigūruokite dalyvio ypatybės QoS su autentifikavimu, prieigos valdymu ir
Kriptovaliutos įskiepio savybės (CA sertifikatas, tapatybės sertifikatas/raktas, leidimų failas,
valdymo byla). - Ryšys su „Astute DDS“, sukurtu naudojant
-DASTUTEDDS_ENABLE_SECURITY=ON.
Išsamias instrukcijas ir a rasite DDS saugumo skiltyje.
valdymo / leidimų šablonas.
25. Kaip išsaugoti duomenis po paleidimo iš naujo?
Paleiskite „Persistence“ paslaugą kartu su savo domenu. Ji užsiprenumeruoja
sukonfigūruotos TRANSIENT / PERSISTENT temos, pavyzdžius saugo vietiniame atmintyje
duomenų bazėje (pagal numatytuosius nustatymus „SQLite“) ir iš naujo publikuoja juos vėlyvojo prisijungimo sistemoje
prenumeratoriai, įskaitant tuos, kurie prisijungia po to, kai originalus autorius miršta.
Žr. Nuolatinė paslauga .
26. Kaip įrašyti ir atkurti srautą?
Norėdami užfiksuoti domeną į a, naudokite pridedamą įrankį astutedds-record
.astdb failą ir astutedds-replay , kad jį publikuotumėte su reguliuojamu laiko mastelio keitimas. Įrašymas atsižvelgia į tipą ir viduje naudoja XCDR2. Žr.
Įrašymas ir atkūrimas .
27. Kaip keisti duomenų tipą neatšaukiant prenumeratorių?
Pažymėkite IDL tipą naudodami @extensibility(MUTABLE) (arba APPENDABLE ) ir
Pažymėkite kiekvieną narį @id(N) . XCDR2 kintami srautai leidžia:
- Pridedami nauji nariai iš abiejų pusių.
- Šalinami pasirenkami nariai.
- Narių pertvarkymas.
Neatitinkantys nariai praleidžiami pagal X tipų priskyrimo taisykles.
@extensibility(FINAL) užrakina išdėstymą ir turi būti naudojamas, kai yra dvejetainis kodasSuderinamumas su senesniais XCDR1 skaitytuvais yra svarbus.
28. Kaip naudoti pagal turinį filtruojamas temas?
Sukurkite „ ContentFilteredTopic “ iš įprastos temos su SQL tipo filtru
išraišką ir susiekite su ja „ DataReader :
std::vector params{"42"};
auto cft = dp->create_contentfilteredtopic(
"HighSeverity", topic, "severity > %0", params);
auto reader = sub->create_datareader(cft, DATAREADER_QOS_DEFAULT, nullptr, 0); Filtras įvertinamas rašymo pusėje, kai įmanoma, siekiant sutaupyti pralaidumo.
29. Kaip konfigūruoti QoS iš XML failo?
Naudokite XmlQosLoader , kad nuskaitytumėte DDS-XML profilį ir pritaikytumėte jį kurdami
subjektai:
XmlQosLoader loader;
loader.load_file("qos_profiles.xml");
auto qos = loader.get_datawriter_qos("MyLib", "ReliableProfile");
auto writer = pub->create_datawriter(topic, qos, nullptr, 0); Žr. DDS-XML QoS profilius, kad pamatytumėte schemą ir ji veiktų.
pavyzdžiai.
30. Kaip derinti sąveikos arba aptikimo problemas?
- Paleiskite
astutedds-inspectdomene, kad peržiūrėtumėte aptiktus
dalyviai, galiniai taškai ir atitikimo būsena realiuoju laiku. - Užfiksuokite srautą naudodami
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'ir atidarykite jį „Wireshark“ – RTPS skaidiklyje.
dekoduoja SPDP, SEDP ir vartotojo duomenis. - Įjungti sekimo žurnalus:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Patikrinkite subjekto ID ir prievadus:
- SPDP rašymo/skaitymo įrenginys:
00:01:00:c2/00:01:00:c7 - SEDP publikacija:
00:00:03:c2/00:00:03:c7 - SEDP prenumerata:
00:00:04:c2/00:00:04:c7 - Bazinis prievadas:
7400 + 250 × domain_id.
- SPDP rašymo/skaitymo įrenginys:
- Patvirtinkite, kad abu partneriai reklamuoja suderinamus tiekėjų ID ir protokolo versijas
(DDSI-RTPS 2.5).