Difficultés SIOC de mon module magnetos

Questions de programmation / Offset FSUIPC et IOCP

Re: Difficultés SIOC de mon module magnetos

Messagede FiX » Ven 12 Aoû 2011 01:53

Bon du coup j'ai étudié un peu ton code et j'ai 2 question:

-Les lignes de code qui font que l'on déduit le "off", (if rotbothpos =0, if rotrpos=0, if rotlpos=0 alors fsmag =0), tu as choisis de les mettre dans la variable du switch rotLpos. C'est voulu ou l'on aurait très bien pu les mettre dans une autre variable comme rotRpos par exemple?

-Et alors je ne comprends pas du tout les 3 dernières lignes de code dans le start gratgrat

Var 0005, name PushStart, Link IOCARD_SW, Input 2
{
IF &PushStart = 1
{
IF &RotBothPos = 1
{
&FsMag = 4
}
}
IF &PushStart = 1
{
IF &RotBothPos = 0
{
IF &RotLPos = 1
{
&FsMag = 2
}
IF &RotBothPos = 1
{
&FsMag = 3
}
IF &RotRPos = 1
{
&FsMag = 1
}
IF &RotLPos = 0
{
IF &RotRPos = 0
{
IF &RotBothPos = 0
{
&FsMag = 0

}
}
}
}
}
}
Dernière édition par FiX le Ven 12 Aoû 2011 01:58, é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: Difficultés SIOC de mon module magnetos

Messagede FiX » Ven 12 Aoû 2011 01:55

Daniel a écrit:Donc un simple changement d'interrupteur va régler le problème.

Pour ce qui est du retour à la position both une fois le moteur démarré, moi ici il ne revient pas de lui même, alors voici le code modifier qui le fait revenir à la position Both une fois le moteur démarré.

Code: Tout sélectionner
// *****************************************************************************
// * Config_SIOC ver 3.4   -     By Manolo Vélez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : Magneto.txt
// * Date : 2011-08-11



Var 0001, name FsMag, Link FSUIPC_INOUT, Offset $0892, Length 2

Var 0002, name RotLPos, Link IOCARD_SW, Input 16
{
  IF &RotLPos = 1
  {
    &FsMag = 2   
  }
}

Var 0003, name RotRPos, Link IOCARD_SW, Input 11
{
  IF &RotLPos = 0
  {
    IF &RotRPos = 0
    {
      IF &RotBothPos = 0
      {
        &FsMag = 0   
      }
    }
  }
  IF &RotRPos = 1
  {
    &FsMag = 1   
  }
}

Var 0004, name RotBothPos, Link IOCARD_SW, Input 9
{
  IF &RotBothPos = 1
  {
    &FsMag = 3   
  }
}

Var 0005, name PushStart, Link IOCARD_SW, Input 2
{
  IF &PushStart = 1
  {
    IF &RotBothPos = 1
    {
      &FsMag = 4   
    }
  }
  IF &PushStart = 1
  {
    IF &RotBothPos = 0
    {
      IF &RotLPos = 1
      {
        &FsMag = 2   
      }
      IF &RotBothPos = 1
      {
        &FsMag = 3   
      }
      IF &RotRPos = 1
      {
        &FsMag = 1   
      }
      IF &RotLPos = 0
      {
        IF &RotRPos = 0
        {
          IF &RotBothPos = 0
          {
            &FsMag = 0   
          }
        }
      }
    }
  }
}

Var 0006, name Eng1Flag, Link FSUIPC_IN, Offset $0894, Length 2
{
  IF &Eng1Flag = 1
  {
    IF &RotBothPos = 1
    {
      &FsMag = 3   
    }
  }
}

Il te restera plus qu'à appliquer le tout pour le 2e moteur.

Bon vol...

Daniel


