Plateforme · Multi Stacks

Communication véhicule et IoT industriel, déclarée en fichiers de données.

CAN, J1939, UDS, Modbus, ISOBUS — même moteur, un seul DSL, un seul runtime. Les piles s'exécutent en parallèle sur les mêmes interfaces physiques avec des cycles de vie indépendants. Les modifications de protocole sont des éditions JSON, pas des releases firmware.

Système · multi-protocole
Multi-bus CAN, J1939, UDS
Un gateway, N piles concurrentes

Fait partie de la couche moteur no-code — configurer le comportement des piles en JSON, sans recompilation. Developer-first : DSL JSON complet via le SDK MOS4.

Le modèle déclaratif

Quatre éléments — un seul moteur.

Chaque déploiement Multi Stacks, bus véhicule ou IoT industriel, est déclaré en quatre parties mobiles. La stratégie périodique est disponible d'emblée ; les séquences avancées émergent en composant avec MSP et MEP.

1 · Protocole

Le transport et l'encadrement — CAN, CAN-FD, J1939, ISO-TP, DoIP, UDS, K-Line, ISOBUS, Modbus RTU/TCP, CANopen. La sélection est un champ JSON ; aucune recompilation pour ajouter un transport.

2 · Question + Réponse

Quelle commande, PID, PGN ou registre envoyer et comment décoder la réponse. Les expressions de décodage sont en ligne — octets en entrée, signal nommé en sortie.

3 · Diffusion

Gestion des messages non sollicités et en lecture seule — écoute passive, décodage de style événementiel sans requête. Le même JSON déclare le décodage pour les trames non sollicitées.

4 · Stratégie

Quelles séquences exécuter et quand. Périodique par défaut. Piloté par signal via MSP, piloté par événement via MEP — le reste de MOS4 fournit la stratégie avancée sans sortir du modèle déclaratif.

Couverture protocolaire

16 familles de protocoles dans une API unifiée.

Éventail de cartes protocoles cyan brillantes (CAN-FD, ISO-TP, DoIP, J1939, J1850, K-Line, UDS, Modbus, OBD-II, ISOBUS) convergeant vers un bloc moteur ambre au centre, sur fond blueprint sombre
Matrice des protocoles véhicule et IoT industriel
Protocole Transport Segment typique
CAN Classical CAN Passager, VUL, hors-route
CAN-FD CAN Passager moderne, VE
ISO-TP CAN segmenté Couche diagnostic UDS
DoIP Ethernet Diagnostic ECU moderne
UDS ISO-TP / DoIP Services de diagnostic unifiés
OBD-II ISO-TP / K-Line Émissions véhicules légers (ISO 15031)
OBFCM OBD-II / UDS Reporting carburant/énergie UE (2021/392)
J1939 CAN Poids lourds, bus
J1587/J1708 RS-485 Poids lourds legacy
J1850 VPW/PWM Monofil Passager legacy (GM, Chrysler)
K-Line ISO 9141-2 Véhicules passager anciens
CANopen CAN Industrie, machines hors-route
ISOBUS CAN (ISO 11783) Équipements agricoles (lecture seule)
Modbus RTU/TCP RS-485 / Ethernet Capteurs industriels, groupes électrogènes, automates
GMLAN CAN Passager GM legacy
TP 2.0 CAN Passager groupe VAG

Modbus ASCII est expérimental — non revendiqué pour la production. ISOBUS est en acquisition lecture seule ; la création d'affichage VT n'est pas prise en charge.

Apportez votre bus et votre mix de protocoles — nous adaptons Multi Stacks.

Exemple pratique · véhicule (J1939)

Scénario dashcam poids lourd — charge moteur via J1939.

Une dashcam de flotte poids lourd a besoin de la charge moteur et de la vitesse à 10 Hz, ainsi que de lectures de codes défaut à la demande. L'ensemble est une seule pile JSON.

JSON de pile J1939 minimal

{
  "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" }
}

Ajouter un PGN, changer une période ou câbler un nouveau service DTC est une édition JSON et un commit. Pas de recompilation, pas de flash firmware.

