Forum Flightgear France

Une communauté prend son envol

Vous n'êtes pas identifié(e).

Annonce

Futur nouvel inscrit, tu dois au préalable lire l'intégralité des 10 articles des règles, s'il te plaît. Tout nouveau compte qui ne respecte pas les règles sera supprimé par l'administration.

#26 22/10/2019 12:22:04

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonjour à tous,

ctesc356 a écrit :

si je comprends bien c'est dérivé de la pression hydraulique?

Exact. La propriété "engines/engine/oil-pressure-psi", qui n'est pas calculée par Yasim,  est recalculée à partir de la propriété "systems/hydraulics/psi-norm".

Il y a effectivement la possibilité de recalculer plus simplement cette pression en xml à partir des rpm moteur. Je le ferai certainement pour la prochaine version du Citation X.


Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#27 22/10/2019 14:34:43

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonjour,

J'ai juste simulé au travers d'un petit fichier nas la fonction manuelle set de /. Cela marche très bien mais je ne comprend pas le message qui apparaît au lancement de FG :

   35.36 [ALRT]:nasal      Nasal runtime error: function/method call on uncallable object
   35.36 [ALRT]:nasal        at /home/gerard/fgfs-dev/install/flightgear/fgdata/Nasal/globals.nas, line 119

Le fichier nasal est :

#Affectation de la pression huile

var oil_pressure = func {
 var oilp = 25.0;
 setprop ("engines/engine[0]/oil-pressure-psi",oilp);

 settimer (oil_pressure,0.1);
 }
setlistener ("/sim/signals/fdm-initialized",oil_pressure());

J'ai essayé de vérifier si le nom choisi n'était pas déjà utilisé en interne.


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

#28 22/10/2019 17:33:08

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Pression d’huile à 0 sur DR400-120 YASim

GR a écrit :

Cela marche très bien mais je ne comprend pas le message qui apparaît au lancement de FG :

   35.36 [ALRT]:nasal      Nasal runtime error: function/method call on uncallable object
   35.36 [ALRT]:nasal        at /home/gerard/fgfs-dev/install/flightgear/fgdata/Nasal/globals.nas, line 119

Erreur due au "setlistener".

Code corrigé :

var oil_pressure = func {
 var oilp = 25.0;
 setprop ("engines/engine[0]/oil-pressure-psi",oilp);

 settimer (oil_pressure,0.1);
 }
setlistener ("/sim/signals/fdm-initialized",func{oil_pressure()},0,0);

Le ",0,0" après la parenthèse n'est pas obligatoire mais il est judicieux de l'écrire car il permet quelques possibilités supplémentaires(1,0 ou 0,1 ou 1,1). Voir le wiki à ce sujet.

Il est bon également de déclarer les variables avant les fonctions : dans ta boucle générée par le settimer, la variable "oilp" est recrée à chaque itération, ce qui signifie que l'ancienne (de l'itération précédente) est mise dans le "garbage collector" (corbeille) d'où une perte de temps.
Ton code, pour être propre, devrait donc être

var oilp = nil;
var oil_pressure = func {
 oilp = 25.0;
 setprop ("engines/engine[0]/oil-pressure-psi",oilp);
print("oilp = ",getprop("engines/engine[0]/oil-pressure-psi"));
 settimer (oil_pressure,0.1);
}
setlistener ("/sim/signals/fdm-initialized",func{oil_pressure()},0,0); 

J'ai rajouté une ligne "print" qui permet de debugger le code et vérifier dans la console que la boucle fonctionne correctement


Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#29 22/10/2019 18:57:30

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonsoir,
Merci pour la correction mais 1) il y a encore le même message et 2) l'accolade fermante isolée avant les derniers arguments de setlistener est surprenante. Je l'ai supprimé, pensant à une erreur de frappe, mais cela ne change rien et en plus cela fait une parse error à la ligne correspondante.
Bien cordialement
GR


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

#30 22/10/2019 19:57:45

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Pression d’huile à 0 sur DR400-120 YASim

GR a écrit :

Merci pour la correction mais 1) il y a encore le même message et 2) l'accolade fermante isolée avant les derniers arguments de setlistener est surprenante. Je l'ai supprimé, pensant à une erreur de frappe, mais cela ne change rien et en plus cela fait une parse error à la ligne correspondante.

Bizarre, car je n'ai pas d'erreur en console chez moi. L'accolade fermante n'est pas isolée, elle correspond à une accolade ouvrante après "func"

