Plattform · Multi Stacks

Fahrzeug- und Industrial-IoT-Kommunikation, deklariert als Datendateien.

CAN, J1939, UDS, Modbus, ISOBUS — gleiche Engine, eine DSL, eine Laufzeit. Stacks laufen gleichzeitig auf denselben physischen Schnittstellen mit unabhängigen Lifecycles. Protokoll-Änderungen sind JSON-Edits, keine Firmware-Releases.

System · Multi-Protokoll
Multi-Bus CAN, J1939, UDS
Ein Gateway, N gleichzeitige Stacks

Teil der No-Code-Engine-Schicht — Stack-Verhalten aus JSON konfigurieren, kein Rekompilieren erforderlich. Developer-first: vollständige JSON-DSL über das MOS4-SDK.

Das deklarative Modell

Vier Bausteine — eine Engine.

Jedes Multi-Stacks-Deployment, Fahrzeugbus oder Industrial IoT, wird als vier bewegliche Teile deklariert. Periodische Strategie wird out of the box geliefert; erweiterte Sequenzen entstehen durch Kombination mit MSP und MEP.

1 · Protokoll

Transport und Framing — CAN, CAN-FD, J1939, ISO-TP, DoIP, UDS, K-Line, ISOBUS, Modbus RTU/TCP, CANopen. Auswahl ist ein JSON-Feld; kein Rekompilieren für einen neuen Transport.

2 · Anfrage + Antwort

Welchen Command, welche PID, PGN oder Register senden und wie die Antwort zu dekodieren ist. Dekodier-Ausdrücke sind inline — Bytes rein, benanntes Signal raus.

3 · Broadcast

Read-only und unaufgeforderte Nachrichtenverarbeitung — passives Sniffing, ereignisartiges Dekodieren ohne eine Anfrage. Dasselbe JSON deklariert die Dekodierung für unaufgeforderte Frames.

4 · Strategie

Welche Sequenzen wann ausgeführt werden. Standardmäßig periodisch. Signalgesteuert über MSP, ereignisgesteuert über MEP — der Rest von MOS4 liefert die erweiterte Strategie ohne das deklarative Modell zu verlassen.

Protokoll-Abdeckung

16 Protokoll-Familien in einer einheitlichen API.

Fächer leuchtender Cyan-Protokoll-Karten (CAN-FD, ISO-TP, DoIP, J1939, J1850, K-Line, UDS, Modbus, OBD-II, ISOBUS), die auf einen amber-leuchtenden Motorblock in der Mitte zulaufen, auf dunklem Blueprint-Hintergrund
Fahrzeug- und Industrial-IoT-Protokoll-Matrix
Protokoll Transport Typisches Segment
CAN Classical CAN PKW, leichte Nutzfahrzeuge, Off-Highway
CAN-FD CAN Moderne PKW, Elektrofahrzeuge
ISO-TP CAN segmentiert UDS-Diagnoseschicht
DoIP Ethernet Moderne ECU-Diagnose
UDS ISO-TP / DoIP Unified Diagnostic Services
OBD-II ISO-TP / K-Line Leichtfahrzeug-Emissionen (ISO 15031)
OBFCM OBD-II / UDS EU-Kraftstoff-/Energiemeldung (2021/392)
J1939 CAN Schwere Nutzfahrzeuge, Busse
J1587/J1708 RS-485 Legacy schwere Nutzfahrzeuge
J1850 VPW/PWM Einzel-Draht Legacy PKW (GM, Chrysler)
K-Line ISO 9141-2 Ältere Personenfahrzeuge
CANopen CAN Industrie, Off-Highway-Maschinen
ISOBUS CAN (ISO 11783) Landwirtschaftliche Geräte (nur Lesen)
Modbus RTU/TCP RS-485 / Ethernet Industrie-Sensoren, Generatoren, SPSen
GMLAN CAN Legacy-GM-PKW
TP 2.0 CAN VAG-Gruppe PKW

Modbus ASCII ist experimentell — nicht für Produktionseinsatz angegeben. ISOBUS ist schreibgeschützte Erfassung; VT-Display-Authoring wird nicht unterstützt.