Exemple pratique · IoT industriel (Modbus)

Interrogation d'un automate en Modbus RTU.

Mêmes quatre éléments, protocole différent. Un contrôleur de groupe électrogène industriel expose des registres d'entrée ; une pile Modbus les interroge à 1 Hz, les décode en signaux nommés et diffuse un événement quand un seuil est dépassé.

JSON de pile Modbus minimal

{
  "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 et Modbus TCP/MBAP partagent le même DSL. Passer de l'un à l'autre est un seul champ JSON.

Composition de stratégie

Multi Stacks piloté par MSP ou par MEP.

L'élément Stratégie est intentionnellement simple — périodique, avec des déclencheurs de diffusion optionnels. Les séquences avancées émergent quand MSP (piloté par signal) ou MEP (piloté par événement) est la stratégie.

MSP pilote Multi Stacks (piloté par signal)

Un graphe MSP surveille un signal décodé — par exemple, la vitesse dépassant 80 km/h — et déclenche une requête Multi Stacks (ex. lecture UDS d'un snapshot de consommation). La réponse circule en retour dans la même pile.

Un graphe MSP surveille un seuil de signal et déclenche une requête UDS Multi Stacks ; la réponse Multi Stacks revient dans MSP.

flowchart LR
  Sig[Graphe MSP<br/>seuil signal] -->|déclencheur| MS[Multi Stacks<br/>envoyer requête UDS]
  MS -->|réponse| Sig
Stratégie pilotée par signal — MSP déclenche, Multi Stacks interroge.

MEP pilote Multi Stacks (piloté par événement)

Une règle MEP se déclenche sur un événement nommé (moteur ON, franchissement de géofence, téléchargement OTA terminé) et exécute une séquence d'action Multi Stacks — par exemple, effacer les DTC après une visite de service, ou lire un snapshot ECU ponctuel.

Un événement EventBus déclenche une règle MEP, dont l'action exécute une séquence Multi Stacks.

flowchart LR
  Evt[EventBus<br/>événement nommé] -->|déclencheur| MEP[Règle MEP]
  MEP -->|action| MS[Multi Stacks<br/>exécuter séquence]
Stratégie pilotée par événement — MEP déclenche, Multi Stacks agit.

Mode multi-pile

N piles · un seul ensemble d'interfaces physiques.

Chaque pile s'exécute avec un cycle de vie indépendant et un chemin d'export indépendant sur les mêmes interfaces physiques. Plusieurs piles partageant un bus ne nécessitent pas de planificateur — l'API protocole unifiée arbitre l'accès et applique l'isolation.

Trois piles indépendantes partagent une API protocole unifiée. La pile A est une pile OBD-II JSON lisant des PIDs passager. La pile B est une pile J1939 JSON lisant des PGNs camion. La pile C est une pile Modbus JSON lisant des capteurs RS-485. Toutes trois alimentent l'API protocole unifiée, qui arbitre l'accès et applique des cycles de vie indépendants. Le gestionnaire dispatche vers trois interfaces physiques — CAN0, CAN1 et RS-485 — sans conflits de propriété de bus. Chaque pile exporte indépendamment : pile A vers le sujet MQTT A, pile B vers le sujet MQTT B, pile C vers le moteur de politique.

flowchart TD
  S1[Pile A — OBD-II JSON<br/>PIDs passager]
  S2[Pile B — J1939 JSON<br/>PGNs camion]
  S3[Pile C — Modbus JSON<br/>capteurs RS-485]
  V[API protocole unifiée<br/>arbitrage · cycles de vie]
  S1 --> V
  S2 --> V
  S3 --> V
  V --> Iface1[CAN0]
  V --> Iface2[CAN1]
  V --> Iface3[RS-485]
  S1 -->|export| MQ1[Sujet MQTT A]
  S2 -->|export| MQ2[Sujet MQTT B]
  S3 -->|export| MEP[Moteur de politique]
Trois piles concurrentes, une API protocole unifiée. Cycles de vie indépendants, chemins d'export indépendants, pas de planificateur dans votre code.
API de service de streaming
Méthode Cadence Description
SubscribeData configurable Valeurs de signaux décodés et nommés pour consommation par MSP et MEP
SubscribeBusLoad ~1 Hz Métriques de charge CAN par interface physique
SubscribeCanFrames débit trame Tap de trames brutes — flux fusionné de toutes les piles actives

Le tap de trames brutes diffuse en temps réel pour consommation par MSP, le pont MQTT et le service de base de données MOS4.

Capacités

Ce qui est disponible d'emblée.

22 piles par défaut validées en CI, gestion DTC de niveau production, passthrough J2534-2, et résilience par disjoncteur intégrée — disponibles sans écrire un planificateur ni gérer manuellement l'arbitrage de bus.

22 piles par défaut validées en CI

OBD-II, UDS, J1939, ISOBUS, OBFCM, Modbus, CANopen et autres sont inclus et validés à chaque push CI via des tests Python/pytest autonomes. Ajoutez votre propre pile en tant que fichier JSON à côté d'eux.

Lecture + effacement DTC

Les codes défaut sont lus et effacés dans les piles prises en charge via le service OBD-II 03/04 ou les services d'information de diagnostic UDS. Déclaré dans le JSON de la pile — aucun code personnalisé requis.

Passthrough J2534-2

Une API JSON/Protobuf PassThru avec support de l'API étendue J2534-2 permet aux outils de diagnostic existants et aux flasheurs ECU d'atteindre le véhicule via le même gateway — pas de dongle J2534 dédié requis.

Résilience par disjoncteur

Après des échecs de communication répétés avec un ECU spécifique, cette pile se rétracte automatiquement et rapporte son état de santé au contrôleur cloud. Les autres piles sur le même gateway continuent de fonctionner normalement — pas de tempête de retry, pas de panne en cascade.

Identification + push de pile OE

La bonne pile pour chaque véhicule, automatiquement.

Avant tout sondage, le runtime identifie le véhicule et sélectionne la pile OE appropriée à charger. La pile OE poussée standardise les données — nommage, format, unités et fréquence — pour les DTC OE, la télémétrie tableau de bord et les autres surfaces de données OE.

Identification par VIN

Le VIN est lu depuis le véhicule lors de la connexion. Le runtime le mappe à la définition de pile OE correspondante et la charge avant le premier cycle de sondage. Aucune configuration manuelle au niveau du véhicule.

Logique d'identification

Quand le VIN seul est insuffisant, une logique d'identification personnalisée — déclarée dans la configuration de la pile — gère les cas particuliers : variantes de véhicule, retrofits ou configurations de flotte mixte. Le résultat est toujours une sélection de pile.

Config par véhicule

L'identification peut aussi être pilotée par une configuration par véhicule poussée depuis le cloud. Cela prend en charge les flottes où la résolution basée sur le VIN est indisponible ou remplacée par une affectation opérateur.

Ce processus d'identification est autonome — l'appareil résout la pile correcte localement depuis le résultat d'identification, sans aller-retour cloud requis pour le fonctionnement courant. Le cloud pousse la définition de pile OE une fois ; l'appareil l'applique à chaque connexion.

Les clients peuvent étendre le catalogue de piles avec leurs propres piles — achetées, propriétaires ou issues d'ingénierie inverse — avec leur propre logique d'identification. Les piles personnalisées sont limitées à leur flotte uniquement ; elles coexistent avec les piles OE par défaut sans conflit.

Pour le diagnostic à distance piloté par le cloud — où un humain ou une IA est le maître plutôt que l'appareil — consultez notre équipe technique au sujet de la surface de diagnostic à distance.

Où cela s'inscrit

Un pilier de la couche opérations.

Le diagnostic à distance est l'un des cinq piliers de la couche opérations — avec l'observabilité, la sécurité, l'OTA et le cycle de vie. Lire l'ensemble sur /fr/platform/operations.

Simulation ECU

Tests sans matériel sur vcan.

mos-mes simule un ou plusieurs ECU sur CAN virtuel ou DoIP et répond aux commandes UDS, OBD-II et ISO-TP avec des stratégies de signal configurables : constante, rampe, sinus, aléatoire ou table de correspondance. Les pipelines CI exécutent des suites de régression UDS/OBD-II complètes sans banc physique.

Le CLI autonome exécute load-stack, validate-stack et un REPL interactif sans dépendance au runtime MOS4. Idéal pour intégrer la validation de pile dans votre propre pipeline CI.

Support des langages

Six langages pour les extensions de pile.

Les clients peuvent étendre le comportement des piles — logique d'identification personnalisée, transformations de signaux et gestionnaires d'actions — en utilisant l'un des six langages. Lua 5.4 est l'option de scripting à plus faible barrière d'entrée : aucune chaîne d'outils Rust requise.

Rust

Authoring natif de micro services. Type safety complet, intégration EventBus zéro-copie.

Python

Scripting et charges de travail data-science. Validation de piles en CI via Pytest sans matériel.

C / C++

Bases de code embarquées existantes et SDK fournisseurs. L'isolation par conteneur applique le même budget de ressources.

Go

Micro services orientés réseau et adaptateurs de passerelle. Livraison OCI standard.

JavaScript / TypeScript

Micro services UI, tableaux de bord web et scripting d'actions MEP.

Lua 5.4

Option de scripting à plus faible barrière. Étendez le comportement des piles sans chaîne d'outils Rust. Gestionnaires d'actions rechargeable à chaud via le service de configuration.

Voir le SDK complet et les outils développeur →

FAQ

Questions fréquentes

  • Multi Stacks est-il la même chose que OBDStacks ?

    Oui. OBDStacks est le nom historique ; Multi Stacks est le nom canonique depuis le 2026-05-05. Même moteur, même DSL JSON, même catalogue default-stacks/.

  • Combien de protocoles le runtime prend-il en charge simultanément ?

    Jusqu'à 16 familles de protocoles partagent une API protocole unifiée. Plusieurs piles s'exécutent en parallèle avec des cycles de vie indépendants et des chemins d'export indépendants sur les mêmes interfaces physiques.

  • Qu'est-ce qu'une pile déclarative ?

    Une pile est un fichier de données JSON spécifiant ECU, commandes, actions, exports, conditions et expressions. Mettre à jour un PID, changer une période d'échantillonnage ou ajuster une politique de réponse est une édition JSON et un commit — pas une release firmware.

  • Modbus ASCII fonctionne-t-il en production ?

    Modbus ASCII est une fonctionnalité expérimentale — ne pas l'utiliser pour des déploiements en production. Modbus RTU (RS-485) et Modbus TCP/MBAP sont tous deux prêts pour la production.

  • Puis-je tester une pile sans matériel ECU réel ?

    Oui. mos-mes simule un ou plusieurs ECU sur une interface CAN virtuelle et répond aux commandes UDS, OBD-II et ISO-TP avec des stratégies de signal configurables. Les pipelines CI exécutent des suites de régression complètes sur vcan sans banc physique.

  • Que couvre le support DTC ?

    Lecture et effacement de DTC dans les piles prises en charge — via le service OBD-II 03/04 ou les services d'information de diagnostic UDS.

  • Comment Multi Stacks se compose-t-il avec MSP et MEP ?

    Une « Stratégie » Multi Stacks est périodique par défaut. Pour les séquences pilotées par signal, un graphe MSP publie un déclencheur et Multi Stacks envoie la requête correspondante. Pour les séquences pilotées par événement, une règle MEP se déclenche sur un événement nommé et exécute une action Multi Stacks. Les deux compositions restent déclaratives.

Apportez votre matrice de protocoles.

Listez les familles d'actifs que vous déployez ; nous les matcherons aux bonnes piles et montrerons la configuration de cycles de vie concurrents sur un appareil de développement.

Vous construisez sur MOS4 ?

Une réponse de l'équipe d'ingénierie, ~24 h. Pas de pitch, pas de NDA.

Parler à l'équipe