setlistener ("/sim/signals/fdm-initialized",func { oil_pressure() },0,0);

Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#31 22/10/2019 21:00:24

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonsoir,
Je ne comprend pas : je viens de faire un copier - coller et le résultat est le même. De plus je ne vois pas l'accolade ouvrante correspondant à celle dans setlistener.


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

#32 22/10/2019 22:43:28

ctesc356
Membre
Inscription : 18/05/2010
Messages : 3 483

Re : Pression d’huile à 0 sur DR400-120 YASim

GR a écrit :

Je ne comprend pas : je viens de faire un copier - coller et le résultat est le même.

Il faut peut-être modifier aussi la ligne setlistener de "converTemp"

setlistener ("/sim/signals/fdm-initialized", func {converTemp()},0,0);


Intel i5-9400F, 16Go Ram, Nvidia GTX1660Ti, Linux Mint

Hors ligne

#33 22/10/2019 23:40:34

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonsoir,
Effectivement cela marche bien maintenant. Cette fonction setlistener est bien complexe et en plus apparemment il faut que dans toutes les routines nasal qui la mettent en oeuvre il y ait cohérence dans le passage de ses arguments. J'espère que la suite sera plus simple à appréhender. En tous cas merci encore pour votre aide.
Bien cordialement.
GR


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

#34 23/10/2019 8:38:52

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonjour à tous, bonjour GR,

GR a écrit :

Cette fonction setlistener est bien complexe et en plus apparemment il faut que dans toutes les routines nasal qui la mettent en œuvre il y ait cohérence dans le passage de ses arguments.

Non, elle est n'est pas complexe, elle est même simple et très pratique une fois qu'on en a compris le fonctionnement. smile

