Garder une valeur lors d'un "Test"

Questions de programmation / Offset FSUIPC et IOCP

Re: Garder une valeur lors d'un "Test"

Messagede stevelep » Mer 13 Aoû 2014 23:27

Voici l'explication sur le fonctionnement des subrutines:

Ca à l'air compliqué quand on ne connait pas mais en fait c'est très simple.
Comme le SIOC est un programme orienté événement, c'est les évènements (modification de
la valeur d'une variable) qui active l'exécution du code écrit dessous.
Le problème c'est que si il n'y pas d'évènement le code est pas exécuté.
Si on utilise plusieurs conditions pour déclencher une action, il faudrait mettre une copie du code
sous chaque variable qui conditionne l'action sinon elle risque de pas être déclanchée.
Pour résoudre ce problème on centralise tout dans une subroutine.

Dans ton exemple on a 2 conditions (variable) qui vont agir sur la valeur de la gauge
- la quantité de fuel (variable tiré de FSUIPC)
- la position du switch (variable input)

Au lieu d'écrire un code en dessous de ces 2 variables on va simplement appeller une suroutine fonction "CALL"
et c'est dans la subrutine que l'on va calculer la valeur de la gauge par rapport au fuel et au switch

Pour simplifier voici les 3 variables utilisées:

Switch c'est le switch
Fuel c'est la valeur du fuel selon FSUIPC
Gauge c'est le servo de ta gauge

Sub_gauge c'est la subroutine

Var 0001, name Switch, Link IOCARD_SW, Input 94
Var 0002, name Fuel, Link FSUIPC_INOUT, Offset $0B74, Length 4
Var 0003, name Gauge, Link USB_SERVOS, Output 2, PosL 1, PosC 511, PosR 1023
Var 0010, name Sub_gauge, Link SUBRUTINE

J'envoie le switch et le Fuel sur la subroutine avec la fonction CALL

Var 0001, name Switch, Link IOCARD_SW, Input 94
{
CALL &Sub_gauge
}
Var 0002, name Fuel, Link FSUIPC_INOUT, Offset $0B74, Length 4
{
CALL &Sub_gauge
}

Dans la subrutine je code les conditions:
Si le switch = 1 la gauge affiche 0
Si le switch = 0 la gauge affiche le fuel

Var 0010, name Sub_gauge, Link SUBRUTINE
{
IF &Switch = 1
{
&Gauge = 0
}
ELSE
{
&Gauge = &Fuel
}
}

Voila c'est fini (évidemment j'ai pas codé les calculs de coefficient pour transformer les valeurs
de fuel en valeur de gauge pour le servo)

Avec cette façon de procéder, ta gauge affichera toujours la bonne valeur

BOB



Le code:

Var 0001, name Switch, Link IOCARD_SW, Input 94
{
CALL &Sub_gauge
}
Var 0002, name Fuel, Link FSUIPC_INOUT, Offset $0B74, Length 4
{
CALL &Sub_gauge
}

Var 0010, name Sub_gauge, Link SUBRUTINE
{
IF &Switch = 1
{
&Gauge = 0
}
ELSE
{
&Gauge = &Fuel
}
}
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Garder une valeur lors d'un "Test"

Messagede arcc » Jeu 14 Aoû 2014 00:03

Merci Bob pour ces précisions. Effectivement quand c'est expliqué comme ca, c'est comprehensible.
Donc, dans ton code, si j'ai bien dechiffré, lors du test on ne modifie pas la quantité de fuel dans le reservoir, mais on fait juste varier l'aiguille de la gauge.
Ce n'ai donc valable si j'utilise un servo .
Hors pour l'instant, mes gauges sont toutes affiché avec "panel builder". Donc pour faire varier l'aiguille de ma gauge, je suis obligé de faire varier la valeur dans l'offset (0B74)

Le code que j'ai indiqué hier fonctionne que si je met = 0

{
IF &Fuel_Tank_SW = 1
{
&Fuel_Tank_AV = 0
&Fuel_Tank_AR = 0
}

Si je change 0 par une autre valeurs (correspondant à 10% par exemple) cela ne fonctionne pas. Donc il y a encore du travail car si je fait le test moteur allumé, je met 0 dans les réservoirs et les moteurs se coupent obligatoirement.

En tout cas je suis content de comprendre un peut mieux ces fichu "subroutine".

A+
Christian
Un ancien sous-marinier qui a pris de la hauteur.
Avatar de l’utilisateur
arcc
 
Messages: 715
Inscription: 16/12/13
Localisation: La ou fini la terre (Finistere)

Re: Garder une valeur lors d'un "Test"

Messagede stevelep » Jeu 14 Aoû 2014 12:45

Ah si tu dois modifier la valeur du fuel dans FS, il faut la sauvegarder dans une autre variable
pour pouvoir la remettre comme avant.

La programmation est un peu plus compliquée et le risque c'est que
si tu presses le bouton en vol tu vas stopper le moteur (panne de fuel) !

Dans Panelbuilder tu utilise la connection SIMConnect ou FSUIPC ?

Car dans la version FSUIPC on peux modifier les paramètres des gauges
notamment l'offset auquel elles sont rattachées.
Donc tu peux remplacer l'offset original du fuel par un offset libre dans la gauge
et tu envoies les donnée de fuel toi même avec le SIOC (comme ma variable servo)
ainsi la gauge t'affiche le fuel ou zéro sans toucher à la quantité de fuel de FS ...

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Garder une valeur lors d'un "Test"

Messagede arcc » Jeu 14 Aoû 2014 18:48

Bonsoir

Dans Panelbuilder tu utilise la connection SIMConnect ou FSUIPC ?

Car dans la version FSUIPC on peux modifier les paramètres des gauges
notamment l'offset auquel elles sont rattachées.
Donc tu peux remplacer l'offset original du fuel par un offset libre dans la gauge
et tu envoies les donnée de fuel toi même avec le SIOC (comme ma variable servo)
ainsi la gauge t'affiche le fuel ou zéro sans toucher à la quantité de fuel de FS ...



C'est exactement ce qu'il faut que je fasse. J'ai déjà copier les Lvars des gauges moteur du Twin dans des Offset libres de Fsuipc, puis recuperer ces infos dans panel builder pour les gauges affichées sur mon deuxieme PC.
Je n'avais pas pensé à faire ca pour le "test reservoir".

si tu presses le bouton en vol tu vas stopper le moteur (panne de fuel) !


Oui ca m'ai arrivé hier lors d'un vol (heureusement à 12000 Ft) d'un autre coté c'est un bon entrainement...
Je vais chercher dans cette voie.

A+
Christian
Un ancien sous-marinier qui a pris de la hauteur.
Avatar de l’utilisateur
arcc
 
Messages: 715
Inscription: 16/12/13
Localisation: La ou fini la terre (Finistere)

Précédente

Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 11 invités