Problème code pour le réglage de l'altitude et VS du PA

Questions de programmation / Offset FSUIPC et IOCP

Problème code pour le réglage de l'altitude et VS du PA

Messagede FiX » Sam 27 Oct 2012 14:59

J'ai un petit problème avec mon script pour l'encodeur du pilote auto.
Il doit régler l'altitude du pilote auto et lorsque l'on presse le switch, il doit alors régler la vitesse verticale du pilote auto.

-Pour l'altitude, ça fonctionne, mais j'aimerais quand même améliorer quelque chose:
Là, avec ce code, l'altitude est limitée à 21000 pieds (c'était voulu) mais elle tourne en boucle, c'est à dire que que si je suis à 100 pieds et que je diminue d'un cran, je ne suis pas à 0 mais je me retrouve à 21000pieds.
Je ne sais pas si l'on pourrait éviter ça avec la fonction rotate?
Mais bon, à la limite, c'est pas vraiment embêtant.

-Pour la VS, là c'est le vrai problème:
Je voudrais donc régler la VS par incrément de 100 pieds/min, entre -3000 et +3000.
Avec mon code, déjà , ça ne limite à 3000pieds (pourtant dans le code, 30*100, ça devrait faire 3000) et ça ne fonctionne que dans les positifs (ça descend dans le négatif, mais n'importe comment).
Et surtout le gros problème que je ne comprends pas du tout, c'est que lorsque je suis dans une caleur négative de VS, le fait de régler l'altitude (sans toucher à la VS) va me faire repasser la VS en positive.
Et je ne vois pas du tout, au niveau des variables de mon code, ce qui fait que l'altitude puisse avoir une influence sur la VS.
Je ne vois pourtant pas de variable commune (à moins que ce soit les L0 qui fassent le chantier) donc c'est probablement que je n'ai pas vraiment compris l'utilisation de la fonction rotate.

Code: Tout sélectionner
Var 0514, name AP_ALT, Link FSUIPC_INOUT, Offset $07D4, Length 4     // Altitude pilote auto en mètres x 65536

Var 0515, name AP_VS, Link FSUIPC_INOUT, Offset $07F2, Length 2     // VS du pilote auto en ft/min

Var 0516, name cts_ap, Link IOCARD_ENCODER, Input 41, Aceleration 1, Type 2     // encodeur du pilote auto
{
  IF &sw_ap_alt = 1
  {
    L0 = &cts_ap * -100
    &AP_VS = ROTATE -30 ,30 ,L0
  }
  ELSE
  {
    L0 = &cts_ap * -30.48
    &calc_ap_alt = ROTATE 0 ,6400 ,L0
  }
}

Var 0517, name calc_ap_alt     // conversion de l'altitude du PA en feet
{
  L0 = &calc_ap_alt * 65536     // en mètres
  &AP_ALT = L0   
}

Var 0518, name sw_ap_alt, Link IOCARD_SW, Input 36     // switch de l'encodeur du pilote auto
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede stevelep » Sam 27 Oct 2012 18:50

La fonction ROTATE est une fonction LIMIT bouclée sur elle même. Si tu veux pas que ça tourne, il faut utiliser LIMIT.
Tu n'as qu'à remplacer le mot ROTATE par LIMIT pas besoin de changer les paramètres, les 2 fonctions sont pareilles.

Concernant les valeur négatives: copie de ma réponse au post de HIrem


Curieux, mais peut être évident pour certains, si je sélectionne des vitesses positives, alors la variable $07F2 affiche bien des vitesses correspondantes mais si je passe en négative : -100 -->65436 est affiché..

Ca c'est tout à fait normal, c'est le codage binaire pour des valeurs négatives (typiquement la VSI)
Dans le SIOC, il faut rajouter TYPE 1 pour convertir la valeur

Type By setting 1, we force a binary to signed integer conversion. The value stored in the variable is signed.
Var 0015, Link FSUIPC_INOUT, Offset $02CC, TYPE 1

Voilà

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

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede FiX » Sam 27 Oct 2012 22:24

Merci Bob,c'est plus clair, je vais tester ça la semaine prochaine.
Pour les valeurs négatives, j'avais bien vu dans la console IOCP que l'on se retrouvait avec des 65436 etc..., mais bizarrement, la Vs affichée dans le cockpit était bien de -100 / -300 etc...
Par contre l'incrémentation variait (un coup ça passait de -100 à -300, la fois d'après de -200 à -600 par exemple.
Bon, de toute façon le problème des valeurs négatives vient de ce que tu viens d'expliquer, donc ça sera résolu.

Par contre, je ne comprends toujours pas pourquoi le réglage de l'altitude a une influence sur ma VS. gratgrat
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede stevelep » Sam 27 Oct 2012 22:34

L0 = &cts_ap * -100
&AP_VS = ROTATE -30 ,30 ,L0

Ton encodeur envoie des -100 +100 à chaque cliqueti mais ta valeur est limitée à +\- 30 !!!
La limite c'est celle de la variable ap_vs, le *100 c'est pour que l'encodeur la modifie de 100 en 100 à chaque détente.

L0 = &cts_ap * -100
&AP_VS = LIMIT -3000, 3000, L0

Me semble plus juste

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

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede FiX » Sam 27 Oct 2012 22:56

Alors c'est là que y'a un truc que je n'ai pas compris.
Voici comment je lis ça:

L0 = &cts_ap * -100
&AP_VS = ROTATE -30 ,30 ,L0


L'encodeur va donner la valeur 100, 30 fois de suite (dans un sens ou dans l'autre) à la variable $AP_VS.
Par exemple, je tourne de 2 crans => $AP_VS = 200
Si je tourne 30 fois de suite => $AP_VS = 3000 (donc 3000 pieds/min)