merci affiche merci affiche merci affiche (de t'être couché aussi tard!!)
Et comment tu expliques qu'avec le même code, chez moi , ça revient bien sur both après le start et pas chez toi? etonneyeux
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: Difficultés SIOC de mon module magnetos

Messagede Daniel » Ven 12 Aoû 2011 02:05

Je viens de pensé, vérifie si ton interrupteur n'a pas des moments ou il perdrait ça valeur même une fois en position. La perte de la position peut-être que de quelques millisecondes seulement, celà est largement suffisant pour la relecture du script SIOC, donc le retour en position Both dans Fs.

SIOC fonctionne par évènement, donc, si il y a un changement et seulement si il y a un changement de valeur d'une des variables, il exécute de nouveau le script. Autrement, le script demeure en pause sans qu'il y ait relecture de ce dernier.

Les lignes qui font la déduction de la position OFF sont placé à cette endroit volontairement et ils ne fonctionneraient pas si placé ailleurs. Comme la position Right sur le magnéto est la position suivant la position Off, quand tu tournes l'interrupteur, il passera donc sur cette position avant d'arrivé à la position OFF lors du chemin de retour. SIOC, comme je le disais fonctionnement par évènement, donc à chaque fois qu'il y a un changement de valeur d'une des variables il relit le script. C'est donc à la position (Right) que la valeur de l'interrupteur est la dernière changé. En gros c'est la dernière position à changer de valeur avant que tous les positions soit à la valeur 0.

Les 3 dernières ligne dit ceci: si le moteur est démarré (Eng1Flag = 1) et que l'interrupteur est en position Both (RotBothPos = 1) alors mets le offset de Fs à la valeur 3 (FsMag = 3)

@+
Daniel.

PS: il est encore tôt chez moi chouettedoights chouettedoights presque 20:10
Pour de la vraie simulation !
http://www.simul-air.com
Avatar de l’utilisateur
Daniel
 
Messages: 89
Inscription: 20/05/09
Localisation: Laval, Canada

Re: Difficultés SIOC de mon module magnetos

Messagede tabar57 » Ven 12 Aoû 2011 11:55

Salut,

Moi aussi je viens de penser à quelque chose qui m'est arrivé, on ne sait jamais.
Est ce que dans ton code tu n'aurais pas pas une entrée déjà attribuée, un numéro input en double ?
Quand le code devient conséquent çà arrive et dans ce cas une action sur autre chose amène ce genre de C...
On ne sait jamais, sinon ton rotacteur est sûrement de mauvaise qualité.

Courage

Bernard
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine

Re: Difficultés SIOC de mon module magnetos

Messagede Michael Blackbird » Dim 29 Jan 2012 16:01

Fix, tu as du résoudre ton problème depuis cet été, mais j'ai eu le même pb que toi concernant le plantage de SIOC. Je pense à cause d'une valeur qui ne revenait pas à 3.

J'ai modifié mon code et tout fonctionne. Je suis aussi dans ton cas avec une broche non câblé du commutateur. C'est une astuce car je n'ai pas de commun. en fait le contact se déplace entre les broches et j'ai dû choisir les broches pour les positions OFF, L et BOTH et déduire la R de l'absence des autres.

Voici le code :

Code: Tout sélectionner
//---------- MAGNETOS ------------------------------
Var 1018, name sw_MAGNETO_L, Link IOCARD_SW, Input 18 //
{
  CALL &calc_Magnetos
}
Var 1019, name sw_MAG_BOTH, Link IOCARD_SW, Input 19 //
{
  CALL &calc_Magnetos
}
Var 1024, name sw_MAG_OFF_FTR, Link IOCARD_SW, Input 24 // Magneto OFF / Fuel Trans DA40
{
  CALL &calc_Magnetos
}
Var 1053, name sw_DEMARREUR, Link IOCARD_SW, Input 53 //
{
  CALL &calc_Magnetos
  CALL &calc_Alarmes
}

Var 7019, name fs_MAGNETO, Link FSUIPC_INOUT, Offset $0892, Length 2 // Magnetos - Démarrage
{
  CALL &calc_Magnetos
}

//---------- Magnetos - Démarrage ----------------------------------------------
Var 6000, name calc_Magnetos, Link subrutine
// Prop: 0=Off, 1=right, 2=Left, 3=Both, 4=Start
{
  IF &sw_DEMARREUR = 1 // BP démarreur
  {
    IF &fs_MAGNETO > 1 // Si Magneto gauche ou les deux
    {
      &fs_MAGNETO = 4 // START
    }
  }
  ELSE
  {
    IF &sw_MAG_OFF_FTR = 1
    {
      &fs_MAGNETO = 0 // OFF   
    }
    ELSE
    {
      IF &sw_MAGNETO_L = 1     
      {
        &fs_MAGNETO = 2 // GAUCHE
      }   
      ELSE
      {
        IF &sw_MAG_BOTH = 1
        {
          &fs_MAGNETO = 3 // BOTH
        }
        ELSE // Si pas gauche, ni OFF, ni BOTH alors...
        {
          &fs_MAGNETO = 1 // DROITE
        }
      }
    }
  }
}




Ma modif a consisté en gros à réaffecter à une autre valeur fs_MAGNETO après qu'elle ait été à 4 pendant le démarrage.

D'autre part, dans mon cas, un DR400 (pas encore vérifié un PA28 ou un C172), on peut démarrer sur la magnéto gauche car lorsqu'on actionne le démarreur, la magnéto droite se déconnecte mécaniquement. Donc ça peut démarrer sur BOTH et GAUCHE.
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)