Il y a deux catégories d'utilisation :
1 - Au démarrage du système (pour ne pas avoir d'erreurs nasal) avec "/sim/signals/fdm-initialized". Une fois son travail accompli (système démarré), il est bon de l'enlever car elle ne sert plus à rien et prend du temps processeur. Pour cela, ton code devient :

var oilp = nil;
var oil_pressure = func {
 oilp = 25.0;
 setprop ("engines/engine[0]/oil-pressure-psi",oilp);
 settimer (oil_pressure,0.1);
}
var stl = setlistener ("/sim/signals/fdm-initialized",func {
   oil_pressure();
  removelistener(stl);
},0,0); 

2 - Pour capter un évènement qui change peu fréquemment comme dans ce cas (tiré de citationX.nas) :

setlistener(ApuRunning, func(n) {
  if (getprop(Bleed)>0) setprop(BleedAir,n.getValue());
  else setprop(BleedAir,0);
},0,0);

Dans ce cas, le "setlistener" reste actif en permanence et on ne l'enlève donc pas. Ici, le func(n) permet de récupérer la valeur de ApuRunning. C'est l'équivalent d'un getprop(ApuRunning). On envoie cette valeur dans setprop(BleedAir sous la forme n.getValue().
On aurait pu l'écrire :

setlistener(ApuRunning, func {
  if (getprop(Bleed)>0) setprop(BleedAir,getprop(ApuRunning));
  else setprop(BleedAir,0);
},0,0);

Pour les évènements qui changent très fréquemment, comme pour les rpm moteurs par exemple, on n'utilise pas de setlistener mais une boucle update avec un settimer.


Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#35 23/10/2019 15:10:08

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonjour,
Merci pour toutes ces précisions.
L'idée de lier la pression d'huile aux rpm est en effet séduisante et semble simple à mettre en oeuvre (quoique dans mon cas je crains le pire). Toutefois sachant qu'il ne s'agit que d'un affichage cela devrait suffire. Une question toutefois ; dans quelles conditions une courbe de réponse (rpm - pression huile) serait elle vraiment représentative de la réalité, courbe établie évidemment à partir des DR400 JSBSim ?
Bien cordialement
GR

PS1 : j'ai remarqué que dans le CitationX la propriété systems/hydraulics/psi-norm était toujours à 1 (d'où une pression d'huile figée à 50 psi). Cela m'a un peu surpris car j'avais cru comprendre que cette propriété était à la base de l'évaluation de la pression d'huile dans le cas de cet appareil YASim.

PS2 : il n'a pas été difficile de trouver une première courbe (oil-press/rpm) qui permet à l'aiguille de l'indicateur de se positionner correctement. Il reste ensuite le problème du remplacement de la propriété oil-press par la valeur interpolée dans le fichier xml. Faut il alors passer par quelques lignes nasal ?

Dernière modification par GR (23/10/2019 17:03:00)


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

#36 23/10/2019 17:27:39

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Pression d’huile à 0 sur DR400-120 YASim

GR a écrit :

Une question toutefois ; dans quelles conditions une courbe de réponse (rpm - pression huile) serait elle vraiment représentative de la réalité

La courbe de réponse rpm - pss d'huile ne sert qu'au démarrage du moteur. Ensuite, que le moteur soit au ralenti ou à pleine vitesse, la pression d'huile ne doit pas varier puisqu'elle est régulée par des clapets de décharge et de surpression.

GR a écrit :

j'ai remarqué que dans le CitationX la propriété systems/hydraulics/psi-norm était toujours à 1 (d'où une pression d'huile figée à 50 psi).

Elle croit de  0 à 1 pendant la montée en régime du turbofan au démarrage. Lorsque le turbofan est stabilisé au ralenti la propriété est à 1 et le reste même si le régime moteur augmente. C'est une propiété -norm ce qui veut dire qu'elle ne varie que de 0 à 1.


Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#37 23/10/2019 19:31:59

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonsoir,
Concernant le PS2 de mon message précédent la modification de la valeur de la propriété oil-pressure-psi peut elle être faite en nasal à l'intérieur du fichier xml via le bloc CDATA ?


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

#38 23/10/2019 19:46:48

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Pression d’huile à 0 sur DR400-120 YASim

GR a écrit :

Concernant le PS2 de mon message précédent la modification de la valeur de la propriété oil-pressure-psi peut elle être faite en nasal à l'intérieur du fichier xml via le bloc CDATA ?

Oui.


Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#39 25/10/2019 19:07:00

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonsoir,

J'ai fait quelques essais que vous trouverez probablement farfelus mais je suis bloqué malgré de nombreuses recherches sur les différents 'howto'. Voici donc les quelques modifications que j'ai apporté au fichier oil-press.xml :

      <blue>  0.04 </blue>
    </emission>
  </animation>

  <nasal>
   <load><![CDATA[

   var frpm-loc = func {
    setprop ("engines/engine[0]/oil-pressure-psi",getprop ("engines/engine[0]/rpm"));
    settimer (frpm-loc,0.1);
   }
   setlistener ("/sim/signals/fdm-initialized",func{frpm-loc()},0,0);
   frpm-loc ();
  ]]></load>
  </nasal>

  <animation> 
    <type>rotate</type>
    <object-name>needle</object-name>
    <property>/engines/engine[0]/oil-pressure-psi</property>
    <interpolation>
      <entry><ind>   0.0  </ind><dep>  0 </dep></entry> <!--  0 bar -->
      <entry><ind>   500. </ind><dep> 20 </dep></entry> <!--  2 bar -->
      <entry><ind>   750. </ind><dep> 30 </dep></entry> <!--  4 bar -->
      <entry><ind>  1200. </ind><dep> 40 </dep></entry> <!--  6 bar -->
      <entry><ind>  1600. </ind><dep> 50 </dep></entry> <!--  8 bar -->
      <entry><ind>  2500. </ind><dep> 60 </dep></entry> <!-- 10 bar -->
    </interpolation>

Si dans l’animation je met directement la propriété rpm en entrée cela permet d’avoir une position correcte de l’aiguille car j’ai changé la table d’interpolation. Mais la proprieté oil-pressure-psi reste à 0 et le voyant est toujours allumé.

Les quelques lignes nasal avaient alors pour but de forcer cette propriété à prendre la valeur interpolée qui semble correcte. Mais manifestement cela ne marche pas. Il y a trop d’éléments que je ne maîtrise pas.

Je pense que la fonction frpm-loc est appelée par FG car dans un essai précédent j’avais créé une autre propriété prenant les valeurs de rpm. Cette autre propriété apparaîssait alors dans l’arbre / mais avec  la mention ‘none’ qui normalement signifie qu’il s’agit d’un emplacement vide alors qu’il avait été rempli par un setprop.

Mon problème est donc 1) d'être sûr que la démarche est valable, 2) d'être vraiment sûr que la fonction créée est correctement utilisée (vraisemblabement non) et 3) de récupérer la valeur interpolée et de l’affecter à la propriété concernée.
Merci encore de votre aide.
Bien cordialement.
GR

PS la courbe oil-press vs rpm n'est qu'indicative : à partir de 1700 rpm la pression est comprise entre 50 et 55 psi.