Donc c'est pas ça?
C'est juste une limite maximum et minimum que pourra prendre la variable $AP_VS, quelque soit le nombre de tours de l'encodeur?
Mais alors, c'est bizarre, à ce moment là avec mon code rotate -30, +30, ça voudrait dire que la VS ne pourrait pas dépasser -30 ou +30ft/min?
Pourtant, avec ce code, j'avais bien une incrémentation de 100 en 100 de 0 à 9000 pieds/min, ça fonctionnait très bien dans les valeurs positives.
C'est juste dans les négatifs que ça foirait (comme tu l'as expliqué plus haut, ça c'est normal).

Et surtout, quel rapport avec mon réglage d'altitude qui vient me faire le chantier dans ma VS alors que ça n'est pas le même offset? gratgrat
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede stevelep » Sam 27 Oct 2012 23:25

Le principe de l'encodeur c'est comme un interrupteur momentané (taster) qui envoie des +1 à une variable

donc à chaque détente:

variable = variable + 1 (ou -1)

il ne "donne" pas de valeur mais additionne une valeur +/-1 ou +/-100 selon ton code

La fonction LIMIT X,Y,Z est une façon pratique de résumer ce code

variable = variable + Z
IF variable <= X
variable = X
IF variable >= Y
variable = Y

Donc la LIMIT additionne le paramètre Z et bloque la valeur de la variable au min et au max
Si tu mets 0 pour le Z, la fonction se contente de limiter la variable entre X et Y
c'est très pratique pour les display pour éviter d'envoyer des valeurs avec plus de chiffre
que ne peux afficher un display en cas d'erreur de codage.

La fonction ROTATE fait pareil mais boucle les X et Y

variable = variable + Z
IF variable < X
variable = Y
IF variable > Y
variable = X

Tu vois que les X et Y sont croisés pour se rejoindre.

Concernant la VS du pilote automatique, tu as choisis un mauvais exemple, c'est en effet une des rares
variable de FS qui a un comportement exceptionnel et donc qui nécessite un code spécial
que je n'ai pas fait moi même mais que j'ai piqué dans le code du MPC737 hardware d'Opencockpits.

Voila le truc:

Var 0000, Value 0
{
&ap_counter = 0 // init autopilot
&ap_checker = TIMER 999 ,0 ,25 // active la subroutine
&d_vs = 0
}

Var 3131, name d_vs

Var 3122, name ec_vs, Link IOCARD_ENCODER, Input 61, Aceleration 2, Type 2 // VS encoder
{
L0 = &ec_vs * 100
&d_vs = LIMIT -3000 ,3000 ,L0
&ap_counter = 0
&fs_vsval = &d_vs
}
Var 3210, name ap_checker, Link SUBRUTINE
{
&ap_counter = &ap_counter + 1
IF &ap_counter > 10000
{
&ap_counter = 1000
}
ELSE
{
IF &ap_counter > 4
{
IF &fs_vsval <> &d_vs
{
&d_vs = &fs_vsval
}
}
}
}