Bringen Sie Ihren Bus und Protokoll-Mix — wir passen Multi Stacks an.

Praxisbeispiel · Fahrzeug (J1939)

LKW-Dashcam-Szenario — Motorlast via J1939.

Eine schwere Nutzfahrzeug-Flotten-Dashcam benötigt Motorlast und Straßengeschwindigkeit bei 10 Hz, zusammen mit Diagnose-Trouble-Code-Abfragen auf Anforderung. Das Ganze ist ein einzelner JSON-Stack.

Minimaler J1939-Stack-JSON

{
  "ecu_id": "EngineECU",
  "address": "0x00",
  "commands": [
    {
      "name": "engine_load_pct",
      "pgn": "0xF003",
      "spn": 92,
      "period_ms": 100,
      "decode": "A * 100 / 255"
    },
    {
      "name": "road_speed_kph",
      "pgn": "0xFEF1",
      "spn": 84,
      "period_ms": 100,
      "decode": "(A * 256 + B) / 256"
    }
  ],
  "dtc": { "service": "uds", "read": "0x19", "clear": "0x14" }
}

Eine PGN hinzufügen, einen Zeitraum ändern oder einen neuen DTC-Service verdrahten ist ein JSON-Edit und ein Commit. Kein Rekompilieren, kein Firmware-Flash.

Praxisbeispiel · Industrial IoT (Modbus)

Abfragen einer SPS über Modbus RTU.

Gleiche vier Bausteine, anderes Protokoll. Ein Fabrik-Generatorregler stellt Eingangsregister bereit; ein Modbus-Stack pollt sie mit 1 Hz, dekodiert sie als benannte Signale und sendet ein Ereignis, wenn ein Schwellwert überschritten wird.

Minimaler Modbus-Stack-JSON

{
  "device_id": "Genset-01",
  "transport": "modbus_rtu",
  "slave_id": 7,
  "commands": [
    {
      "name": "coolant_temp_c",
      "function": "read_input_registers",
      "address": 30001,
      "count": 1,
      "period_ms": 1000,
      "decode": "A / 10"
    },
    {
      "name": "fuel_level_pct",
      "function": "read_input_registers",
      "address": 30002,
      "count": 1,
      "period_ms": 1000,
      "decode": "A"
    }
  ],
  "broadcast": { "on_threshold": "fuel_level_pct < 10", "emit": "low_fuel" }
}

Modbus RTU und Modbus TCP/MBAP teilen dieselbe DSL. Von einem auf den anderen wechseln ist ein einzelnes JSON-Feld.

Strategie-Komposition

Multi Stacks gesteuert durch MSP oder MEP.

Der Strategie-Baustein ist absichtlich einfach — periodisch, mit optionalen Broadcast-Triggern. Erweiterte Sequenzen entstehen, wenn MSP (signalgesteuert) oder MEP (ereignisgesteuert) die Strategie ist.

MSP steuert Multi Stacks (signalgesteuert)

Ein MSP-Graph überwacht ein dekodiertes Signal — z. B. Straßengeschwindigkeit überschreitet 80 km/h — und löst eine Multi-Stacks-Anfrage aus (z. B. UDS-Lesen des Kraftstoffverbrauchs-Snapshots). Die Antwort fließt über denselben Stack zurück.

Ein MSP-Graph überwacht einen Signal-Schwellwert und löst eine Multi-Stacks-UDS-Anfrage aus; die Multi-Stacks-Antwort fließt zurück in MSP.

flowchart LR
  Sig[MSP-Graph<br/>Signal-Schwellwert] -->|auslösen| MS[Multi Stacks<br/>UDS-Anfrage senden]
  MS -->|Antwort| Sig
Signalgesteuerte Strategie — MSP löst aus, Multi Stacks fragt.

MEP steuert Multi Stacks (ereignisgesteuert)

Eine MEP-Regel feuert bei einem benannten Ereignis (Motor EIN, Geofence-Überquerung, OTA-Download abgeschlossen) und führt eine Multi-Stacks-Aktions-Sequenz aus — z. B. DTCs nach einem Serviceebesuch löschen oder einen einmaligen ECU-Snapshot lesen.

Ein EventBus-Ereignis löst eine MEP-Regel aus, deren Aktion eine Multi-Stacks-Sequenz ausführt.

flowchart LR
  Evt[EventBus<br/>benanntes Ereignis] -->|auslösen| MEP[MEP-Regel]
  MEP -->|Aktion| MS[Multi Stacks<br/>Sequenz ausführen]
Ereignisgesteuerte Strategie — MEP löst aus, Multi Stacks handelt.

Multi-Stack-Modus

N Stacks · ein Satz physischer Schnittstellen.

Jeder Stack läuft mit einem unabhängigen Lifecycle und Export-Pfad auf denselben physischen Schnittstellen. Mehrere Stacks, die einen Bus teilen, benötigen keinen Scheduler — die einheitliche Protokoll-API arbitriert den Zugriff und erzwingt Isolation.

Drei unabhängige Stacks teilen eine einheitliche Protokoll-API. Stack A ist ein OBD-II-JSON-Stack, der Fahrgast-PIDs liest. Stack B ist ein J1939-JSON-Stack, der LKW-PGNs liest. Stack C ist ein Modbus-JSON-Stack, der RS-485-Sensoren liest. Alle drei speisen die einheitliche Protokoll-API, die den Zugriff arbitriert und unabhängige Lifecycles erzwingt. Der Manager leitet zu drei physischen Schnittstellen — CAN0, CAN1 und RS-485 — ohne Bus-Eigentümerschaftskonflikte. Jeder Stack exportiert unabhängig: Stack A zu MQTT-Topic A, Stack B zu MQTT-Topic B, Stack C zur Policy-Engine.

flowchart TD
  S1[Stack A — OBD-II JSON<br/>Fahrgast-PIDs]
  S2[Stack B — J1939 JSON<br/>LKW-PGNs]
  S3[Stack C — Modbus JSON<br/>RS-485-Sensoren]
  V[Einheitliche Protokoll-API<br/>Arbitrierung · Lifecycles]
  S1 --> V
  S2 --> V
  S3 --> V
  V --> Iface1[CAN0]
  V --> Iface2[CAN1]
  V --> Iface3[RS-485]
  S1 -->|Export| MQ1[MQTT-Topic A]
  S2 -->|Export| MQ2[MQTT-Topic B]
  S3 -->|Export| MEP[Policy-Engine]
Drei gleichzeitige Stacks, eine einheitliche Protokoll-API. Unabhängige Lifecycles, unabhängige Export-Pfade, kein Scheduler in Ihrem Code.
Streaming-Service-API
Methode Takt Beschreibung
SubscribeData konfigurierbar Dekodierte, benannte Signal-Werte für MSP- und MEP-Verbrauch
SubscribeBusLoad ~1 Hz CAN-Auslastungs-Metriken pro physischer Schnittstelle
SubscribeCanFrames Frame-Rate Raw-Frame-Tap — zusammengeführter Stream von allen aktiven Stacks

Der Raw-Frame-Tap streamt in Echtzeit für den Verbrauch durch MSP, die MQTT-Bridge und den MOS4-Datenbankdienst.

Fähigkeiten

Was out of the box geliefert wird.

22 CI-validierte Standard-Stacks, produktionsgradige DTC-Behandlung, J2534-2-Passthrough und eingebaute Circuit-Breaker-Resilienz — alles verfügbar ohne einen Scheduler zu schreiben oder Bus-Arbitrierung manuell zu verwalten.

22 CI-validierte Standard-Stacks

OBD-II, UDS, J1939, ISOBUS, OBFCM, Modbus, CANopen und andere sind enthalten und bei jedem CI-Push über Python/pytest-Standalone-Tests validiert. Eigenen Stack als JSON-Datei daneben hinzufügen.

DTC-Lesen + -Löschen

Diagnostic Trouble Codes werden über den unterstützten Stack via OBD-II-Service 03/04 oder UDS-Diagnoseinformations-Services gelesen und gelöscht. Im Stack-JSON deklariert — kein benutzerdefinierter Code erforderlich.

