Vous n'êtes pas identifié(e).
Pages 1
Bonjour à tous,
Une question aux connaisseurs en codage xml pour fs:
Je voudrais simuler une alarme centralisée qui en regroupe plusieurs autres, chacune d'elles pouvant isolément allumer le voyant alarme centralisé indépendamment ou ensemble.
Voici un exemple de code qui fonctionne:
<Select>
<Value> (A:GENERAL ENG FAILED:1,bool) (A:Eng1 oil temperature,celsius) 150 > OR </Value>
<Case Value="1">
<Image Name="Alarm_Gen.bmp" Bright="Yes">
</Image>
</Case>
</Select>
Voici celui qui ne fonctionne pas, le OR étant exclusif:
<Select>
<Value> (A:GENERAL ENG FAILED:1,bool) (A:GENERAL ENG FAILED:2,bool) (A:ELECTRICAL GENALT BUS VOLTAGE:1,volts) 20 < (A:Eng2 oil temperature,celsius) 150 > (A:Eng1 oil temperature,celsius) 150 > (A:Eng1 oil pressure,PSI) 10 < (A:Eng2 oil pressure,PSI) 10 < OR </Value>
<Case Value="1">
<Image Name="Alarm_Gen.bmp" Bright="Yes">
</Image>
</Case>
</Select>
Existe-t-il un moyen de faire fonctionner cette alarme regroupée?
Merci d'avance,
Bernard.
Hors ligne
Bonjour Bernard,
Selon moi, il faudrait juste utiliser plusieurs "or" :
<Select>
<Value> (A:GENERAL ENG FAILED:1,bool) (A:GENERAL ENG FAILED:2,bool) or (A:ELECTRICAL GENALT BUS VOLTAGE:1,volts) 20 < or (A:Eng2 oil temperature,celsius) 150 > or (A:Eng1 oil temperature,celsius) 150 > or (A:Eng1 oil pressure,PSI) 10 < or (A:Eng2 oil pressure,PSI) 10 < or </Value>
<Case Value="1">
<Image Name="Alarm_Gen.bmp" Bright="Yes">
</Image>
</Case>
</Select>
Je m'explique : le xml fonctionne selon un principe de colonnes, dans lesquelles sont empilées les valeurs.
Le résultat de la première comparaison est donc stockée, puis, au-dessus, la seconde...
Ensuite, les outils logiques "and" ou "or" ou "xor"... vont "dépiler" : ils prennent les deux valeurs du haut de la colonne, les enlèvent, puis placent une nouvelle valeur.
Si c'est "or", il placera un 1 en haut de la colonne, si une des deux conditions est vérifiée (égale à 1) ou si les deux sont vérifiées, dans le cas d'un "and". Ensuite, le second "or" refera le même boulot, avec le 1 placé juste avant, et la valeur du dessous.
Je précise que les comparateurs ">", "<", "=="... fonctionnent de la même manière : on place deux valeurs, puis ceux-ci "dépilent".
Pour clarifier tout ça (je sens que c'est confus ) rien ne vaut un petit schéma :
Bonne soirée,
Squirrel
Edit: L'image était un peu grande, j'en ai mis une plus petite.
Dernière modification par Squirrel (03/05/2013 21:10)
Hors ligne
Bonsoir,
Et merci pour la noisette Squirrel!
M'en vais tester tout ça...
A plus,
Bernard.
Hors ligne
très intéressant , merci!Un +1 pour la peine...
Le probleme:faudra que je relise ça demain je rentre d'un petit apero...=8
Hors ligne
Très bon exemple de cours de XML: je note cela dans mes tablettes, cela va servir très prochainement, sans aucun doute !
@+ Didier
W10 Pro 64b Build 22H2 - Boitier HAF 932 - Z390 STRIX-F - 9900K - 2x16 Go - NVidia 3060 Ti 8 Go - Alim Corsair 800W - Ecran 34" - NVidia Studio ready 536.23
P3D v5.4 = http://www.pilote-virtuel.com/img/members/53/P3Dv5HF-Reglages-A.jpg - MSFS Deluxe/STORE - X-Plane 12B
Hors ligne
Bonjour,
Merci à vous trois !
Je vais en profiter pour rajouter encore une chose : il existe aussi "not" :
Il place un 1 quand les deux conditions précédentes ne sont pas vérifiées ( = 0 ).
Pour simplifier, si on traduit en français ces opérateurs, ça donne :
"or" = si une des deux ...
"and" = si les deux ...
"not" = si aucune des deux ...
Encore une chose : on peut très bien tout "dépiler" juste avant le "if". Mais dans ce cas, n'oubliez pas que l'ordre du "dépilage" sera changé. Ce dernier point est très important si vous avez besoin d'opérateurs différents pour la même condition.
... C'est vrai que c'est plus simple à comprendre la tête reposée
Bonne journée,
Squirrel
Hors ligne
Bonjour à tous,
Je confirme le bon fonctionnement de la syntaxe proposée par Squirrel, avec chaînage des opérateurs booléens.
Merci! c'est dans la boite: L'alarme regroupée fonctionne. Maintenant il faudrait que je la fasse clignoter...
Bernard.
[EDIT] j'ai découvert que si l'on écrit tous les opérateurs booléens à la fin de la liste de variables à traiter, ça marche aussi!
Par exemple:
<value> (B) (C) or (D) or (E) or</value>
est équivalent à:
<value> (B) (C) (D) (E) or or or</value>
Non!Non! je ne bégaie pas!
Dernière modification par BERJU83 (05/05/2013 17:20)
Hors ligne
Pages 1