Page 1 sur 1

code sioc DME1_DME2

MessagePosté: Mar 8 Nov 2022 12:58
de trajector
Bonjours à tous,

J'ai besoin d'aide :
voici mon code sioc :


Var 0000, Value 0

Var 0011, name swap_DME, Link IOCARD_SW, Input 48, // swicht passage DME1_DME2

Var 0012, name speed_DME_d, Link IOCARD_DISPLAY, Digit 14, Numbers 3 // sortie display speed

Var 0013, name dist_DME_d, Link IOCARD_DISPLAY, Digit 20, Numbers 3 // sortie display distance

Var 0014, name time_DME_d, Link IOCARD_DISPLAY, Digit 26, Numbers 3 // sortie display time

Var 0016, name DME1_dist, Link FSUIPC_IN, Offset $0300, Length 2 // distance DME1 en nm*10
{
IF &swap_DME = 0
{

&dist_DME_d = &DME1_dist
}
ELSE
{
&dist_DME_d = &DME2_dist
}
}

Var 0019, name calc_spd_DME1 // affiche la vitesse DME1 en kt
{
IF &swap_DME = 0
{
&speed_DME_d = &calc_spd_DME1
}
ELSE
{
&speed_DME_d = &calc_spd_DME2
}
}

Var 0020, name DME1_speed, Link FSUIPC_IN, Offset $0302, Length 2 // vitesse DME 1 en kts*10
{
L0 = &DME1_speed / 10
&calc_spd_DME1 = L0
}

Var 0024, name calc_time_DME1
{
IF &swap_DME = 0
{
&time_DME_d = &calc_time_DME1
}
ELSE
{
&speed_DME_d = &calc_time_DME2
}
}



Var 0025, name DME1_time, Link FSUIPC_IN, Offset $0304, Length 2 // time to station DME1 en sec*10

{
L0 = &DME1_time / 600 // time to station en minutes

&calc_time_DME1 = TRUNC L0
}



// ****************************************************************

Var 0030, name DME2_dist, Link FSUIPC_IN, Offset $0306, Length 2 // distance DME2*10
{
IF &swap_DME = 0
{

&dist_DME_d = &DME2_dist
}
ELSE
{
&dist_DME_d = &DME1_dist
}
}

Var 0031, name calc_spd_DME2 // affiche la vitesse DME2 en kt
{
IF &swap_DME = 0
{
&speed_DME_d = &calc_spd_DME2
}
ELSE
{
&speed_DME_d = &calc_spd_DME1
}
}

Var 0032, name DME2_speed, Link FSUIPC_IN, Offset $0308, Length 2 // vitesse DME2 en kts*10
{
L0 = &DME2_speed / 10
&calc_spd_DME2 = L0
}

Var 0033, name calc_time_DME2
{
IF &swap_DME = 0
{
&time_DME_d = &calc_time_DME2
}
ELSE
{
&speed_DME_d = &calc_time_DME1
}
}

Var 0034, name DME2_time, Link FSUIPC_IN, Offset $030A, Length 2 // affiche time to station DME2 en sec*10

{
L0 = &DME2_time / 600 // time to station en minutes

&calc_time_DME2 = TRUNC L0
}

Les calculs de temps, de vitesse et de distance fonctionnent bien.

Mon problème arrive quand je veux les transférer aux displays 7 digits: j'ai un résultat aléatoire qui passe, sans discontinuer de la DME1 à la DME2. Cela est dû, je m'en doute à l'utilisation et la position des conditions "IF" et "ELSE" dans le code. Il faudrait peut-être utiliser des "SUBRUTINE", mais je ne vois pas comment les placer.

Quelqu'un peut-il m'aider?

Avec mes remerciements

Jean-Gilles

Re: code sioc DME1_DME2

MessagePosté: Mar 8 Nov 2022 16:32
de A320 hérétique
jean-Gilles,

Normal ...

Supposons que $swap_DME soit à 0 (affichage DME1)

Au niveau de la variable 16, tu demandes que $dist_DME_d = $DME1_dist
et
au niveau de la variable 30, tu demandes que $dist_DME_d = &DME2_dist

