arche-lang 0.11.0

Vos systèmes, écrits comme du code.

Un langage textuel pour les systèmes embarqués et complexes : composants, ports, messages, machines à états, exigences et plans de test. Vérifiez votre modèle pendant la frappe, simulez-le, testez-le et générez son code.

Un fichier. Tout le système.

Une voiture qui freine devant un obstacle : ses messages, ses composants et leurs liens, une machine à états, l’exigence et le test qui la vérifie.

message POINT_CLOUD "Point cloud" { nearest: float32 }
message BRAKE_CMD "Brake command" { force: float32; emergency: bool }
message ENGAGE "Engage" { on: bool }

const MAX_SPEED = 40.0

requirement REQ-AEB "Emergency braking" {
  text "The car shall brake within 40 ms of an obstacle closer than 30 m."
  verified-by TP-AEB
}

component Lidar "Lidar" {
  out cloud: can sends POINT_CLOUD
}

component Hmi "Driver panel" {
  out bus: can sends ENGAGE
}

/// The driving computer: it brakes when an obstacle is close.
component Adcu "Driving computer" {
  satisfies REQ-AEB
  in sense: can { handler POINT_CLOUD -> on_cloud }
  in hmi: can receives ENGAGE
  out brake: can sends BRAKE_CMD
  var speed: float32 = 0 unit m/s

  fn on_cloud(nearest: float32) ```arche
    if state == Autonomous and nearest < 30.0 {
      send brake BRAKE_CMD { force: 8000.0, emergency: true }
    }
  ```

  states {
    state Manual
    state Autonomous
    Manual -> Autonomous on ENGAGE [self.speed < MAX_SPEED]
    Autonomous -> Manual on ENGAGE
  }
}

component Brakes "Brakes" {
  in cmd: can receives BRAKE_CMD
}

system Car "Car" {
  part lidar: Lidar
  part hmi: Hmi
  part adcu: Adcu
  part brakes: Brakes
  lidar.cloud -> adcu.sense { latency 1ms }
  hmi.bus -> adcu.hmi
  adcu.brake -> brakes.cmd
}

test-plan TP-AEB "Emergency braking" {
  case TC-AEB-01 "Obstacle at 20 m" {
    verifies REQ-AEB
    at 0ms do send(hmi.bus, ENGAGE(on=True))
    at 10ms expect adcu.state == "Autonomous"
    at 10ms do send(lidar.cloud, POINT_CLOUD(nearest=20.0))
    within 40ms expect sent("BRAKE_CMD") >= 1
  }
}

Définitions et instances

Un component est une définition ; une part en est une instance, placée dans un system. Les ports envoient et reçoivent des messages ; un lien relie deux ports.

Un comportement qui se lit

Le corps d’une fonction s’écrit dans le langage d’action. archec le vérifie et le traduit en Python pour le simulateur, ainsi qu’en C, en Rust et en Go.

Le diagramme, tiré du texte

Trois façons de s’y mettre.

Le même compilateur partout : dans votre éditeur, dans votre terminal et dans ce navigateur.

VS Code

Coloration syntaxique, diagnostics pendant la frappe, correctifs rapides, complétion, un diagramme à côté du texte et un débogueur de simulation.

code --install-extension arche-lang.vsix Obtenir l’extension

Ligne de commande

archec vérifie, construit, simule, teste et génère. Node 18 ou plus récent.

archec new my-robot && archec check main.arche Installer archec

Playground

Écrivez un modèle dans le navigateur : il est vérifié, dessiné, construit et traduit en code. Rien à installer ; rien ne quitte la page.

arche-lang.xyz/playground Ouvrir le Playground

Du modèle au firmware.

Vérifié pendant la frappe

Noms, types, ports et ce qu’ils envoient, unités, machines à états : chaque erreur devient un diagnostic sur sa ligne, le plus souvent avec un correctif.

Des exigences aux tests

Une exigence indique qui la satisfait et quel plan de test la vérifie. Les tests s’exécutent dans le simulateur.

Simulé dans le navigateur

Machines à états, corps écrits dans le langage d’action et liens s’exécutent dans une page, sans rien installer.

Le code, à partir du modèle

C99 sans allocation dynamique, Rust sur Embassy, Go, C++, ROS 2, CAN DBC, AUTOSAR ARXML, devicetree, et vos propres générateurs.

Vérifié

Vérification formelle des machines à états avec NuSMV, arbres de défaillances, STPA et TARA, couverture de test, vérification à l’exécution sur de vrais journaux.

Un projet Arche

Le modèle se compile en un projet Arche : ouvrez-le dans Arche pour voir le système sur son canevas.

Suivre le tutoriel : une pompe à eau, du modèle au firmware

L’Arche Store

Architectures, pilotes, cartes et spécifications à ajouter à votre modèle, signés. archec add en ajoute un.

Visiter le Store