code sioc DME1_DME2

Questions de programmation / Offset FSUIPC et IOCP

code sioc DME1_DME2

Messagede trajector » Mar 8 Nov 2022 12:58

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
trajector
 
Messages: 116
Inscription: 19/04/09

Re: code sioc DME1_DME2

Messagede A320 hérétique » Mar 8 Nov 2022 16:32

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 !
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 3080 Ti sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3239
Inscription: 2/09/12
Localisation: Pornic

Re: code sioc DME1_DME2

Messagede trajector » Mar 8 Nov 2022 18:39

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
trajector
 
Messages: 116
Inscription: 19/04/09

Re: code sioc DME1_DME2

Messagede trajector » Mar 8 Nov 2022 20:01

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
}
}
trajector
 
Messages: 116
Inscription: 19/04/09

Re: code sioc DME1_DME2

Messagede PapaLima » Ven 11 Nov 2022 16:53

Merci pour le partage du code qui marche merci affiche
Avatar de l’utilisateur
PapaLima
 
Messages: 789
Inscription: 14/04/16
Localisation: LFPG


Retourner vers Programmation Sioc





Qui est en ligne

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