Donc à chaque changement de la position de l'avion tu demandes à afficher la distance à DME1 et la distance à DME2 : ça clignote tristounet

Donc dans la variable 16, si inter sur DME1, affiche simplement DME1, et dans la variable 30, si inter sur DME2, affiche simplement DME2, idem pour les autres données vitesse et temps.

Michel
PS, tu devrais indenter ton code, les choses apparaitront plus clairement !

Re: code sioc DME1_DME2

MessagePosté: Mar 8 Nov 2022 18:39
de trajector
bonsoir,

merci Michel je n'avais pas vu cette erreur là.

J'ai donc donné la valeur 1 pour le swap_DME aux lignes 30 ,31 ,et 33. Le résultat est identique.
Je vais essayé de recomposé le code avec des "SUBRUTINE"

jean-Gilles

Re: code sioc DME1_DME2

MessagePosté: Mar 8 Nov 2022 20:01
de trajector
Bonsoir

Voici la nouvelle mouture et ça marche.


Var 0000, Value 0

// **************************************************************
// ********************* DISPLAY *****************************
// **************************************************************

Var 0011, name swap_DME, Link IOCARD_SW, Input 48, // swicht passage DME1_DME2

Var 0012, name speed_DME_d, Link IOCARD_DISPLAY, Digit 14, Numbers 3 // sortie display speed

Var 0013, name dist_DME_d, Link IOCARD_DISPLAY, Digit 20, Numbers 3 // sortie display distance

Var 0014, name time_DME_d, Link IOCARD_DISPLAY, Digit 26, Numbers 3 // sortie display time

// ****************************************************************
// ************************** DME1 ****************************
// ***************************************************************

Var 0016, name DME1_dist, Link FSUIPC_IN, Offset $0300, Length 2 // distance DME1 en nm*10
{
CALL &DME1_DME2
}
Var 0019, name calc_spd_DME1 // affiche la vitesse DME1 en kt
{
CALL &DME1_DME2
}

Var 0020, name DME1_speed, Link FSUIPC_IN, Offset $0302, Length 2 // vitesse DME 1 en kts*10
{
L0 = &DME1_speed / 10
&calc_spd_DME1 = L0
}

Var 0024, name calc_time_DME1
{
CALL &DME1_DME2
}

Var 0025, name DME1_time, Link FSUIPC_IN, Offset $0304, Length 2 // time to station DME1 en sec*10

{
L0 = &DME1_time / 600 // time to station en minutes

&calc_time_DME1 = TRUNC L0
}

// ****************************************************************
// ************************** DME2 ****************************
// ***************************************************************

Var 0030, name DME2_dist, Link FSUIPC_IN, Offset $0306, Length 2 // distance DME2*10
{
CALL &DME1_DME2
}

Var 0031, name calc_spd_DME2 // affiche la vitesse DME2 en kt
{
CALL &DME1_DME2
}

Var 0032, name DME2_speed, Link FSUIPC_IN, Offset $0308, Length 2 // vitesse DME2 en kts*10
{
L0 = &DME2_speed / 10
&calc_spd_DME2 = L0
}

Var 0033, name calc_time_DME2
{
CALL &DME1_DME2
}

Var 0034, name DME2_time, Link FSUIPC_IN, Offset $030A, Length 2 // affiche time to station DME2 en sec*10

{
L0 = &DME2_time / 600 // time to station en minutes

&calc_time_DME2 = TRUNC L0
}
Var 035, name DME1_DME2, Link SUBRUTINE
{
IF &swap_DME = 0
{
&dist_DME_d = &DME1_dist
&speed_DME_d = &calc_spd_DME1
&time_DME_d = &calc_time_DME1
}
ELSE
{
L0 = &DME2_dist / 10
L1 = TRUNC L0
&dist_DME_d = L1
&speed_DME_d = &calc_spd_DME2
&time_DME_d = &calc_time_DME2
}
}

Re: code sioc DME1_DME2

MessagePosté: Ven 11 Nov 2022 16:53
de PapaLima
Merci pour le partage du code qui marche merci affiche