Aller au contenu

Cycle de vie et défaillances

Modélisez la dégradation des actifs avec des étapes de cycle de vie et injectez des défaillances via des déclencheurs conditionnels et effets en cascade.

Les étapes de cycle de vie et les défaillances modélisent la dégradation à long terme et les modes de panne.

Les actifs progressent à travers des étapes de cycle de vie basées sur les heures de fonctionnement. Chaque étape applique des effets aux valeurs des membres, simulant l’usure réelle.

lifecycle:
stages:
- name: healthy
duration_hours: [4000, 7000]
effects: {}
- name: degraded
duration_hours: [1000, 2000]
effects:
vibration_baseline: { multiplier: 1.4 }
bearing_temperature: { offset: 8 }
- name: critical
duration_hours: [300, 700]
effects:
vibration_baseline: { multiplier: 2.0 }
bearing_temperature: { offset: 18 }
flow_rate: { multiplier: 0.85 }
  1. Chaque instance démarre dans la première étape avec des heures de fonctionnement aléatoires
  2. Le moteur suit les heures de fonctionnement basées sur le temps de simulation
  3. Quand les heures dépassent la durée de l’étape, l’actif passe à l’étape suivante
  4. Les durées d’étape sont randomisées dans la plage [min, max] par instance

Les effets modifient les valeurs de sortie des générateurs via : valeur * multiplier + offset

ChampDéfautDescription
multiplier1.0Mise à l’échelle multiplicative
offset0Décalage additif

Les effets s’appliquent à tout membre numérique référencé par son nom.

Utilisez une liaison pour exposer l’étape actuelle comme membre :

lifecycle_stage:
kind: variable
data_type: String
access: read
binding:
type: lifecycle-stage

Les défaillances modélisent des modes de panne spécifiques avec des déclencheurs, des effets et des durées.

faults:
- name: cavitation
trigger:
condition: "discharge_pressure < 2.5"
probability: 0.01
effects:
vibration_radial: { spike: 1.8, duration_ticks: 180 }
flow_rate: { multiplier: 0.75, duration_ticks: 180 }
motor_current: { offset: 3, duration_ticks: 180 }
- name: bearing_wear
trigger:
lifecycle_stage: degraded
probability: 0.004
effects:
vibration_axial: { multiplier: 1.4, duration_ticks: 600 }
bearing_temperature: { offset: 6, duration_ticks: 600 }
ChampDescription
lifecycle_stageÉvaluer seulement quand l’actif est dans cette étape
conditionExpression comme "pressure < 2.5" évaluée contre les valeurs des membres
probabilityProbabilité de déclenchement par tick (0 à 1)

Les déclencheurs peuvent combiner lifecycle_stage avec probability — la défaillance ne joue le dé que quand l’actif est dans l’étape spécifiée.

Les effets sont appliqués dans l’ordre : spike, puis multiplier, puis offset.

ChampDescription
spikeSpike multiplicatif (ex. 1.8 signifie 1,8x la valeur actuelle)
multiplierMise à l’échelle multiplicative continue
offsetDécalage additif
duration_ticksDurée de l’effet avant effacement automatique

Les effets sur les membres de type String court-circuitent — ils remplacent directement la valeur du membre.

Déclenchez des défaillances manuellement via le CLI ou l’API admin :

Via le CLI :

Fenêtre de terminal
miravo inject pump-001 cavitation

Via l’API admin :

Fenêtre de terminal
curl -s http://127.0.0.1:8080/commands \
-H 'content-type: application/json' \
-d '{"type":"triggerFault","instanceId":"pump-001","fault":"cavitation"}'

Effacer une défaillance :

Fenêtre de terminal
curl -s http://127.0.0.1:8080/commands \
-H 'content-type: application/json' \
-d '{"type":"clearFault","instanceId":"pump-001","fault":"cavitation"}'

Exposez l’état de défaillance comme membres :

fault_active:
kind: variable
data_type: Boolean
access: read
binding:
type: fault-active # true quand une défaillance est active
fault_count:
kind: variable
data_type: UInt16
access: read
binding:
type: fault-count # Nombre de défaillances actives
active_fault_code:
kind: variable
data_type: String
access: read
binding:
type: active-fault-code # Nom de la défaillance active
fallback: none
health_state:
kind: variable
data_type: String
access: read
binding:
type: health-state # Combine l'état de cycle de vie et de défaillance