Var 3211, name ap_counter
Var 3313, name fs_vsval, Link FSUIPC_INOUT, Offset $07f2, Length 2, Type 1, Value 0
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede FiX » Lun 5 Nov 2012 22:45

stevelep a écrit:Var 0000, Value 0
{
&ap_counter = 0 // init autopilot
&ap_checker = TIMER 999 ,0 ,25
&d_vs = 0
}

Var 3131, name d_vs

Var 3122, name ec_vs, Link IOCARD_ENCODER, Input 61, Aceleration 2, Type 2 // VS encoder
{
L0 = &ec_vs * 100
&d_vs = LIMIT -3000 ,3000 ,L0
&ap_counter = 0
&fs_vsval = &d_vs
}
Var 3210, name ap_checker, Link SUBRUTINE
{
&ap_counter = &ap_counter + 1
IF &ap_counter > 10000
{
&ap_counter = 1000
}
ELSE
{
IF &ap_counter > 4
{
IF &fs_vsval <> &d_vs
{
&d_vs = &fs_vsval
}
}
}
}

Var 3211, name ap_counter
Var 3306, name fs_apvs, Link FSUIPC_INOUT, Offset $07ec, Length 2, Value 0


Bon après une semaine a essayer pour une fois de dépatouiller le truc tout seul, je bloque là.

-Le début du code (var000), c'est bien à mettre dans la variable d'initialisation?

-L'offset $07ec, nommé fs-apvs, on le retrouve nulle part dans le code. gratgrat

-Par contre il y a une variable fs_vsval dans le code, mais qui n'est pas déclarée. Es-ce que fs_vsval est en fait fs_apvs?
Ou alors es-ce qu'il manque la déclaration de fs_vsval , dans ce cas, à quoi correspond-elle?

-La variable ap-checker est liée à une subrutine, mais cette subrutine n'est pas rappelée dans le code, alors où va t-elle servir?

-Et enfin, on utilise pas l'offset $07F2?? (qui est la valeur de la VS en feet/min)
Dernière édition par FiX le Lun 5 Nov 2012 23:46, édité 2 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede stevelep » Lun 5 Nov 2012 23:25

Bon après une semaine a essayer pour une fois de dépatouiller le truc tout seul, je bloque là.

C'est vrai que je l'ai posté comme ça, sans chercher à comprendre ...

-L'offset $07ec, nommé fs-apvs, on le retrouve nulle part dans le code. gratgrat


elle était en dessous, oublié de la mettre ... nondoightblanc

Var 3313, name fs_vsval, Link FSUIPC_INOUT, Offset $07f2, Length 2, Type 1, Value 0

-Par contre il y a une variable fs_vsval dans le code, mais qui n'est pas déclarée. Es-ce que fs_vsval est en fait fs_apvs?
Ou alors es-ce qu'il manque la déclaration de fs_vsval , dans ce cas, à quoi correspond-elle?


C'est la-même déclarée 2x et inutilisée, je l'ai pas effacée ... dsl etonneyeux

-Et enfin, on utilise pas l'offset $07F2?? (qui est la valeur de la VS en feet/min)

c'est bien fs_vsval ...

-Le début du code (var000), c'est bien à mettre dans la variable d'initialisation?
-La variable ap-checker est liée à une subrutine, mais cette subrutine n'est pas rappelée dans le code, alors où va t-elle servir?


Oui c'est bien l'INIT et comme tu le vois ap_checker est lié à un TIMER dans l'init, donc la subroutine
est activée tous les x temps par ce TIMER...

Je corrige le code sur mon post blemeblanc

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

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede FiX » Lun 5 Nov 2012 23:55

En fait ça correspond à ce que j'avais déjà testé cette semaine, c'est à dire remplacer fs_apvs par fs_vsval et l'offset $07CE par $07F2.
Et le problème, c'est que malheureusement ce code déconne... gratgrat

Je viens de re-tester pour vérifier (j'en ai fait tellement là...), ça déconne bien dans les valeurs négatives.
Dernière édition par FiX le Mar 6 Nov 2012 00:08, édité 2 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème code pour le réglage de l'altitude et VS du PA

Messagede FiX » Mar 6 Nov 2012 00:07

En fait je viens de voir que c'est en dessous de -300ft/min que ça déconne , ça se repasse d'un seul coup à +3000.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Suivante

Retourner vers Programmation Sioc





Qui est en ligne

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