AUTOSAR_AP_EXP_ARAComAPI
FIG-eca7682dbb95f27b
932 × 756 px
4 Release(s)
Figure 4.2: ara::com event based communication
SHA-256 Inhalts-Fingerabdruck:
eca7682dbb95f27b9b75bc36b10a500dff75463b4367f43f4d5453d3d8dc7845
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML 2.x Sequenzdiagramm (
sd Dynamic View). - Funktionale Einordnung: AUTOSAR Adaptive Platform (AP), Kommunikationsmanagement (
ara::com). - Technischer Zweck: Spezifikation des standardisierten, ereignisbasierten Publish/Subscribe-Kommunikationsablaufs zwischen Service-Konsument (Client) und Service-Provider (Server). Das Diagramm illustriert die Entkopplung von Benachrichtigung (
SetReceiveHandler) und Datenabruf (GetNewSamples) über Middleware- und Network-Binding-Schichten hinweg inklusive Pufferung undSamplePtr-basierter Zustellung.
2. Komponenten, Entitäten & Schnittstellen
- Lifelines & Architektur-Rollen:
Client Application: Service-Konsument (Adaptive Application, AA), interagiert ausschließlich über die typisierte Proxy-Schnittstelle.Proxy: Generierte Service-Proxy-Instanz gemäß Service-Interface-Manifest; kapselt Event-Wrapper (ara::com::Proxy::Event).Communication Management Middleware: Plattform-Kern vonara::com; verwaltet Ringpuffer, Subscription-Zustände, Callback-Dispatches und IPC/Transport-Abstraktion.Network Binding: Protokollspezifische Serialisierungs- und Transportschicht (z. B. SOME/IP-Binding, DDS-Binding, POSIX Shared-Memory Binding).Skeleton: Generierte Service-Skeleton-Instanz auf Providerseite (ara::com::Skeleton::Event).Server application: Service-Provider (Adaptive Application, AA), erzeugt Nutzdaten und steuert die Publikationszeitpunkte.
- Schnittstellen & Interaktionspunkte:
Event::SetReceiveHandler()/RegisterReceiveHandler(): Registrierung der anwendungsspezifischen Benachrichtigungsfunktion (ara::com::EventReceiveHandler).Event::Subscribe(size_t maxSampleCount)/Subscribe()/Register Subscriber(): Registrierung des Events an der Middleware und Initiierung des bindingspezifischen Subscriptions (z. B. SOME/IP SD Subscribe Eventgroup).Send()/Send Event()/TransmitSample(): Übergabe der Payload durch die Server-Applikation an Skeleton, Middleware und Network Binding.Receive()/StoreSamples(): Low-Level-Empfang und Einreihung der deserialisierten Samples in den typspezifischen Empfangspuffer.Notify ReceiveHandler(): Asynchroner Benachrichtigungstrigger von der Middleware an die Client-Applikation.Event::GetNewSamples(F&& f, size_t maxNumberOfSamples)/FetchSamples(): Bereitstellung von Samples an das übergebene Callablef.User defined callable f per sample(std::move(SamplePtr)): Inversion of Control; sequenzielle Übergabe jedes verfügbaren Datensatzes gekapselt in einemara::com::SamplePtr<const SampleType>.
3. Dynamisches Verhalten & Sequenzablauf
- Initialisierung & Subscription (Client-Seite):
- Die
Client Applicationsetzt viaEvent::SetReceiveHandler()den Benachrichtigungs-Callback imProxy, welcher diesen an dieCommunication Management Middlewareweiterreicht. - Die
Client Applicationruft synchronEvent::Subscribe()auf. Der Aufruf wird über denProxyund dieCommunication Management Middlewarean dasNetwork Bindingpropagiert (Register Subscriber()).
- Die
- Event-Erzeugung & Übertragung (Server-Seite):
- Die
Server applicationstößt die Publikation mittelsSkeleton::Send()an. - Das
SkeletonruftSend Event()an der Middleware auf, welche den Datensatz an dasNetwork Bindingübergibt (Send()). - Das
Network Bindingserialisiert und versendet das Sample (TransmitSample()).
- Die
- Empfang & Benachrichtigung (
alt [subscribed]):- Das
Network Bindingempfängt das Datenpaket (Receive()) und übergibt es an die Middleware. - Die Middleware speichert die Daten im internen Puffer (
StoreSamples()). - Ist die Subscription aktiv (
[subscribed]), setzt die Middleware einen asynchronen Trigger ab:Notify ReceiveHandler().
- Das
- Datenübernahme via Callable (
loop [All sample processed]):- Die
Client Applicationreagiert (im Kontext des Handlers oder eines eigenen Worker-Threads) mitEvent::GetNewSamples(F&& f, maxNumberOfSamples). - Der
Proxyfordert die gepufferten Datensätze an (FetchSamples()). - Für jedes verfügbare Sample bis zur Obergrenze
maxNumberOfSamplesiteriert der Proxy (loop [All sample processed]) und führt das anwenderdefinierte Lambda/Callablefmit Move-Semantik aus (std::move(SamplePtr)).
- Die
4. Normative Relevanz & Entwickler-Hinweise
- Entkopplung von Benachrichtigung und Datenzugriff:
Notify ReceiveHandler()transportiert keine Nutzdaten, sondern signalisiert lediglich deren Verfügbarkeit. Daten müssen aktiv viaGetNewSamples()abgeholt werden. - Lebenszeit- & Speichermanagement (
SamplePtr):- Der Zugriff erfolgt über Zero-Copy bzw. Smart-Pointer (
ara::com::SamplePtr<const SampleType>). - Solange eine
SamplePtr-Instanz in der Client-Applikation existiert, bleibt der zugehörige Slot im Middleware-Speicher (z. B. Shared Memory) gesperrt. Eine verzögerte Freigabe blockiert den Ringpuffer des Binders.
- Der Zugriff erfolgt über Zero-Copy bzw. Smart-Pointer (
- Threading- & Reentrancy-Regeln:
- Der
ReceiveHandlerwird typischerweise aus dem Kontext des Middleware-Event-Loops aufgerufen. - Im Handler dürfen keine langlaufenden, blockierenden oder reentranten
ara::com-Aufrufe erfolgen; komplexe Verarbeitung muss in thread-sichere Applikations-Queues ausgelagert werden.
- Der
- Puffer-Dimensionierung:
- Der Parameter
maxSampleCountbeiSubscribe()muss exakt auf die Erzeugerrate und Verarbeitungszeit abgestimmt werden, umkSampleLost-Zustände oder Pufferüberläufe in der Middleware zu vermeiden.
- Der Parameter
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.