| Comment programmer un poussoir de test ? RESOLU | |
|
|
Auteur | Message |
---|
razmott
Nombre de messages : 246 Date d'inscription : 15/03/2008 Localisation : Laroque des Albères (66)
| Sujet: Comment programmer un poussoir de test ? RESOLU Mar 6 Mai - 10:58 | |
| Bonjour à tous, Problème: je voudrais programmer un bouton poussoir pour tester mes alarmes. Quand on met le poussoir sur ON, tout s'allume, quand on le relâche, tout s'éteint. Si on teste le panneau d'alarmes alors que certaines alarmes sont allumées et d'autres éteintes, pour celles qui sont éteintes pas de problème, on les allume provisoirement avec le poussoir, on relâche et elles reviennent à leur état antérieur. Mais si une alarme est allumée, activer le poussoir ne fait rien de plus, mais le relâcher éteint l'alarme qui était allumée, avec SIOC, c'est toujours le dernier qui a parlé qui a raison. Comment faire pour que le test des alarmes les laisse dans leur état antérieur ?? Définir une condition "Si LED=1 > Inter sur OFF = 1 " ??? Ca me parait bien compliqué. Merci pour votre aide .
Claude
Dernière édition par razmott le Mar 6 Mai - 20:28, édité 1 fois | |
|
| |
tabar57
Nombre de messages : 125 Date d'inscription : 17/03/2008 Age : 68 Localisation : Doncourt les conflans Meurthe et moselle
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mar 6 Mai - 11:48 | |
| Salut Claude,
Ben effectivement je crois qu'il n'y a pas d'autres solution à mon sens que de ranger l'état de la led dans une variables temporaire pour la récupérer une fois le bouton relaché. Ca doit pouvoir se faire avec une subroutine pour éviter de trop "pisser " du code. Je n'en suis pas encore là sur mon B200, çà devrait venir ....
Bernard | |
|
| |
steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mar 6 Mai - 12:30 | |
| Il y a surement plein de façon de faire...mais effectivement si on veut limiter la longueur du code, pourquoi ne pas créer une routine d'affichage qui regroupe tous les voyants concernés :
Var 0001, name BpTEST, Link IOCARD_SW, Input 1 // Bouton test voyants { CALL &ScanLED }
Var 0010, name Led_FIRE, Link IOCARD_OUT, Output 10 // voyant alarme FIRE
Var 0011, name Led_PARKBRAKE, Link IOCARD_OUT, Output 11 // voyant PARKINBRAKE
Var 0100, name FIRE, Link FSUIPC_OUT, Offset $AE00, Length 2 // offset FIRE { CALL &ScanLED }
Var 0101, name PARKBRAKE, Link FSUIPC_OUT, Offset $AE02, Length 2 // offset PARKING BRAKE { CALL &ScanLED }
Var 9000, name ScanLED, Link SUBRUTINE // routine état des LED { &Led_FIRE = &BpTEST OR &FIRE &Led_PARKBRAKE = &BpTEST OR &PARKBRAKE }
inconvénient on rafraichit tous les voyants à chaque fois, mais avec la vitesse de sioc...
avantage, on peut rajouter facilement des voyants ( une ligne en plus dans la routine ) et aussi des conditions d'allumage...( genre si il n'y a pas de courant et que le voyant n'est pas totalement géré par le logiciel ou l'addon )
reste à voir si ça marche, j'ai écrit ça de tête.. | |
|
| |
icare11
Nombre de messages : 133 Date d'inscription : 17/03/2008 Age : 81 Localisation : 11800 Trèbes
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mar 6 Mai - 18:13 | |
| Bonjour Claude, Pourquoi ne fais tu pas comme pour le test des voyants du train. Un petit schéma.... A plus. JC | |
|
| |
razmott
Nombre de messages : 246 Date d'inscription : 15/03/2008 Localisation : Laroque des Albères (66)
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mar 6 Mai - 20:28 | |
| Steph, reste à voir si ça marche, j'ai écrit ça de tête..
Ta tête est bonne Steph, ça marche :D En fait, ton idée est de ne pas considérer que l'inter et la led, mais de faire intervenir la variable $... commandant la Led. L'inter de test ne va évidemment pas toucher à la variable, donc si cette variable prévoit que dans tous les cas la Led = la variable , la variable remettra la Led dans l'état antérieur, après l'intervention de l'inter. Le tout, sans doute est que la variable soit après l'inter dans le fichier de config .ssi, car je suppose que SIOC va lire les variables de la première à la dernière. En tous les cas ça marche, et comme tu le dis, à la vitesse de SIOC on ne constate absolument aucun retard.
Merci beaucoup, mes 46 alarmes vont fonctionner comme ça.
Jean Claude, merci pour ta suggestion, c'est bien sûr la première solution à laquelle j'ai pensé, mais je voulais éviter de mettre deux diodes par sortie.
Amitiés,
Claude | |
|
| |
Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 10:03 | |
| Salut Claude J'ai pris moi aussi une voie assez proche de ce que dit Steph. Je pars du principe que les voyant sont asservis d'une part à la présence de courant, et en d'autre part à l'appui du bouton Test (s'il y a du courant). La condition de courant est déterminée par une sous-routine, qui se base sur la tension du bus batterie (voir le post Tension de batterie non testable? - toujours pas vraiment résolu d'ailleurs). Cette routine met la variable &courant à 1 ou à 0 selon le cas et est appelée par toutes les variables qui modifient le courant. Pour chaque voyant, j'ai 2 variables: - l'une "temporaire" et sans "link" (d'où son préfixe "temp), qui mémorise la fonction que le voyant représente et qui est calculée par la variable correspondante, - l'autre linkée en output à la led physique. Ensuite une routine se charge d'allumer ou d'éteindre les leds selon le courant ou le bouton test. Cette routine est appelée dans chaque variable susceptible de modifier un voyant. La voici (les autres variables sont visibles dans le programme SIOC sur notre site www.simubaron.new.fr ) : Var 0340, name affich_Leds, Link SUBRUTINE // affichage leds { IF &courant = 0 // pas de courant, tout éteint { &led_train_tran = 0 &led_train_AV = 0 &Led_train_G = 0 &led_train_D = 0 &led_att_At1 = 0 &led_att_At2 = 0 &Led_start = 0 &led_gear_up = 0 &led_flaps_APH = 0 &led_flaps_down = 0 &led_trans_flap = 0 &led_door = 0 } ELSE { IF &sw_test = 1 // présence courant, test appuyé, tout allumé { &led_train_tran = 1 &led_train_AV = 1 &Led_train_G = 1 &led_train_D = 1 &led_att_At1 = 1 &led_att_At2 = 1 &Led_start = 1 &led_gear_up = 1 &led_flaps_APH = 1 &led_flaps_down = 1 &led_trans_flap = 1 &led_door = 1 } ELSE // présence courant test non appuyé, chaque led prend l'état mémorisé { &led_train_tran = &temp_led_GeTr &led_train_AV = &temp_led_GeFr &Led_train_G = &temp_led_GeLf &led_train_D = &temp_led_GeRi &led_att_At1 = &temp_led_alt1 &led_att_At2 = &temp_led_alt2 &Led_start = &temp_start &led_gear_up = &temp_led_gear &led_flaps_APH = &temp_flap_APR &led_flaps_down = &temp_flap_B &led_trans_flap = &temp_flap_T &led_door = &temp_led_door } Le gros avantage est que je peux, comme le dit Steph, rajouter autant de voyants que nécessaire, simplement en les ajoutant dans cette routine. J'utilise une autre routine proche pour les afficheurs 7 segments (la condition est en plus asservie à l'Avionics master, et chaque groupe d'afficheur à l'inter ON/OFF de la radio, transpondeur, etc. Mais tout ça, tu le savais déjà, et j'imagine que tu cherches plus simple... Pierre | |
|
| |
steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 10:41 | |
| Dommage qu'on ne puisse pas écrire :
&Led_FIRE = ( &BpTEST OR &FIRE ) AND &COURANT par exemple
Mais on peut aussi faire avec 2 ligne à la suite :
&Led_FIRE = &BpTEST OR &FIRE &Led_FIRE = &Led_FIRE AND &COURANT
ça doit le faire aussi...
Il y a plein de méthode, le plus dur est de ne pas perdre le fil....ça manque le papier perforé et les imprimantes à aiguilles... | |
|
| |
stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 11:23 | |
| Merci Steph,
Tu viens de m'apprendre quelque chose
Je savais pas qu'on pouvait utiliser les opérateurs logiques avec des variables non-boléene. J'utilisais des * et des + à la place.
C'est vrai que pour des conditions à multiples facteurs, il serait très pratique de pouvoir mettre plusieurs opérateurs sur la même ligne.
Si tu as encore d'autres trucs comme ca qui nous facilitent la vie, te gène pas de les publier.
BOB
PS tu sais pas comment on peux inverser une variable le plus simplement (passer de 1 à 0 ou 0 à 1, quand on a un switch soudé à l'envers par ex.)
tu peux le faire avec des IF ELSE (ca prend trop de lignes) ou en faisant -1 et en prenant l'ABS (c'est ce que j'utilise pour l'instant)
Mais y doit y avoir un truc plus simple ? | |
|
| |
steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 12:14 | |
| Bonjour Bob,
Helas non, car la fonction NOT ne fonctionne qu'avec les variables booléennes internes C0,C1&C2, et après on ne peut plus les utiliser mélangées avec des variables réelles !
ex :
C1 = &Led .... syntax error comme on disait avant ! C1 = &Led = 1 ça, ça marche !
C1 = NOT C1 aussi !
mais après on est coincé, le seul truc qu'on peut faire c'est un IF C1... retour à la case départ !
Et &Led_PITOT = &PITOT = 1..... re syntax error aussi !
En fait on ne peut utiliser que AND et OR avec des variables non-booléennes...suite à ta remarque je viens de le découvrir. (je teste sur sioc 3.3)
Comme quoi il y a encore des petites idées à suggérer à Manuel pour améliorer SIOC ?
edit: -1 et ABS....ben oui ç'est aussi une super idée en attendant !
Dernière édition par steph737 le Mer 7 Mai - 15:37, édité 1 fois | |
|
| |
razmott
Nombre de messages : 246 Date d'inscription : 15/03/2008 Localisation : Laroque des Albères (66)
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 15:20 | |
| Très instructif tout ça, vous m'apprenez beaucoup de choses. Je teste vos différentes propositions. Le problème n'est pas toujours simple car il y a parfois des variables qui donnent une LED=1 quand la variable = 0 (le voyant "Pitot OFF" par exemple), il y a aussi très souvent des LEDs d'alarme qui sont commandées par des subroutines, bref de quoi s'occuper un moment sur ce sujet. Merci à tous pour votre aide.
Claude | |
|
| |
Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 15:39 | |
| C'est bien pour ça qu'une variable intermédiaire permet de conserver le résultat de la routine ou de la variable qui allume la led. Ensuite, la routine d'affichage des leds doit être appelée APRES par chaque routine ou variable agissant sur une led.
Pierre | |
|
| |
patrickm
Nombre de messages : 14 Date d'inscription : 07/04/2008 Age : 71 Localisation : paris
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 15:47 | |
| Pour ton pb, je pense à une chose. il est inutile d'allumer une LED déjà allumée. pour laisser les alarmes en état, il suffit donc de tester l'alarme avant de l'allumer par le bouton poussoir. if alarmeuntel not on -> allumage par le bouton poussoir, sinon pas d'action et comme ça les alarmes déjà on restent en l'état.
Patrick | |
|
| |
razmott
Nombre de messages : 246 Date d'inscription : 15/03/2008 Localisation : Laroque des Albères (66)
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Mer 7 Mai - 22:21 | |
| Effectivement, Patrick, mais si tu écris : IF LED=0 > LED = INTER cela marche une fois, quand l'inter est mis sur ON, dans ce cas la LED s'allume. Mais quand on remet l'inter sur OFF, la LED est allumée, et donc la condition IF LED = 0 ne peut pas être remplie. Et la LED reste allumée. On peut y arriver, mais avec une collection de IF et ELSE. Pour le moment, je pense que le plus simple est la proposition de Pierre² et de Steph avec une variable intermédiaire, mais j'ai peut être mal compris ta proposition.
Claude | |
|
| |
patrickm
Nombre de messages : 14 Date d'inscription : 07/04/2008 Age : 71 Localisation : paris
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 12:48 | |
| tu as raison Claude
on ne peut pas se passer de variables intermédiaires pour conserver l'état des LEDs lorsque l'alarme sera ON la condition ne sera plus remplie et elle va rester dans l'état, cad allumée.
Patrick | |
|
| |
stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 12:54 | |
| Sur mon cockpit j'ai utilisé une petite astuce, j'ai mis le test au début de ma checklist quand tout est éteint. et j'utilise la sortie N° 56 qui allume toutes les LED et les displays. (il y a aussi la 59 pour les display)
BOB | |
|
| |
steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 12:57 | |
| - stevelep a écrit:
- j'utilise la sortie N° 56 qui allume toutes les LED et les displays.
(il y a aussi la 59 pour les display) C'est intégré à sioc ça ? jamais vu ! | |
|
| |
stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 13:02 | |
| Ecoute j'ai trouvé ca par hasard ...
Essaie de mettre sur ON la sortie 56 (ou 59) avec le controllador et tu verras.
BOB
extrait de mon code:
Var 8000, name light_test, Link IOCARD_OUT, Output 56 // test all outputs on Var 8001, name display_test, Link IOCARD_OUT, Output 59 // test all displays | |
|
| |
steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 13:07 | |
| Ok, vraiment bon à savoir, ça remet tout en question ! | |
|
| |
stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 13:21 | |
| C'est pas documenté mais vraisemblablement c'est une fonction test que Manuel Velez a implémenté dans son programme.
Y parait même qu'il y en a d'autres ...
notamment il semblerait qu'on peut utiliser le connecteur pour carte display (J1) et l'utiliser comme des outputs comme le (J2) sur une master ou t'as pas de carte display branchée évidemment. Ce connecteur J1 est en fait un connecteur output qui envoie des signaux à la carte display multiplexée comme une connection cable parallèle. Il y doit y avoir une astuce pour activer les sorties une à une. et utiliser la commande Link Iocard_output. Je crois me rappeller que les N° output sont dans les 1000. Mais je l'ai jamais testé.
Ca pourrait être intéressant car le nombre d'output (38+7) est assez limité si t'as un gros panneau annonciateur avec des LED bicolore ...
BOB
Faut qu'on écrive un livre "SIOC pour les nuls" et "Les secrets cachés d'Iocard" :D | |
|
| |
razmott
Nombre de messages : 246 Date d'inscription : 15/03/2008 Localisation : Laroque des Albères (66)
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 14:48 | |
| Bob, ça change tout évidemment ! Je vais tester tes entrées secrètes dès que j'ai un moment.
Claude | |
|
| |
razmott
Nombre de messages : 246 Date d'inscription : 15/03/2008 Localisation : Laroque des Albères (66)
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 23:14 | |
| Bob, ça marche effectivement, c'est très surprenant. J'ai essayé avec la sortie 56 , fictive puisqu'il n'y en a que 55 réelles, ça allume bien toutes les LEDs, mais il n'y a pas de miracle, si on teste le train au sol, avec les trois vertes sorties, à la fin du test la sortie 56 les éteint. Claude | |
|
| |
stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Jeu 8 Mai - 23:37 | |
| C'est sûr, mais pour le train il y a que 3 led donc quelques ligne de code normal avec 2 conditions comme steph l'as expliqué c'est pas un problème.
J'utilise le test complet au départ avec un cockpit cold éteint en début de check list, c'est pas très réaliste et ca fait un peu sapin de Noël mais la première fois pour un visiteur ca fait son petit effet :-)
BOB
PS j'ai fait qq test avec les output 1000- ça fait de drôle de choses, ça m'allume certaine led, ca m'envoie des chiffres dans les afficheurs, ca me mette tout des 1 ou des 2 et vers 1080 ça fait bugger le microcontrolleur de la carte display faut couper l'alim pour que ça reparte , marrant non. | |
|
| |
steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Ven 9 Mai - 11:24 | |
| Le test "lampes" est aussi utilisé en vol à l'occasion ( en réel, si il y a un doute sur l'état d'un voyant )
Moi je dis ça histoire de compliquer un peu la chose :lol!:
( ceci dit, les fabricants de voyants/boutons tels Korry par exemple se mettent aux leds, fini les ampoules grillées... ) | |
|
| |
stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU Ven 9 Mai - 12:45 | |
| Alors il te faut stocker l'état de tes LED dans une variables, un bit différent pour chaque sortie. quand tu presses le test tu copie la variable dans une autre, tu allume tout d'un coup en mettant la viable multibit = puissance de deux (2 + 4 + 8 + 16 + 32 ....) nb led ensuite tu éteins en remettant = 0 puis tu "paste" ta valeur stockée dans la variable.
BOB | |
|
| |
Contenu sponsorisé
| Sujet: Re: Comment programmer un poussoir de test ? RESOLU | |
| |
|
| |
| Comment programmer un poussoir de test ? RESOLU | |
|