Dernière modification par GR (25/10/2019 23:21:53)


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

#40 26/10/2019 18:43:52

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonjour à tous, bonjour GR,

Pour faire simple, voici ce que je te propose :
1 - calcul de la propriété "engines/engine/oil-pressure-psi" par un setlistener à mettre dans "dr400.nas" vers la ligne 342 (avant"# Global loop function")

  setlistener("engines/engine/running", func(n) {
    if (n.getValue()) interpolate("engines/engine/oil-pressure-psi",72.5,5);
    else interpolate("engines/engine/oil-pressure-psi",0,5);
  },0,0);

Les "interpolate" servent à faire monter ou descendre la pression moins brutalement. 72.5 est la valeur à atteindre en 5 secondes.
J'utilise un setlistener car la propriété "running" ne change que sur arrêt/démarrage moteur, donc inutile d'utiliser un "update" ou un "settimer" qui font perdre du temps de calcul.

2 - fonctionnement de l'indicateur qui est en bars. A modifier dans "oil-press.xml".

  <animation> 
    <type>rotate</type>
    <object-name>needle</object-name>
    <property>engines/engine[0]/oil-pressure-psi</property>
    <interpolation>
      <entry><ind>0</ind><dep>0</dep></entry> <!--  0 bar -->
      <entry><ind>72.5</ind><dep>32</dep></entry> <!--  5 bar -->
    </interpolation>
    <center>
      <x-m> -0.001 </x-m>
      <y-m>  0.000 </y-m>
      <z-m> -0.015 </z-m>  
    </center>
    <axis> 
      <x> -1 </x>
      <y>  0 </y>
      <z>  0 </z>
    </axis>
  </animation>

Le voyant de pression d'huile fonctionne maintenant correctement (déclenchement à 14 psi).


Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#41 26/10/2019 23:06:53

GR
Membre
Inscription : 28/01/2019
Messages : 266

Re : Pression d’huile à 0 sur DR400-120 YASim

Bonsoir,

Merci pour les quelques lignes de correction. L'important pour moi maintenant est surtout de comprendre vraiment ce qu'il y a entre ces quelques lignes. J'ai donc encore pas mal de recherches et d'essais à faire. Concernant mes essais préliminaires j'aimerais bien aussi comprendre pourquoi cela n'a pas marché et notamment pourquoi la fonction locale frpm-loc n'était pas exécutée correctement (soit pas du tout, soit générant une propriété de type string avec le label none).
Bien cordialement.
GR

PS quelques heures plus tard

Il est clai que la recherche d'une documentation vraiment explicite est un vrai parcours du combattant. Pour essayer de comprendre je suis alors passé par des impressions intermédiaires dans dr400.nas et je ne comprend pas pourquoi la pression d'huile est toujours à 0 après le passage dans la fonction interpolate, bien qu'elle soit à 72.5 dans /. Dans l'utilisation qui en est faite ici cette fonction ne fait pas une interpolation : elle affecte seulement la valeur arbitraire de 72.5 (ou n'importe quelle autre) en 5 s pour simuler la montée en pression. Si la variable logique "running" est 1 la valeur de la pression est imposée, autrement elle vaut 0. Cela revient, à la proportionnalité de la réponse près dans le délai spécifié, à faire en interne ce que l'on fait en externe via set dans /.

Mon objectif était ici plutôt d'utiliser des propriétés transmises par YASim pour construire une valeur physique de cette pression. C'était le but de mes essais infructueux mais manifestement j'en suis encore très loin mais j'apprend ce qui est l'objectif principal.

PS2 Pour supprimer l'allumage du warning08 j'ai ajouté les lignes suivantes dans warning.xml

  <animation>
    <type>select</type>
     <object-name>warning08.on</object-name>  
     <condition>
      <not><property>engines/engine/running</property></not>
     </condition>
  </animation>

Les conditions ne sont probablement pas suffisantes mais cela marche.

Dernière modification par GR (27/10/2019 20:16:43)


Mb Asus Tuf Z390-plus Gaming, Core I9-9900kf,  Ram 32 Gb, Cg Nvidia Rtx 3070, Ssd 1 Tb, Hdd 2tb, W11 Home
Dell ALienware 15R3, Core i7-6700hq, Ram 32 gb,  Cg Nvidia gtx 1060, SSD 500 gb, HDD 1 tb, linux lmint 21.2

Hors ligne

Pied de page des forums