J2534-2-Passthrough

Eine PassThru-JSON/Protobuf-API mit J2534-2-Extended-API-Unterstützung lässt bestehende Scan-Tools und ECU-Flasher das Fahrzeug über dasselbe Gateway erreichen — kein dedizierter J2534-Dongle benötigt.

Circuit-Breaker-Resilienz

Nach wiederholten Kommunikationsfehlern mit einer bestimmten ECU fährt dieser Stack automatisch zurück und meldet seinen Gesundheitsstatus an den Cloud-Controller. Andere Stacks auf demselben Gateway laufen normal weiter — kein Retry-Sturm, kein Kaskadenausfall.

Identifikation + OE-Stack-Push

Der richtige Stack für jedes Fahrzeug, automatisch.

Bevor ein Polling beginnt, identifiziert die Laufzeit das Fahrzeug und wählt den passenden OE-Stack zum Laden aus. Der gepushte OE-Stack standardisiert die Daten — Benennung, Format, Einheiten und Frequenz — über OE-DTCs, Dashboard-Telemetrie und andere OE-Datenoberflächen.

VIN-Identifikation

Die VIN wird beim Verbinden vom Fahrzeug gelesen. Die Laufzeit ordnet sie der entsprechenden OE-Stack-Definition zu und lädt diese, bevor der erste Polling-Zyklus beginnt. Keine manuelle Konfiguration auf Fahrzeug-Ebene.

Identifikations-Logik

Wenn die VIN allein nicht ausreicht, behandelt benutzerdefinierte Identifikations-Logik — in der Stack-Konfiguration deklariert — Grenzfälle: Fahrzeug-Varianten, Nachrüstungen oder gemischte Flotten-Konfigurationen. Das Ergebnis ist immer eine Stack-Auswahl.

Pro-Fahrzeug-Konfiguration

Identifikation kann auch durch eine pro-Fahrzeug-Konfiguration gesteuert werden, die aus der Cloud gepusht wird. Dies unterstützt Flotten, bei denen VIN-basierte Auflösung entweder nicht verfügbar oder durch Operator-Zuweisung überschrieben ist.

Dieser Identifikationsprozess ist autonom — das Gerät löst den richtigen Stack lokal aus dem Identifikationsergebnis auf, ohne Cloud-Round-Trip für den normalen Betrieb. Die Cloud pusht die OE-Stack-Definition einmal; das Gerät wendet sie bei jeder Verbindung an.

Kunden können den Stack-Katalog mit eigenen Stacks erweitern — gekauft, IP-eigentum oder reverse-engineered — mit eigener Identifikations-Logik. Benutzerdefinierte Stacks sind auf ihre Flotte beschränkt; sie koexistieren neben den Standard-OE-Stacks ohne Konflikt.

Für Cloud-gesteuerte Remote-Diagnose — wo ein Mensch oder eine KI der Master ist statt des Geräts — wenden Sie sich an unser Engineering-Team bezüglich der Remote-Diagnose-Oberfläche.

Einordnung

Eine Säule der Operations-Schicht.

Remote-Diagnose ist eine von fünf Säulen in der Operations-Schicht — zusammen mit Observability, Safety, OTA und Lifecycle. Den vollständigen Satz lesen unter /de/platform/operations.

ECU-Simulation

Hardware-freies Testen auf vcan.

mos-mes simuliert eine oder mehrere ECUs auf virtuellem CAN oder DoIP und antwortet auf UDS, OBD-II und ISO-TP mit konfigurierbaren Signal-Strategien: konstant, Rampe, Sinus, zufällig oder Lookup-Tabelle. CI-Pipelines führen vollständige UDS/OBD-II-Regressions-Suiten ohne physische Bench aus.

Das eigenständige CLI führt load-stack, validate-stack und ein interaktives REPL ohne MOS4-Laufzeit-Abhängigkeit aus. Ideal zur Integration der Stack-Validierung in Ihre eigene CI-Pipeline.

Sprachunterstützung

