//
// Transpondeur
//
Var 2500, name fs_transp, Link FSUIPC_INOUT, Offset $0354, Length 2
{
&temp_tr_code = FROMBCD &fs_transp
CALL &calc_temp_dgs
}
Var 2501, name aff_tr_dg4, Link IOCARD_DISPLAY, Digit 96, Numbers 1 // unités transp
Var 2502, name aff_tr_dg3, Link IOCARD_DISPLAY, Digit 97, Numbers 1 // dizaines transp
Var 2503, name aff_tr_dg2, Link IOCARD_DISPLAY, Digit 98, Numbers 1 // centaines transp
Var 2504, name aff_tr_dg1, Link IOCARD_DISPLAY, Digit 99, Numbers 1 // milliers transp
Var 2506, name aff_tr_code, Link IOCARD_DISPLAY, Digit 96, Numbers 4 // code entier
Var 2508, name press_count, Value 0 // nombre d'appuis
Var 2509, name current_digit, Value 1 // numéro du chiffre à afficher
Var 2510, name val_dg // valeur chiffre courant
Var 2511, name temp_tr_dg1, Value 0 // valeur chiffre milliers
Var 2512, name temp_tr_dg2, Value 0 // valeur chiffre centaines
Var 2513, name temp_tr_dg3, Value 0 // valeur chiffre dizaines
Var 2514, name temp_tr_dg4, Value 0 // valeur chiffre unités
Var 2516, name temp_tr_code // code temporaire pendans saisie
Var 2517, name mem_tr_code // code précédent
Var 2518, name new_tr_code, Value 1 // à 0 pendant saisie, à 1 si nouveau code
Var 2520, name tr_push_0, Link IOCARD_SW, Input 127 // Push chiffre 0
{
IF &tr_push_0 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 0 // chiffre courant = 0
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code // calcul le nouveau code
CALL &use_code // vérifie si code entier
}
}
Var 2521, name tr_push_1, Link IOCARD_SW, Input 122 // Push chiffre 1
{
IF &tr_push_1 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 1 // chiffre courant = 1
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code
CALL &use_code
}
}
Var 2522, name tr_push_2, Link IOCARD_SW, Input 121 // Push chiffre 2
{
IF &tr_push_2 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 2 // chiffre courant = 2
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code
CALL &use_code
}
}
Var 2523, name tr_push_3, Link IOCARD_SW, Input 108 // Push chiffre 3
{
IF &tr_push_3 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 3 // chiffre courant = 3
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code
CALL &use_code
}
}
Var 2524, name tr_push_4, Link IOCARD_SW, Input 109 // Push chiffre 4
{
IF &tr_push_4 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 4 // chiffre courant = 4
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code
CALL &use_code
}
}
Var 2525, name tr_push_5, Link IOCARD_SW, Input 112 // Push chiffre 5
{
IF &tr_push_5 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 5 // chiffre courant = 5
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code
CALL &use_code
}
}
Var 2526, name tr_push_6, Link IOCARD_SW, Input 110 // Push chiffre 6
{
IF &tr_push_6 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 6 // chiffre courant = 6
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code
CALL &use_code
}
}
Var 2527, name tr_push_7, Link IOCARD_SW, Input 111 // Push chiffre 7
{
IF &tr_push_7 = 1
{
IF &press_count = 0
{
CALL &init_tempo
}
&val_dg = 7 // chiffre courant = 7
CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire
CALL &calc_temp_code
CALL &use_code
}
}
Var 2528, name vfr, Link IOCARD_SW, Input 116 // Push VFR
{
IF &vfr = 1
{
®ion = rotate 0,2,&vfr
&tr_mode = 1
if ®ion = 0
{
&fs_transp = TOBCD 7000 // met le code 7000
&temp_tr_dg1 = 7 // met les millers à 7
&temp_tr_dg2 = 0
&temp_tr_dg3 = 0
&temp_tr_dg4 = 0
CALL &affich_transp // et l'affiche
}
if ®ion = 1
{
&fs_transp = TOBCD 2000 // met le code 2000
&temp_tr_dg1 = 2 // met les millers à 7
&temp_tr_dg2 = 0
&temp_tr_dg3 = 0
&temp_tr_dg4 = 0
CALL &affich_transp // et l'affiche
}
if ®ion = 2
{
&fs_transp = TOBCD 1200 // met le code 1200
&temp_tr_dg1 = 1 // met les millers à 1
&temp_tr_dg2 = 2
&temp_tr_dg3 = 0
&temp_tr_dg4 = 0
CALL &affich_transp // et l'affiche
}
}
}
Var 2529, name sw_tr_off, Link IOCARD_SW, Input 125 // Inter Transp Off
{
IF &sw_tr_off = 1
{
&tr_mode = 1
CALL &affich_transp
}
}
Var 2530, name sw_tr_test, Link IOCARD_SW, Input 117 // test Transp
{
IF &sw_tr_test = 1
{
&tr_mode = 1
CALL &affich_transp
}
}
Var 2531, name sw_tr_sby, Link IOCARD_SW, Input 123 // Transpondeur mode standby
{
IF &sw_tr_sby = 1
{
&tr_mode = 1
&aff_tr_dg1 = &temp_tr_dg1
&aff_tr_dg2 = &temp_tr_dg2
&aff_tr_dg3 = &temp_tr_dg3
&aff_tr_dg4 = &temp_tr_dg4
CALL &affich_transp
}
}
Var 2532, name sw_tr_chrly, Link IOCARD_SW, Input 123 // Transpondeur mode Charly
{
IF &sw_tr_chrly = 1
{
&tr_mode = 0
}
}
Var 2533, name sw_tr_ident, Link IOCARD_SW, Input 69 // push ident transpondeur pour ivao
{
IF &sw_tr_ident = 1
{
&tr_ident = 1
}
}
Var 2534, name tr_ident, Link FSUIPC_INOUT, Offset $7B93, Length 1 // ident ivao
Var 2535, name tr_mode, Link FSUIPC_INOUT, Offset $7B91, Length 2, Value 0 // mode transpondeur ivao
var 2536, name region, value 0
Var 2540, name tempo, Link SUBRUTINE // temporisation saisie
{
IF &tempo >= 400 // si temps terminé
{
IF &press_count < 4 // si code partiel saisi
{
&temp_tr_code = &mem_tr_code // on remet l'ancien code
&fs_transp = TOBCD &temp_tr_code // on le repasse à FS
CALL &calc_temp_dgs // et on calcule les chiffres
}
CALL &affich_transp // on affiche les chiffres
&press_count = 0 // et on réinitialise
&new_tr_code = 1
¤t_digit = 1
}
}
Var 2541, name init_tempo, Link SUBRUTINE // initialisation tempo
{
&tempo = 0
&tempo = TIMER 400 ,4 ,5
&mem_tr_code = FROMBCD &fs_transp // mémorisation ancien code
}
Var 2542, name place_dg, Link SUBRUTINE // place les chiffres
{
IF &press_count > 0 // si pas premier appui
{
&new_tr_code = 0 // pas un nouveau code
}
&press_count = &press_count + 1
IF ¤t_digit = 1 // saisie du chiffre des milliers
{
&temp_tr_dg1 = &place_dg
}
IF ¤t_digit = 2 // saisie du chiffre des centaines
{
&temp_tr_dg2 = &place_dg
}
IF ¤t_digit = 3 // saisie du chiffre des dizaines
{
&temp_tr_dg3 = &place_dg
}
IF ¤t_digit = 4 // saisie du chiffre des unités
{
&temp_tr_dg4 = &place_dg
}
¤t_digit = ¤t_digit + 1 // incrémente la position
IF ¤t_digit = 5 // revient au premier chiffre après le 4e
{
¤t_digit = 1
}
}
Var 2543, name calc_temp_code, Link SUBRUTINE // calcule, envoie à FS et affiche la valeu
{
L0 = &temp_tr_dg1 * 1000
L1 = &temp_tr_dg2 * 100
L2 = L0 + L1
L1 = &temp_tr_dg3 * 10
L2 = L2 + L1
&temp_tr_code = L2 + &temp_tr_dg4
&fs_transp = TOBCD &temp_tr_code
CALL &affich_transp
}
Var 2544, name use_code, Link SUBRUTINE // décision gader ou rejeter
{
IF &press_count = 4 // code entier saisi
{
CALL &fin // on garde le nouveau code
}
ELSE
{
CALL &tempo // on agit selon timer
}
}
Var 2545, name fin, Link SUBRUTINE // termine le traitement
{
&new_tr_code = 1 // réinitialise pour nouevau code
¤t_digit = 1 // réinitialise chiffre à 1
&fs_transp = TOBCD &temp_tr_code // envoi code à FS
}
Var 2546, name calc_temp_dgs, Link SUBRUTINE // calcule les chiffres d'après le code si
{
&temp_tr_dg1 = DIV &temp_tr_code ,1000
&temp_tr_dg4 = MOD &temp_tr_code ,10
L0 = &temp_tr_dg1 * 1000
L1 = &temp_tr_code - L0
&temp_tr_dg2 = DIV L1 ,100
L2 = &temp_tr_dg2 * 100
L0 = L1 - L2
&temp_tr_dg3 = DIV L0 ,10
}
Var 2550, name affich_transp, Link SUBRUTINE // affiche les 7 segments à réunir avec SIO
{
C0 = &sw_tr_off = 1
C1 = &courant = 0 // pas de courant
C2 = C0 OR C1
C1 = &fs_avionics = 0
IF C2 OR C1 // pas de courant ou transpondeur coupé
{
&affich_transp = 0
&aff_tr_dg1 = -999999 // on éteint les chiffres
&aff_tr_dg2 = -999999
&aff_tr_dg3 = -999999
&aff_tr_dg4 = -999999
}
ELSE
{
if &sw_tr_test = 1 // si test
{
&aff_tr_dg1 = 8 // on allume tous les 8
&aff_tr_dg2 = 8
&aff_tr_dg3 = 8
&aff_tr_dg4 = 8
}
ELSE
{
&affich_transp = 0
&aff_tr_dg1 = &temp_tr_dg1
&aff_tr_dg2 = &temp_tr_dg2
&aff_tr_dg3 = &temp_tr_dg3
&aff_tr_dg4 = &temp_tr_dg4
&aff_tr_code = &temp_tr_code
}
}
}
Retourner vers Programmation Sioc
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités