SysML & modélisation

Blocs, ports et flux : décrire une architecture en SysML

SysML & modélisation · Publié le 2026-10-13

Un technicien examine une carte électronique à la loupe sur un établi de maintenance
Travail de précision sur une carte électronique dans un atelier de maintenance aéronautique. Photo : département de la Défense des États-Unis, domaine public.

La structure est la partie de SysML que l'on rencontre en premier, et celle où se jouent les interfaces entre équipes. Blocs, parties, ports, connecteurs et flux forment une grammaire précise : bien la maîtriser évite la plupart des modèles confus. Nous la parcourons ici à partir d'un exemple simple, un vélo à assistance électrique.

Le bloc, unité de base de la structure

En SysML v1, presque tout ce qui a une existence dans le système est un bloc : un composant matériel, un logiciel, un sous-système, un opérateur humain, voire un élément de l'environnement. Un bloc est un type : il décrit ce qu'ont en commun toutes les batteries d'un certain modèle, pas une batterie particulière.

Un bloc possède des propriétés de plusieurs natures :

Les comportements (activités, machines à états) et les contraintes peuvent aussi être rattachés à un bloc.

Le bdd : définir les types et leur décomposition

Le diagramme de définition de blocs montre les blocs et leurs relations de type. La composition, représentée par un losange plein, exprime qu'un bloc se compose d'autres : le vélo se compose d'un moteur, d'une batterie et d'un contrôleur. La généralisation, représentée par une flèche à tête triangulaire, exprime qu'un bloc est une sorte d'un autre : une batterie lithium-ion est une sorte de batterie. La multiplicité indique combien d'exemplaires sont présents : deux roues, une batterie, de zéro à un porte-bagages.

Le bdd est le bon endroit pour fixer l'arborescence du produit et les familles de composants. Il ne dit pas comment les parties sont reliées entre elles : c'est le rôle du diagramme suivant. Les deux sont présentés parmi les neuf diagrammes de SysML v1.

L'ibd : relier les parties

Le diagramme de blocs internes montre l'intérieur d'un bloc : ses parties, vues comme des rôles dans un contexte, leurs ports et les connecteurs qui les relient. Le schéma ci-dessous en donne une version simplifiée pour notre vélo.

Diagramme de blocs internes simplifié d'un vélo à assistance électrique Le bloc Vélo contient quatre parties : batterie, contrôleur, moteur et capteur de couple. La batterie fournit de l'énergie électrique au contrôleur, qui alimente le moteur. Le capteur de couple envoie une mesure au contrôleur. Le moteur fournit un couple mécanique vers l'extérieur du vélo, à la roue. ibd [Bloc] Vélo batterie : Batterie ctrl : Contrôleur moteur : Moteur capteur : CapteurCouple énergieélectriqueénergieélectriquemesure de couplecouple vers la roue

Exemple simplifié : les carrés sur le bord des parties sont des ports ; les traits sont des connecteurs ; les flèches indiquent le sens des flux d'items.

Cette vue répond à des questions concrètes : quelle partie fournit l'énergie au moteur ? Par où passe la mesure de couple ? Qu'est-ce qui sort du vélo vers la roue ? C'est, en une page, une spécification d'interfaces de premier niveau.

Les ports : où se font les échanges

Un port est un point d'interaction sur la frontière d'un bloc. SysML v1 en a connu plusieurs formes. Les « ports de flux » des premières versions ont été dépréciés avec SysML 1.3, qui a introduit deux sortes de ports :

Le port proxy
Il n'a pas de comportement propre : il expose à l'extérieur des caractéristiques de son bloc ou de ses parties internes. C'est le choix le plus courant, par exemple pour un connecteur électrique qui ne fait que transmettre.
Le port complet
Il se comporte comme une partie à part entière, avec ses propres caractéristiques et éventuellement son comportement, placée sur la frontière du bloc. Il sert à modéliser un élément physique d'interface qui transforme ce qu'il reçoit, comme un filtre ou un adaptateur.

Un port proxy est typé par un bloc d'interface, qui décrit ce qui peut passer par le port : des propriétés de flux (avec leur direction : entrée, sortie, entrée-sortie), des opérations, des signaux. Deux ports connectés doivent avoir des types compatibles, ce que les outils peuvent vérifier. Un port « conjugué » inverse les directions de son type, ce qui permet d'utiliser le même bloc d'interface des deux côtés d'une connexion.

Les flux d'items

Sur un connecteur, on peut indiquer un flux d'item : ce qui circule effectivement, dans quel sens, et de quel type. Les items peuvent être de la matière (carburant, air, eau), de l'énergie (courant électrique, couple mécanique, chaleur) ou de l'information (une mesure, une commande, un message). Distinguer ces natures est important : une interface « données » et une interface « puissance » n'ont pas les mêmes contraintes de conception ni les mêmes risques.

Valeurs, unités et grandeurs

Les propriétés de valeur sont typées par des types de valeurs, qui peuvent porter une unité et une grandeur physique. SysML s'appuie pour cela sur une bibliothèque de grandeurs et d'unités (dans SysML v1, le modèle QUDV, puis des bibliothèques fondées sur le système international). Typer proprement une masse en kilogrammes ou une puissance en watts n'est pas un détail : c'est ce qui permet ensuite d'écrire des contraintes paramétriques cohérentes et de détecter des erreurs d'unités.

La même chose en SysML v2

SysML v2 conserve ces concepts en les régularisant. Le bloc devient une définition de partie (part def), la propriété de partie devient un usage de partie (part). Les ports sont définis par port def, avec des caractéristiques orientées (in, out, inout). Les connexions entre ports peuvent être typées par des définitions d'interface (interface def), et les flux se déclarent explicitement. Voici le même vélo, très simplifié :

port def PortEnergie {
    out attribute puissance : Real;
}
part def Velo {
    part batterie : Batterie {
        port sortie : PortEnergie;
    }
    part ctrl : Controleur {
        port entree : ~PortEnergie;
    }
    connect batterie.sortie to ctrl.entree;
}

Le tilde (~) désigne le port conjugué, comme en v1. Ce passage d'une notation graphique à une notation textuelle équivalente est détaillé dans notre article sur SysML v2.

Bonnes pratiques

Sources