Sechs Sprachen für Stack-Erweiterungen.

Kunden können Stack-Verhalten erweitern — benutzerdefinierte Identifikationslogik, Signaltransformationen und Action-Handler — mit einer von sechs Sprachen. Lua 5.4 ist die Scripting-Option mit der niedrigsten Einstiegshürde: keine Rust-Toolchain erforderlich.

Rust

Natives micro service-Authoring. Volle Typsicherheit, Zero-Copy-EventBus-Integration.

Python

Scripting und Data-Science-Workloads. Pytest-basierte Stack-Validierungs-CI ohne Hardware.

C / C++

Bestehende Embedded-Codebasen und Vendor-SDKs. Container-Isolierung erzwingt dasselbe Ressourcenbudget.

Go

Netzwerk-orientierte Micro Services und Gateway-Adapter. Standard-OCI-Container-Lieferung.

JavaScript / TypeScript

UI-micro services, webbasierte Dashboards und MEP-Action-Scripting.

Lua 5.4

Scripting-Option mit der niedrigsten Einstiegshürde. Stack-Verhalten ohne Rust-Toolchain erweitern. Hot-reloadbare Action-Handler über den Config-Service.

Vollständiges SDK und Entwicklerwerkzeuge ansehen →

FAQ

Häufig gestellte Fragen

  • Ist Multi Stacks dasselbe wie OBDStacks?

    Ja. OBDStacks ist der Legacy-Name; Multi Stacks ist der kanonische Name seit 2026-05-05. Gleiche Engine, gleiche JSON-DSL, gleicher default-stacks/-Katalog.

  • Wie viele Protokolle unterstützt die Laufzeit gleichzeitig?

    Bis zu 16 Protokoll-Familien teilen eine einheitliche Protokoll-API. Mehrere Stacks laufen gleichzeitig mit unabhängigen Lifecycles und Export-Pfaden auf denselben physischen Schnittstellen.

  • Was ist ein deklarativer Stack?

    Ein Stack ist eine JSON-Datendatei, die ECUs, Commands, Actions, Exports, Conditions und Expressions spezifiziert. Eine PID aktualisieren, einen Sampling-Zeitraum ändern oder eine Antwort-Richtlinie anpassen ist ein JSON-Edit und ein Commit — keine Firmware-Release.

  • Funktioniert Modbus ASCII in der Produktion?

    Modbus ASCII ist ein experimentelles Feature — verlassen Sie sich nicht darauf für Produktions-Deployments. Modbus RTU (RS-485) und Modbus TCP/MBAP sind beide produktionsreif.

  • Kann ich einen Stack ohne echte ECU-Hardware testen?

    Ja. mos-mes simuliert eine oder mehrere ECUs auf einer virtuellen CAN-Schnittstelle und antwortet auf UDS, OBD-II und ISO-TP mit konfigurierbaren Signal-Strategien. CI-Pipelines führen vollständige Regressions-Suiten auf vcan ohne physische Bench aus.

  • Was deckt DTC-Unterstützung ab?

    DTC-Lesen und -Löschen über den unterstützten Stack — via OBD-II-Service 03/04 oder UDS-Diagnoseinformations-Services.

  • Wie kombiniert Multi Stacks mit MSP und MEP?

    Eine Multi-Stacks-"Strategy" ist standardmäßig periodisch. Für signalgesteuerte Sequenzen publiziert ein MSP-Graph einen Trigger und Multi Stacks sendet die entsprechende Anfrage. Für ereignisgesteuerte Sequenzen feuert eine MEP-Regel bei einem benannten Ereignis und führt eine Multi-Stacks-Aktion aus. Beide Kompositionen bleiben deklarativ.

Bringen Sie Ihre Protokoll-Matrix.

Listen Sie die Asset-Familien auf, die Sie ausliefern; wir passen sie den richtigen Stacks an und zeigen das gleichzeitige Lifecycle-Setup auf einem Entwicklungsgerät.

Bauen Sie auf MOS4?

Eine Antwort vom Engineering-Team, ~24 h. Kein Deck, kein NDA.

Mit Engineering sprechen