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
arche-lang 0.11.0
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.
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
}
}
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.
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 même compilateur partout : dans votre éditeur, dans votre terminal et dans ce navigateur.
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
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
É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
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.
Une exigence indique qui la satisfait et quel plan de test la vérifie. Les tests s’exécutent dans le simulateur.
Machines à états, corps écrits dans le langage d’action et liens s’exécutent dans une page, sans rien installer.
C99 sans allocation dynamique, Rust sur Embassy, Go, C++, ROS 2, CAN DBC, AUTOSAR ARXML, devicetree, et vos propres générateurs.
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.
Le modèle se compile en un projet Arche : ouvrez-le dans Arche pour voir le système sur son canevas.
Architectures, pilotes, cartes et spécifications à ajouter à votre modèle, signés. archec add en ajoute un.
Tapez pour chercher dans toutes les pages. ↑ ↓ pour vous déplacer, ↵ pour ouvrir.