Re: Difficultés SIOC de mon module magnetos

Messagede FiX » Dim 29 Jan 2012 20:21

J'avais arrêté le SIOC et repris la construction juste après cet épisode et je n'ai pas retouché au code depuis et évidement j'ai tout oublié... murrouge
Il va d'ailleurs falloir que je m'y replonge d'ici peu.
Je me souviens juste que j'avais résolu les problème des magnetos avec une entrée non câble mais que j'avais du changer mes soudures sur le rotatcteur de telle sorte que l'entrée non câblée corresponde à la position off je crois.
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: Difficultés SIOC de mon module magnetos

Messagede stevelep » Lun 30 Jan 2012 00:58

Hello,

Si tu n'as pas câblé le "off" tu peux le déduire par rapport à l'état des autres positions:
Si elles sont toutes à zéro, tu est sur off.

Tu peux le faire avec une série de IF imbriqué, mais le plus simple c'est l'addition mathématique
des variables. Si tu additiones les variables de ton rotacteur, le total sera égal à zéro si tu est sur off:

L0 = &sw_left + &sw_right
L0 = L0 + &sw_both

&sw_off = CHANGEBITN 0 L0

Si l'addition des 3 switch = 0 -> sw_off = 1
Si l'addition > 0 -> sw_off = 0

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

Re: Difficultés SIOC de mon module magnetos

Messagede Michael Blackbird » Lun 6 Fév 2012 18:05

Je me rends compte d'un problème avec ce qui a été dit.

En faisant ainsi et par l'une ou l'autre des méthodes par déduction ou par addition, mon contact glissant du commutateur rotatif pour les magnetos aussi ne court-circuite plus de contact en position intermédiaire lorsque je suis entre BOTH et L.

J'ai dû faire un choix pour le câblage et je pense que c'était le seul possible avec ce type de commutateur sans commun. J'ai beaucoup cherché des commut 4 positions à clé et le seul était un modèle de C&K.

(N° de broche) position (N° de broche) et de gauche à droite pour la position de la clé, c'est à dire OFF -> R -> L -> BOTH

(8) OFF (1) R (2) L (3) BOTH (4)

J'ai donc câblé le "GND" d'un groupe d'entrée sur les broches 8 et 3, et mis en entrée les broches 1,2 et 4. Ce qui me permet de détecter les positions OFF, L et BOTH et d'en déduire R. Sauf que lorsque je suis entre L et BOTH, je n'ai aucune broche court-circuitée et donc j'ai un R qui apparait un court moment mais qui peut-être gênant. Normal...

Il y aurait une solution par temporisation pour laisser le temps de manoeuvrer le commut, mais je n'y arrive pas avec cette programmation par évènement. Si quelqu'un a déjà eu à traiter ce type de pb....
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)

Re: Difficultés SIOC de mon module magnetos

Messagede Michael Blackbird » Lun 6 Fév 2012 22:49

En modifiant mon code comme suit, ça a l'air de fonctionner. Bien sur si je fais un mouvement trop lent...

Code: Tout sélectionner
Var 6000, name calc_Magnetos, static, Link subrutine
// Prop: 0=Off, 1=right, 2=Left, 3=Both, 4=Start
{
  IF &sw_DEMARREUR = 1 // BP démarreur
  {
    IF &fs_MAGNETO > 1 // Si Magneto gauche ou les deux (magneto droite déconnectée pour le démarrage)
    {
      &fs_MAGNETO = 4 // START
    }
  }
  ELSE
  {
    // temporisation de stabilisation du contact glissant du commutateur
    // pour éviter détection position droite aux passages entre BOTH et L
    &Magnetos = DELAY 1 30 // le code associé à "Magneto" sera éxécuté après un délai de 0.3s
  }
}

Var 0060, name Magnetos, static // exécution après un délai pour stabiliser le contact du commutateur
{
  IF &sw_MAG_OFF_FTR = 1
  {
    &fs_MAGNETO = 0 // OFF   
  }
  ELSE
  {
    IF &sw_MAGNETO_L = 1     
    {
      &fs_MAGNETO = 2 // GAUCHE
    }   
    ELSE
    {
      IF &sw_MAG_BOTH = 1
      {
        &fs_MAGNETO = 3 // BOTH
      }
      ELSE // Si pas gauche, ni OFF, ni BOTH alors...
      {
        &fs_MAGNETO = 1 // DROITE
      }
    }
  }
  &Magnetos = 0
}
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)

Précédente

Retourner vers Programmation Sioc





Qui est en ligne

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