// ***************************************************************************** // * Simubaron // ***************************************************************************** // * FileName : siocv11-31.txt // * Date : 20/04/2008 // // initialisation // Var 0000, name init, Value 0 // initialisation { CALL &init_flaps // positionne les volets selon panneau CALL &blink // lance le timer pour cligontement voyant CALL &affich_Leds // affiche les leds } Var 0001, name courant, Value 0 // courant g_n_ral { CALL &avionicsys CALL &affich_transp } // // batterie // Var 0002, name fs_bat, Link FSUIPC_INOUT, Offset $3102, Length 1 // batterie FS { &fs_bat = &sw_batt } Var 0003, name sw_batt, Link IOCARD_SW, Input 1 // INTER_BATTERIE { &fs_bat = &sw_batt CALL &calc_voy_alt1 CALL &calc_voy_alt2 CALL &sub_courant CALL &affich_Leds } Var 0004, name disp, Link IOCARD_DISPLAY, Digit 5, Numbers 3 // pour debug // // alternateurs // Var 0005, name fs_gen1, Link FSUIPC_INOUT, Offset $3B78, Length 4 // fs_gen1 { &fs_gen1 = &sw_gen1 } Var 0006, name sw_gen1, Link IOCARD_SW, Input 2 // inter génératrice 1 { &fs_gen1 = &sw_gen1 CALL &sub_courant CALL &calc_voy_alt1 CALL &affich_Leds } Var 0007, name fs_gen2, Link FSUIPC_INOUT, Offset $3AB8, Length 4 // fs_gen2 { &fs_gen2 = &sw_gen2 } Var 0008, name sw_gen2, Link IOCARD_SW, Input 4 // inter génératrice 2 { &fs_gen2 = &sw_gen2 CALL &sub_courant CALL &calc_voy_alt2 CALL &affich_Leds } // // gaz bouble emploi avec var 1101 et 1111, à réunir // Var 0009, name RPM_mot_1, Link FSUIPC_IN, Offset $0898, Length 2 // Tours moteur 1 { CALL &sub_courant CALL &calc_voy_alt1 CALL &affich_Leds } Var 0010, name RPM_mot_2, Link FSUIPC_IN, Offset $0930, Length 2 // Tours moteur 2 { CALL &sub_courant CALL &calc_voy_alt2 CALL &affich_Leds } // // calcul courant disponible // Var 0011, name sub_courant, Link SUBRUTINE // détermine si courant d'après tension bus { IF &fs_batt_volt = 2800 // au moins si une génértrice fonctionne { &courant = 1 // le courant est ON... } ELSE { IF &fs_bat = 1 // si inter batterie ON { IF &temp_batt > 1680 // si tension suffisante { &courant = 1 // le courant est ON... } } ELSE { &courant = 0 // le courant est OFF } } CALL &affich_Leds } Var 0014, name fs_batt_volt, Link FSUIPC_IN, Offset $2840, Length 8, Numbers 2 // tension batterie FS { &temp_batt = &fs_batt_volt CALL &sub_courant CALL &affich_Leds } // // bouton Annuntest et leds // Var 0015, name sw_test, Link IOCARD_SW, Input 16 { IF &sw_test = 1 { CALL &affich_Leds } ELSE { CALL &affich_Leds } } Var 0016, name temp_batt Var 0051, name led_gear_up, Link IOCARD_OUT, Output 18 // Voyant Gear up Var 0052, name led_att_At1, Link IOCARD_OUT, Output 19 // Voyant alternateur1 Var 0053, name led_att_At2, Link IOCARD_OUT, Output 20 // Voyant alternateur1 Var 0054, name Led_start, Link IOCARD_OUT, Output 21 // voyant démarreur Var 0055, name led_door, Link IOCARD_OUT, Output 22 // voyant porte Var 0056, name temp_led_door // variable intermédaire pour affichage voy Var 0057, name fs_door, Link FSUIPC_IN, Offset $3367, Length 1 // porte avion { C0 = TESTBIT &fs_door ,0 IF C0 { &temp_led_door = 1 } ELSE { &temp_led_door = 0 } CALL &affich_Leds } Var 0059, name test, Value 0 // pour debug Var 0065, name fs_start_mot1, Link FSUIPC_IN, Offset $3B00, Length 8, Numbers 8 // démarreur1 FS { CALL &temp_start CALL &affich_Leds } // // voyants alternateurs // Var 0060, name calc_voy_alt1, Link SUBRUTINE // définit allumage alt1 { &temp_led_alt1 = 1 C1 = &sw_gen1 = 1 C2 = &RPM_mot_1 > 200 C0 = C1 AND C2 IF C0 { &temp_led_alt1 = 0 } } Var 0061, name temp_led_alt1, Value 0 // variable intermédaire pour affichage voy Var 0062, name calc_voy_alt2, Link SUBRUTINE // définit allumage alt2 { &temp_led_alt2 = 1 C1 = &sw_gen2 = 1 C2 = &RPM_mot_2 > 200 C0 = C1 AND C2 IF C0 { &temp_led_alt2 = 0 } } Var 0063, name temp_led_alt2, Value 0 // variable intermédaire pour affichage voy Var 0066, name fs_start_mot2, Link FSUIPC_IN, Offset $3A40, Length 8, Numbers 8 // démarreur2 FS { CALL &temp_start CALL &affich_Leds } Var 0067, name temp_start, Link SUBRUTINE // vaut 1 si un démarreur actionné { &temp_start = 0 IF &fs_start_mot1 <> 0 { &temp_start = 1 } ELSE { IF &fs_start_mot2 <> 0 { &temp_start = 1 } } } // // Calcul voyant Gear up : clignote si train rentré avec volets full ou au moins 1 gaz réduit // Var 0070, name calc_voy_gear, Link SUBRUTINE // à 1 si le voyant de train doit clignote { &calc_voy_gear = 0 // initialisation IF V0330 = 16383 // si train sorti { &calc_voy_gear = 0 // pas de clignotement nécessaire &temp_led_gear = 0 // éteint le voyant } ELSE // si train rentré { C0 = &pos_throttle_1 < 7000 // Position manette gaz mot1 ralenti C1 = &pos_throttle_2 < 7000 // Position manette gaz mot2 ralenti C2 = C1 OR C0 // les deux manettes au ralenti C0 = &fs_flaps = 16383 // volets full C1 = C0 OR C2 // ralenti ou volets full IF C1 { &calc_voy_gear = 1 } ELSE { &calc_voy_gear = 0 &temp_led_gear = 0 } } } Var 0071, name temp_led_gear, Value 0 // variable intermédaire pour affichage voy // // clignotement voyant Gear up // Var 0072, name blink, Link SUBRUTINE // timer { &blink_count = 0 &blink_count = TIMER 9999 ,1 ,50 } Var 0073, name blink_count, Value 0 // met blinking à 1 une fois sur deux, génè { &blinking = MOD &blink_count ,2 } Var 0074, name blinking { IF &calc_voy_gear = 1 { &temp_led_gear = &blinking } ELSE { &temp_led_gear = 0 } } // // inters // Var 0101, name sw_avionics, Link IOCARD_SW, Input 23 { &fs_avionics = &sw_avionics } Var 0102, name fs_avionics, Link FSUIPC_INOUT, Offset $3103, Length 1 { &fs_avionics = &sw_avionics CALL &avionicsys CALL &affich_transp } Var 0103, name sw_propsync, Link IOCARD_SW, Input 6 { &fs_propsync = &sw_propsync } Var 0104, name fs_propsync, Link FSUIPC_INOUT, Offset $2EC8, Length 4 { &fs_propsync = &sw_propsync } // // Train // Var 0301, name fs_gear_cmd, Link FSUIPC_INOUT, Offset $0BE8, Length 4 // Commande train Var 0302, name led_train_tran, Link IOCARD_OUT, Output 14 // Led rouge transit Var 0303, name led_train_AV, Link IOCARD_OUT, Output 12 // Led verte train avant sorti Var 0304, name Led_train_G, Link IOCARD_OUT, Output 13 // Led verte train G sorti Var 0305, name led_train_D, Link IOCARD_OUT, Output 11 // Led verte train D sorti Var 0306, name sw_gear, Link IOCARD_SW, Input 8 // inter train { IF &sw_gear = 0 { &fs_gear_cmd = 16383 } ELSE { &fs_gear_cmd = 0 } } Var 0310, name fs_front_gear, Link FSUIPC_IN, Offset $0BEC, Length 4 // Pos-train-avant { IF &fs_front_gear = 16383 { &temp_fron_gear = 1 &temp_tran_gear = 0 } ELSE { IF &fs_front_gear > 1 { &temp_fron_gear = 0 &temp_tran_gear = 1 } ELSE { IF &fs_front_gear = 0 { &temp_fron_gear = 0 &temp_tran_gear = 0 } } } CALL &affich_Leds } Var 0320, name fs_left_gear, Link FSUIPC_IN, Offset $0BF4, Length 4 // Pos-train-G { IF &fs_left_gear = 16383 { &temp_left_gear = 1 &temp_tran_gear = 0 } ELSE { IF &fs_left_gear > 1 { &temp_left_gear = 0 &temp_tran_gear = 1 } ELSE { IF &fs_left_gear = 0 { &temp_left_gear = 0 &temp_tran_gear = 0 } } } CALL &affich_Leds } Var 0330, name fs_right_gear, Link FSUIPC_IN, Offset $0BF0, Length 4 // Pos-train-D { IF &fs_right_gear = 16383 { &temp_rigt_gear = 1 &temp_tran_gear = 0 } ELSE { IF &fs_right_gear > 1 { &temp_rigt_gear = 0 &temp_tran_gear = 1 } ELSE { IF &fs_right_gear = 0 { &temp_rigt_gear = 0 &temp_tran_gear = 0 } } } CALL &calc_voy_gear CALL &affich_Leds } // // affichage Leds // Var 0340, name affich_Leds, Link SUBRUTINE // allume ou éteint les leds selon courant { IF &courant = 0 // pas de courant { &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 { &led_train_tran = &temp_tran_gear &led_train_AV = &temp_fron_gear &Led_train_G = &temp_left_gear &led_train_D = &temp_rigt_gear &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 IF &sw_test = 1 { &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 { &led_train_tran = &temp_tran_gear &led_train_AV = &temp_fron_gear &Led_train_G = &temp_left_gear &led_train_D = &temp_rigt_gear &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 } } } Var 0352, name temp_tran_gear, Value 0 // init led train_trans Var 0353, name temp_fron_gear, Value 0 // init led avant Var 0354, name temp_left_gear, Value 0 // ini led G Var 0355, name temp_rigt_gear, Value 0 // initi led D // // Frein park // Var 0360, name fs_park_brake, Link FSUIPC_INOUT, Offset $0BC8, Length 2 // FS Parking brake { &fs_park_brake = &sw_park_brake } Var 0361, name sw_park_brake, Link IOCARD_SW, Input 32 // inter frein park { &fs_park_brake = &sw_park_brake } // // Volets // Var 0400, name fs_flaps, Link FSUIPC_INOUT, Offset $0BDC, Length 4 // volets { CALL &init_flaps CALL &calc_led_flaps CALL &affich_Leds } Var 0401, name init_flaps, Link SUBRUTINE // init volets { IF &sw_flaps_up = 1 { &fs_flaps = 0 } ELSE { IF &sw_flaps_down = 1 { &fs_flaps = 16383 } ELSE { &fs_flaps = 8191 } } } Var 0402, name led_trans_flap, Link IOCARD_OUT, Output 17 // Led rouge transit volets Var 0403, name led_flaps_APH, Link IOCARD_OUT, Output 15 // Led voelts APH Var 0404, name led_flaps_down, Link IOCARD_OUT, Output 16 // Led volets bas Var 0406, name sw_flaps_up, Link IOCARD_SW, Input 5 // Inter volets UP { CALL &init_flaps } Var 0407, name sw_flaps_down, Link IOCARD_SW, Input 7 // Inter volets bas { CALL &init_flaps } Var 0410, name fs_pos_flaps, Link FSUIPC_IN, Offset $0BE0, Length 4 // position volets fs { CALL &calc_led_flaps CALL &calc_voy_gear CALL &affich_Leds } Var 0430, name calc_led_flaps, Link SUBRUTINE // gère les leds des volets { IF &fs_pos_flaps = 0 { &temp_flap_APR = 0 &temp_flap_B = 0 &temp_flap_T = 0 } ELSE { IF &fs_pos_flaps = 16383 { &temp_flap_APR = 0 &temp_flap_B = 1 &temp_flap_T = 0 } ELSE { IF &fs_pos_flaps = 8191 { &temp_flap_APR = 1 &temp_flap_B = 0 &temp_flap_T = 0 } ELSE { &temp_flap_APR = 0 &temp_flap_B = 0 &temp_flap_T = 1 } } } } Var 0453, name temp_flap_APR, Value 0 // init led volets APR Var 0454, name temp_flap_B, Value 0 // ini led volets bas Var 0455, name temp_flap_T, Value 0 // initi led volets transit // // magnetos // Var 0501, name fs_Magneto1, Link FSUIPC_INOUT, Offset $0892, Length 2 // Magentos moteur 1 forcées selon panneau { IF &mot1_off = 1 { &fs_Magneto1 = 0 } ELSE { IF &mot1_R = 1 { &fs_Magneto1 = 1 } ELSE { IF &mot1_L = 1 { &fs_Magneto1 = 2 } ELSE { IF &mot1_B = 1 { &fs_Magneto1 = 3 } ELSE { IF &mot1_S = 1 { &fs_Magneto1 = 4 } } } } } } Var 0502, name mot1_off, Link IOCARD_SW, Input 10 // Inter magnétos moteur 1 { IF &mot1_off = 1 { &fs_Magneto1 = 0 } } Var 0503, name mot1_R, Link IOCARD_SW, Input 11 { IF &mot1_R = 1 { &fs_Magneto1 = 1 } } Var 0504, name mot1_L, Link IOCARD_SW, Input 13 { IF &mot1_L = 1 { &fs_Magneto1 = 2 } } Var 0505, name mot1_B, Link IOCARD_SW, Input 12 { IF &mot1_B = 1 { &fs_Magneto1 = 3 } } Var 0506, name mot1_S, Link IOCARD_SW, Input 17 { IF &mot1_S = 1 { &fs_Magneto1 = 4 } } Var 0511, name fs_Magneto2, Link FSUIPC_INOUT, Offset $092A, Length 2 // Magentos moteur 2 forcées selon panneau { IF &mot2_off = 1 { &fs_Magneto2 = 0 } ELSE { IF &mot2_R = 1 { &fs_Magneto2 = 1 } ELSE { IF &mot2_L = 1 { &fs_Magneto2 = 2 } ELSE { IF &mot2_B = 1 { &fs_Magneto2 = 3 } ELSE { IF &mot2_S = 1 { &fs_Magneto2 = 4 } } } } } } Var 0512, name mot2_off, Link IOCARD_SW, Input 19 // Inter magnétos moteur 2 { IF &mot2_off = 1 { &fs_Magneto2 = 0 } } Var 0513, name mot2_R, Link IOCARD_SW, Input 20 { IF &mot2_R = 1 { &fs_Magneto2 = 1 } } Var 0514, name mot2_L, Link IOCARD_SW, Input 22 { IF &mot2_L = 1 { &fs_Magneto2 = 2 } } Var 0515, name mot2_B, Link IOCARD_SW, Input 21 { IF &mot2_B = 1 { &fs_Magneto2 = 3 } } Var 0516, name mot2_S, Link IOCARD_SW, Input 26 { IF &mot2_S = 1 { &fs_Magneto2 = 4 } } // // Pompes Fuel // Var 0520, name sw_fuel1, Link IOCARD_SW, Input 3 // inter pompe 1 { IF &sw_fuel1 = 1 { &fs_fuel = SETBIT 1 } ELSE { &fs_fuel = CLEARBIT 1 } } Var 0521, name sw_fuel2, Link IOCARD_SW, Input 0 // inter pompe 2 { IF &sw_fuel2 = 1 { &fs_fuel = SETBIT 0 } ELSE { &fs_fuel = CLEARBIT 0 } } Var 0522, name fs_fuel, Link FSUIPC_INOUT, Offset $3125, Length 1 // pompe FS forcé selon panneau { IF &sw_fuel1 = 1 { &fs_fuel = SETBIT 1 } ELSE { &fs_fuel = CLEARBIT 1 } IF &sw_fuel2 = 1 { &fs_fuel = SETBIT 0 } ELSE { &fs_fuel = CLEARBIT 0 } } // // gaz bouble emploi avec var 1101 et 1111, à réunir // Var 0530, name pos_throttle_1, Link FSUIPC_IN, Offset $088C, Length 2 // position gaz mot 1 { CALL &calc_voy_gear } Var 0531, name pos_throttle_2, Link FSUIPC_IN, Offset $0924, Length 2 // position gaz mot 2 { CALL &calc_voy_gear } Var 0801, name fs_Lights, Link FSUIPC_INOUT, Offset $0D0C, Length 2 // Eclairages { CALL &init_lights } Var 0802, name Inter_NAV, Link IOCARD_SW, Input 30 // NAV Light { IF &Inter_NAV = 1 { &fs_Lights = SETBIT 0 } ELSE { &fs_Lights = CLEARBIT 0 } } Var 0803, name Inter_BCN, Link IOCARD_SW, Input 31 // Inter Beacon { IF &Inter_BCN = 1 { &fs_Lights = SETBIT 1 } ELSE { &fs_Lights = CLEARBIT 1 } } Var 0804, name Inter_LDG, Link IOCARD_SW, Input 33 // Phare décollage { IF &Inter_LDG = 1 { &fs_Lights = SETBIT 2 } ELSE { &fs_Lights = CLEARBIT 2 } } Var 0805, name Inter_TAXI, Link IOCARD_SW, Input 27 // Inter Taxi Light { IF &Inter_TAXI = 1 { &fs_Lights = SETBIT 3 } ELSE { &fs_Lights = CLEARBIT 3 } } Var 0806, name Inter_STROBE, Link IOCARD_SW, Input 29 // Inter Strobe { IF &Inter_STROBE = 1 { &fs_Lights = SETBIT 4 } ELSE { &fs_Lights = CLEARBIT 4 } } Var 0807, name Inter_PANEL, Link IOCARD_SW, Input 34 // Eclairage T de B { IF &Inter_PANEL = 1 { &fs_Lights = SETBIT 5 } ELSE { &fs_Lights = CLEARBIT 5 } } Var 0808, name light_ice, Link FSUIPC_INOUT, Offset $05D8, Length 2 // light ice ou smoke system { &light_ice = &sw_light_ice } Var 0809, name sw_light_ice, Link IOCARD_SW, Input 28 // inter light aile { IF &sw_light_ice = 1 { &light_ice = 1 } ELSE { &light_ice = 0 } } Var 0810, name init_lights, Link SUBRUTINE { IF &Inter_NAV = 1 { &fs_Lights = SETBIT 0 } ELSE { &fs_Lights = CLEARBIT 0 } IF &Inter_BCN = 1 { &fs_Lights = SETBIT 1 } ELSE { &fs_Lights = CLEARBIT 1 } IF &Inter_LDG = 1 { &fs_Lights = SETBIT 2 } ELSE { &fs_Lights = CLEARBIT 2 } IF &Inter_TAXI = 1 { &fs_Lights = SETBIT 3 } ELSE { &fs_Lights = CLEARBIT 3 } IF &Inter_STROBE = 1 { &fs_Lights = SETBIT 4 } ELSE { &fs_Lights = CLEARBIT 4 } IF &Inter_PANEL = 1 { &fs_Lights = SETBIT 5 } ELSE { &fs_Lights = CLEARBIT 5 } IF &inter_flood = 1 { &fs_Lights = SETBIT 9 } ELSE { &fs_Lights = CLEARBIT 10 } } Var 0811, name inter_flood, Link IOCARD_SW, Input 35 // inter plafonnier { IF &inter_flood = 1 { &fs_Lights = SETBIT 10 } ELSE { &fs_Lights = CLEARBIT 10 } } // // Trim avec encodeur simple // Var 0901, name trim_input, Link FSUIPC_OUT, Offset $0BC0, Length 2 Var 0902, name Wheel_Trim, Link IOCARD_ENCODER, Input 64, Aceleration 2 // encodeur%trim { &calc_trim = &Wheel_Trim * -300 CALL &lim_trim } Var 0903, name fs_trim_pos, Link FSUIPC_IN, Offset $0BC2, Length 2 Var 0904, name calc_trim Var 0905, name lim_trim, Link SUBRUTINE // limite le trim { L0 = &calc_trim &trim_input = &trim_input + L0 IF &trim_input < -16200 { IF L0 < 0 { &trim_input = -16383 } ELSE { &trim_input = &trim_input + L0 } } IF &trim_input > 16200 { IF L0 > 0 { &trim_input = 16383 } ELSE { &trim_input = &trim_input + L0 } } } // // 2 manettes gaz (potentiomètres inversés) positions leviers (commande) différents de var 530 et 531 (RPM = résultats) // Var 1101, name throttle1, Link FSUIPC_OUT, Offset $088c, Length 2 // levier gaz moteur 1 Var 1102, name com_gaz1, Link IOCARD_ANALOGIC, Input 1, PosL 0, PosC 140, PosR 255 // potentiometre gaz 1 { L0 = &com_gaz1 * 64.25 IF L0 > 16384 { L0 = 16384 } &throttle1 = L0 } Var 1105, name throttle2, Link FSUIPC_OUT, Offset $0924, Length 2 // levier gaz moteur 2 Var 1106, name com_gaz2, Link IOCARD_ANALOGIC, Input 2, PosL 0, PosC 110, PosR 255 // potentiometre gaz2 { L0 = &com_gaz2 - 255 L0 = L0 * -1 L0 = L0 * 64.25 IF L0 > 16384 { L0 = 16384 } &throttle2 = L0 } // // 2 manettes hélices (potentiomètres inversés) // Var 1111, name prop1, Link FSUIPC_OUT, Offset $088E, Length 2 // levier hélice moteur 1 Var 1112, name com_prop1, Link IOCARD_ANALOGIC, Input 3, PosL 0, PosC 140, PosR 255 // potentiometre gaz 1 { L0 = &com_prop1 * 64.25 IF L0 > 16384 { L0 = 16384 } &prop1 = L0 } Var 1115, name prop2, Link FSUIPC_OUT, Offset $0926, Length 2 // levier hélice moteur 2 Var 1116, name com_prop2, Link IOCARD_ANALOGIC, Input 4, PosL 0, PosC 110, PosR 255 // potentiometre gaz2 { L0 = &com_prop2 - 255 L0 = L0 * -1 L0 = L0 * 64.25 IF L0 > 16384 { L0 = 16384 } &prop2 = L0 } // // Affichage nombres si courant // Var 1250, name avionicsys, Link SUBRUTINE // affiche les 7 segments selon conditions { C0 = &fs_avionics = 0 C1 = &courant = 0 IF C0 OR C1 // pas de courant ou avionique off, on éteint tout { &aff_c1sb_1 = 10 &aff_c1sb_int = -999999 &aff_c1sb_dec = -999999 &aff_c1ac_1 = -999999 &aff_c1ac = -999999 } ELSE // sinon on affiche { &aff_c1sb_1 = &d_c1sb_1 &aff_c1sb_int = &d_c1sb_int &aff_c1sb_dec = &d_c1sb_dec &aff_c1ac_1 = &d_c1ac_1 &aff_c1ac = &d_c1ac } } // // Radio COM1 // Var 2103, name aff_c1ac_1, Link IOCARD_DISPLAY, Digit 9, Numbers 1 // centaines sactive Var 2104, name aff_c1ac, Link IOCARD_DISPLAY, Digit 5, Numbers 4 Var 2105, name aff_c1sb_1, Link IOCARD_DISPLAY, Digit 4, Numbers 1 // centaines standby Var 2106, name aff_c1sb_int, Link IOCARD_DISPLAY, Digit 2, Numbers 2 Var 2107, name aff_c1sb_dec, Link IOCARD_DISPLAY, Digit 0, Numbers 2 Var 2120, name fs_swap, Link FSUIPC_OUT, Offset $3123, Length 1 // FS RADIO active standby swap bits: 0=nav Var 2121, name fs_C1sb_bcd, Link FSUIPC_INOUT, Offset $311A, Length 2 // FS COM1 standby frequency in BCD format { &d_c1sb_1 = 1 &d_c1ac_1 = 1 } Var 2122, name fs_c1ac_bcd, Link FSUIPC_IN, Offset $034E, Length 2 // FS COM1 active frequency in BCD format { &d_c1ac = FROMBCD &fs_c1ac_bcd // Update C1 active freq display (4 digits) CALL &c1int_rotval // Align rotary with new C1 SB integer val CALL &c1dec_rotval // Align rotary with new C1 SB decimal val CALL &c1upd_int CALL &c1upd_dec } Var 2126, name C1_SB_AS_DEC // COM1 standby frequency in decimal format Var 2128, name c1sb_int // COM1 standby frequency integers Var 2130, name c1sb_dec // COM1 standby frequency decimals Var 2132, name c1int_value // COM1 left hand rotary encoder ref value Var 2134, name c1dec_value // COM1 right hand rotary encoder ref value Var 2136, name ec_c1int, Link IOCARD_ENCODER, Input 45, Aceleration 1 // INTEGRER { L0 = &ec_c1int * -1 &c1int_value = ROTATE 18 ,36 ,L0 CALL &c1upd_int CALL &setfs_c1sb } Var 2138, name ec_c1dec, Link IOCARD_ENCODER, Input 48, Aceleration 2 // DECIMAL { &c1dec_value = ROTATE 0 ,39 ,&ec_c1dec CALL &c1upd_dec CALL &setfs_c1sb } Var 2140, name sw_c1_swap, Link IOCARD_SW, Input 71, Type P { &fs_swap = TOGGLE 3 } Var 2142, name d_c1sb_1 // Initial digit 1. Delete if hard wired { CALL &avionicsys } Var 2144, name d_c1sb_int // Standby integers { CALL &avionicsys } Var 2148, name d_c1sb_dec // Standby decimals { CALL &avionicsys } Var 2150, name d_c1ac_1 // Initial digit 1. Delete if hard wired { CALL &avionicsys } Var 2152, name d_c1ac { CALL &avionicsys } Var 2154, name c1int_rotval, Link SUBRUTINE // Aligns LH rotary ref with COM1 SB freq { L0 = FROMBCD &fs_C1sb_bcd L1 = L0 / 100 &c1int_value = TRUNC L1 } Var 2156, name c1dec_rotval, Link SUBRUTINE // Aligns RH rotary ref with COM1 SB freq { L0 = FROMBCD &fs_C1sb_bcd L1 = &c1int_value * 100 L2 = L0 - L1 &c1dec_value = L2 / 2.487179 } Var 2158, name c1upd_int, Link SUBRUTINE // Update COM1 stanby integers { &d_c1sb_int = &c1int_value // Set COM1 standby integer display &c1sb_int = &c1int_value } Var 2160, name c1upd_dec, Link SUBRUTINE // Update COM1 standby decimals { L0 = &c1dec_value * 2.5 &c1sb_dec = TRUNC L0 &d_c1sb_dec = &c1sb_dec } Var 2162, name setfs_c1sb, Link SUBRUTINE // Update COM1 standby frequency in FS { L0 = &c1sb_int * 100 L1 = L0 + &c1sb_dec &fs_C1sb_bcd = TOBCD L1 } // // 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 10, Numbers 1 // unités transp Var 2502, name aff_tr_dg3, Link IOCARD_DISPLAY, Digit 11, Numbers 1 // dizaines transp Var 2503, name aff_tr_dg2, Link IOCARD_DISPLAY, Digit 12, Numbers 1 // centaines transp Var 2504, name aff_tr_dg1, Link IOCARD_DISPLAY, Digit 13, Numbers 1 // milliers transp Var 2506, name aff_tr_code, Link IOCARD_DISPLAY, Digit 10, 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 63 // 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 68 // 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 37 // 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 38 // 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 39 // 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 40 // 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 41 // 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 42 // 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 36 // Push VFR { IF &vfr = 1 { &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 } } Var 2529, name sw_tr_off, Link IOCARD_SW, Input 66 // Inter Transp Off { IF &sw_tr_off = 1 { &tr_mode = 1 CALL &affich_transp } } Var 2530, name sw_tr_sby, Link IOCARD_SW, Input 67 // 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 2531, name sw_tr_chrly, Link IOCARD_SW, Input 70 // Transpondeur mode Charly { IF &sw_tr_chrly = 1 { &tr_mode = 0 } } Var 2532, name sw_tr_ident, Link IOCARD_SW, Input 69 // push ident transpondeur pour ivao { IF &sw_tr_ident = 1 { &tr_ident = 1 } } Var 2533, name tr_ident, Link FSUIPC_INOUT, Offset $7B93, Length 1 // ident ivao Var 2534, name tr_mode, Link FSUIPC_INOUT, Offset $7B91, Length 2, Value 0 // mode transpondeur ivao 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 { 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 = 10 // on éteint les chiffres &aff_tr_dg2 = 10 &aff_tr_dg3 = 10 &aff_tr_dg4 = 10 } 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 } }