Page 3 sur 3

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Ven 12 Aoû 2011 01:53
de FiX
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

}
}
}
}
}
}

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Ven 12 Aoû 2011 01:55
de FiX
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

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Ven 12 Aoû 2011 02:05
de Daniel
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

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Ven 12 Aoû 2011 11:55
de tabar57
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

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Dim 29 Jan 2012 16:01
de Michael Blackbird
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.

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Dim 29 Jan 2012 20:21
de FiX
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.

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Lun 30 Jan 2012 00:58
de stevelep
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

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Lun 6 Fév 2012 18:05
de Michael Blackbird
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....

Re: Difficultés SIOC de mon module magnetos

MessagePosté: Lun 6 Fév 2012 22:49
de Michael Blackbird
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
}