Aller au contenu principal

Exemple 2 - Distance parcourue à partir de la vitesse

Exemple 2 - Distance parcourue à partir de la vitesse :​

Tâche :​

Le kilométrage d'un véhicule VEH_DIST_KM, qui ne compte que des « km » entiers, doit être étendu à l'aide du signal de vitesse VEH_SPEED_KMPH de manière à disposer d'une résolution plus fine.

Solution :​

// Konstanten zur Einheitenumrechnung
uConv_kmph2mps = 1.0 / 3.6; // km/h -> m/s
uConv_m2km = 1e-3;        // m -> km

SPEED    = VEH_SPEED_KMPH * uConv_kmph2mps; // m/s
DIST_KM    = integrate(SPEED, {storage: 'sto_DIST'})
* uConv_m2km; // km
DIST_FRAC    = integrate(SPEED, posedge(VEH_DIST_KM), {storage: 'sto_DIST_frac'})
* uConv_m2km; // km
VEH_DISTFINE = VEH_DIST_KM + DIST_FRAC;     // km

Fonctions utilisées​

Explication :​

  • uConv_kmph2mps, uConv_m2km : des facteurs de conversion d'unités sont d'abord définis. Cela améliore la lisibilité du code qui suit. Il est avantageux de placer de telles définitions de manière centralisée au début du jeu de formules.

  • SPEED : le signal de vitesse du véhicule, mesuré en km/h, est d'abord converti en m/s. Cette vitesse est facile à intégrer.

  • DIST_KM : (bonus !) le kilométrage total peut être déterminé à partir du signal de vitesse. L'intégrateur integrate() ajoute à son intégrande la dimension temps avec l'unité s (seconde). On obtient ainsi la distance en m (mètres), qui est ensuite convertie dans l'unité cible souhaitée, le km.

  • DIST_FRAC : ici aussi, une distance est intégrée à partir du signal de vitesse. Elle est toutefois remise à zéro chaque fois que posedge() détecte, dans le compteur kilométrique du véhicule, un passage au kilométrage suivant.

  • VEH_DISTFINE : la distance du véhicule avec une résolution plus fine est obtenue en ajoutant la part déterminée précédemment à l'index du compteur du véhicule.