Connectez un modèle de procédé virtuel pour simuler automatiquement le retour des actionneurs physiques, et exécutez des scénarios de test .yaml pour vérifier le comportement de vos séquences de bout en bout.
Un modèle de procédé s'exécute aux côtés du Simulateur à chaque cycle de scrutation, lisant les sorties de l'automate et mettant automatiquement à jour les entrées des capteurs.
plant.yamlPlacez un fichier plant.yaml à la racine de votre projet pour modéliser des organes mécaniques industriels standards sans écrire de code :
| Élément | Description |
|---|---|
cylinders |
Vérins pneumatiques ou hydrauliques avec temps de course et capteurs de fin de course (is_retracted, is_extended) |
conveyors |
Convoyeurs à bande ou à rouleaux déplaçant des pièces entre des capteurs optiques |
analogs |
Grandeurs analogiques de procédé (température, pression, niveau) pilotées par les sorties actionneurs |
counters |
Générateurs d'impulsions physiques et retours de codeurs |
INITIAL_INPUTS |
États initiaux booléens et numériques des capteurs au démarrage de la simulation |
plant/*.mjs)Pour les lignes multi-stations avec suivi de pièces, magasins ou physique sur mesure, créez un module ES (.mjs) qui exporte INITIAL_INPUTS et une fonction step(outputs, dt, inputs) :
export const INITIAL_INPUTS = {
clamp_is_retracted: true,
clamp_is_extended: false,
};
export function step(outputs, dt, inputs) {
if (outputs.clamp_extend) {
return { clamp_is_retracted: false, clamp_is_extended: true };
}
return { clamp_is_retracted: true, clamp_is_extended: false };
}
Configurez le chemin du modèle dans Settings -> Emulation -> Plant Config Path (automationview.emulation.plantConfigPath) ou référencez-le directement dans un scénario de test .yaml.
.yaml)Les scénarios de test automatisent la stimulation des entrées, les conditions d'attente et les assertions sur votre projet et son modèle de procédé.
Créez un fichier .yaml dans le dossier tests/ de votre projet :
name: "Task A1 — Full Sorting Cycle"
project: ".."
cycle_ms: 10
plant: "../plant/line.mjs"
max_time: 120s
steps:
- set: { start_button: true }
- wait: 100ms
- set: { start_button: false }
- wait_until: "sorted_total >= 1"
timeout: 30s
- assert: "sorted_metal == 1"
message: "First metal part should be routed to the metal chute"
- expect_active: [" Coordination.WaitPart"]
| Clé d'étape | Exemple | Description |
|---|---|---|
set |
set: { start_btn: true, recipe_id: 2 } |
Affecter les valeurs indiquées à une ou plusieurs variables d'entrée |
pulse |
pulse: { start_btn: 100ms } |
Maintenir une variable booléenne à TRUE pendant la durée donnée, puis la remettre à FALSE |
force |
force: { sensor_a: true } |
Verrouiller une variable à une valeur forcée sur tous les cycles de scrutation |
release |
release: [sensor_a] |
Libérer les variables forcées afin qu'elles reprennent le contrôle normal du procédé ou de la séquence |
wait |
wait: 500ms |
Faire avancer la simulation pendant une durée fixe (ms ou s) |
wait_until |
wait_until: "done == true" |
Exécuter la simulation jusqu'à ce que la condition devienne TRUE (avec timeout optionnel) |
assert |
assert: "count == 3" |
Vérifier que l'expression vaut TRUE (avec message d'échec optionnel) |
expect_active |
expect_active: ["Main.Idle"] |
Vérifier que les étapes Sequence.StepName listées sont actuellement actives |
plantConfigPath