// * FileName : FCU_A320.txt // * Date : 19/5/2005 // * Ver : 1.0 // * FCU de Project Magenta para A320 //******************************** // INICIALIZACION //******************************** Var 0000, Value 0 { V0050 = CLEARBIT 23 // Pone MODO IAS V0057 = V0004 // IAS leidas en IAS temporal V0058 = V0005 // MATH leidas en MACH temporal V0421 = 0 // ALT a 0 V0529 = 1 // activo 00 del ALT } //******************************** // ENTRADAS DESDE FSUIPC //******************************** Var 0003, Link FSUIPC_IN, Offset $04F0, Length 2 // IAS/MACH { C0 = TESTBIT V0003 ,15 // Modo MACH o IAS ? IF C0 // MACH MODE { V0910 = 0 V0910 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0402 = -999999 // Apago el valor del IAS L0 = TESTBIT V0008,1 // Miro si está blank el SPD para poner o no el punto decimal IF L0 = 0 { V0516 = 1 // Enciendo el punto decimal } V0406 = 8 // Enciendo indicador de MACH V0405 = -999999 // Apago el indicador de IAS } ELSE // IAS MODE { V0911 = 0 V0911 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0407 = -999999 // Apago el valor del MACH V0516 = 0 // Apago el punto decimal V0406 = -999999 // Apago el indicador de MACH V0405 = 8 // Enciendo el indicador de IAS } C0 = TESTBIT V0003 ,6 // Modo HDG/TRK o AP ? IF C0 // MODO AP { V0403 = -999996 // Pongo los guiones en el HDG V0517 = 1 // Enciendo el punto del HDG } ELSE { V0912 = 0 V0912 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0517 = 0 // Apago el punto del HDG } C0 = TESTBIT V0003 ,0 // LUZ del AP1 IF C0 // AP1 ON { V0519 = 1 } ELSE // AP1 OFF { V0519 = 0 } C0 = TESTBIT V0003 ,1 // LUZ del AP2 IF C0 // AP2 ON { V0520 = 1 } ELSE // AP2 OFF { V0520 = 0 } C0 = TESTBIT V0003 ,11 // LUZ del ATHR IF C0 // ATHR ON { V0521 = 1 } ELSE // ATHR OFF { V0521 = 0 } C0 = TESTBIT V0003 ,5 // LUZ del LOC IF C0 // ATHR ON { V0522 = 1 } ELSE // ATHR OFF { V0522 = 0 } C0 = TESTBIT V0003 ,4 // LUZ del APPR IF C0 // APPR ON { V0523 = 1 } ELSE // APPR OFF { V0523 = 0 } } Var 0004, Link FSUIPC_IN, Offset $04E0, Length 2 // IAS { CALL V0901 // Display del valor } Var 0005, Link FSUIPC_IN, Offset $04E8, Length 2 // MATH { CALL V0901 // Display del valor } Var 0006, Link FSUIPC_IN, Offset $04F6, Length 2 // MODO HDG/TRK... { C0 = TESTBIT V0006 ,11 // Modo HDG/TRK o VS/FPA IF C0 // TRK y FPA { V0414 = 8 // Indicador TRK Encendido V0411 = 8 // Indicador TRK FPA Encendido V0419 = 8 // Indicador FPA Encendido V0415 = -999999 // Indicador HDG Apagado V0412 = -999999 // Indicador HDG V/S Apagado V0418 = -999999 // Indicador V/S Apagado V0912 = 0 V0912 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0915 = 0 V0915 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC } ELSE { V0414 = -999999 // Indicador TRK apagado V0411 = -999999 // Indicador TRK FPA apagado V0419 = -999999 // Indicador FPA apagado V0415 = 8 // Indicador HDG encendido V0412 = 8 // Indicador HDG V/S encendido V0418 = 8 // Indicador V/S encendido V0912 = 0 V0912 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0916 = 0 V0916 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC } C0 = TESTBIT V0006 ,12 // LUZ del EXPED IF C0 // EXPED ON { V0524 = 1 } ELSE // EXPED OFF { V0524 = 0 } } Var 0007, Link FSUIPC_IN, Offset $04E2, Length 2 // HDG/TRK { CALL V0902 } Var 0008, Link FSUIPC_IN, Offset $051C, Length 2 // Para blank SPD y VS { C0 = TESTBIT V0008,1 // Miro si está blank el SPD IF C0 { V0402 = -999999 // Apaga IAS y el MACH V0407 = -999999 V0516 = 0 // Apaga punto decimal V0518 = 1 // Enciende punto del SPD } ELSE { CALL V0913 // Pinta IAS/MACH V0518 = 0 // Apaga punto del SPD } } Var 0009, Link FSUIPC_IN, Offset $5528, Length 2 // BLANK V/S FPA { C0 = TESTBIT V0006 ,11 // Modo HDG/TRK o VS/FPA C1 = TESTBIT V0009 ,2 // Apagado / Encendido IF C0 // TRK y FPA { IF C1 // FPA Apagado { V0526 = 1 // Enciendo . decimal V0423 = -999999 // Apaga VS /FPA V0528 = 1 // Enciendo el signo - } ELSE // FPA Encendido { V0915 = 0 V0915 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0526 = 1 // Enciendo . decimal CALL V0914 // Presento valor } } ELSE // VS { IF C1 // VS Apagado { V0526 = 0 // Apago . decimal V0527 = 0 // Apago 00 del VS V0423 = -999999 // Apaga VS /FPA V0528 = 1 // Enciendo el signo - } ELSE // VS Encendido { V0916 = 0 V0916 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0527 = 1 // Enciendo 00 del VS CALL V0914 // Presento valor } } } Var 0010, Link FSUIPC_INOUT, Offset $04e6, Length 2, type 1 // VS/FPA { CALL V0914 } //******************************** // SALIDAS A FSUIPC //******************************** Var 0050, Link FSUIPC_OUT, Offset $5410, Length 4 // Pulsadores-I PM Var 0055, Link FSUIPC_OUT, Offset $5408, Length 2 // HDG Var 0056, Link FSUIPC_OUT, Offset $540A, Length 2 // ALT Var 0057, Link FSUIPC_OUT, Offset $5406, Length 2 // IAS Var 0058, Link FSUIPC_OUT, Offset $540E, Length 2 // MATH Var 0059, Link FSUIPC_OUT, Offset $5414, Length 4 // HDG/TRK Var 0060, Link FSUIPC_OUT, Offset $540C, Length 2 // VS //******************************** // INTERRUPTORES Y PULSADORES //******************************** Var 0215, Link IOCARD_SW, Input 35, Type P // Boton MATH { V0050 = CHANGEBIT 23 V0215 } Var 0216, Link IOCARD_SW, Input 10, Type P // Boton MATH { V0059 = CHANGEBIT 29 V0216 } Var 0217, Link IOCARD_SW, Input 8 // Boton Speed Push { V0059 = TOGGLE 20 } Var 0218, Link IOCARD_SW, Input 7 // Boton Speed Pull { V0059 = TOGGLE 21 } Var 0219, Link IOCARD_SW, Input 0 // Boton Heading push { V0059 = TOGGLE 22 } Var 0220, Link IOCARD_SW, Input 3 // Boton Heading pull { V0059 = TOGGLE 23 } Var 0221, Link IOCARD_SW, Input 2 // Boton Altitude push { V0059 = TOGGLE 24 } Var 0222, Link IOCARD_SW, Input 1 // Boton Altitude pull { V0059 = TOGGLE 25 } Var 0223, Link IOCARD_SW, Input 61 // Boton VS push { IF V0223 = 1 { V0059 = TOGGLE 26 C0 = TESTBIT V0006 ,11 // Modo HDG/TRK o VS/FPA IF C0 // TRK y FPA { V0915 = 0 V0915 = TIMER 1,1,50 // Lanzo un timer para retardar y dar tiempo a las FSUIPC } ELSE { V0916 = 0 V0916 = TIMER 1,1,50 // Lanzo un timer para retardar y dar tiempo a las FSUIPC } } } Var 0224, Link IOCARD_SW, Input 54 // Boton VS pull { IF V0224 = 1 { V0059 = TOGGLE 27 C0 = TESTBIT V0006 ,11 // Modo HDG/TRK o VS/FPA IF C0 // TRK y FPA { V0915 = 0 V0915 = TIMER 1,1,50 // Lanzo un timer para retardar y dar tiempo a las FSUIPC } ELSE { V0916 = 0 V0916 = TIMER 1,1,50 // Lanzo un timer para retardar y dar tiempo a las FSUIPC } } } Var 0225, Link IOCARD_SW, Input 44, TYPE P // Boton EXPED { V0059 = CHANGEBIT 28 V0225 } Var 0226, Link IOCARD_SW, Input 62, TYPE P // Boton AP0 { V0059 = CHANGEBIT 0 V0226 } Var 0227, Link IOCARD_SW, Input 58, TYPE P // Boton AP1 { V0059 = CHANGEBIT 1 V0227 } Var 0228, Link IOCARD_SW, Input 34, TYPE P // Boton ATHR { V0050 = CHANGEBIT 19 V0228 } Var 0229, Link IOCARD_SW, Input 53, TYPE P // Boton LOC { V0050 = CHANGEBIT 28 V0229 } Var 0230, Link IOCARD_SW, Input 37, TYPE P // Boton APR { V0050 = CHANGEBIT 29 V0230 } Var 0231, Link IOCARD_SW, Input 38, // Boton ALT 10/100 //******************************** // ROTARY-ENCODERS //******************************** Var 0302, Link IOCARD_ENCODER, Input 28, Aceleration 6 // Encoder IAS Y MATH { L0 = TESTBIT V0008 , 1 // Si L0 = 1 está apagado IF L0 = 0 { C0 = TESTBIT V0003 ,15 // Indicador MATH o IAS ? IF C0 // MATH MODE { V0058 = LIMIT 0, 99, V0302 // Inc o decremento el valor del MATH } ELSE { V0057 = LIMIT 0, 500, V0302 // Inc o decremento el valor del IAS } } } Var 0303, Link IOCARD_ENCODER, Input 41, Aceleration 6 // Encoder HDG { V0055 = ROTATE 0, 359, V0303 } Var 0304, Link IOCARD_ENCODER, Input 46, Aceleration 6 // Encoder ALT { L0 = V0231 * 10 // Calculo el factor de multiplicacion IF L0 = 0 // Como minimo debe de ser 1 { L0 = 1 } L2 = V0304 * L0 V0421 = LIMIT 1, 500, L2 } Var 0305, Link IOCARD_ENCODER, Input 55, Aceleration 2 // Encoder IAS Y MATH { L0 = TESTBIT V0009 ,2 // Apagado / Encendido IF L0 = 0 { C0 = TESTBIT V0006 ,11 // Modo VS/FPA IF C0 // Modo FPA { V0060 = LIMIT -99, 99, V0305 // Inc o decremento el valor del FPA } ELSE // Modo VS { V0060 = LIMIT -99, 99, V0305 // Inc o decremento el valor del VS } } } //******************************** // DISPLAYS 7 SEGMENTOS //******************************** Var 0402, Link IOCARD_DISPLAY, Digit 3, Numbers 3 // IAS Var 0403, Link IOCARD_DISPLAY, Digit 6, Numbers 3 // HEADING / TRK Var 0405, Link IOCARD_DISPLAY, Digit 0, Numbers 1 // IAS INDICADOR Var 0406, Link IOCARD_DISPLAY, Digit 2, Numbers 1 // MATH INDICADOR Var 0407, Link IOCARD_DISPLAY, Digit 3, Numbers 2 // MATH Var 0411, Link IOCARD_DISPLAY, Digit 20, Numbers 1 // TRK FPA Indicador Var 0412, Link IOCARD_DISPLAY, Digit 21, Numbers 1 // HDG V/S Indicador Var 0413, Link IOCARD_DISPLAY, Digit 22, Numbers 1 // LAT Indicador Var 0414, Link IOCARD_DISPLAY, Digit 23, Numbers 1 // TRK Indicador Var 0415, Link IOCARD_DISPLAY, Digit 24, Numbers 1 // HDG Indicador Var 0416, Link IOCARD_DISPLAY, Digit 19, Numbers 1 // ALT Indicador Var 0417, Link IOCARD_DISPLAY, Digit 18, Numbers 1 // LVL / CH Indicador Var 0418, Link IOCARD_DISPLAY, Digit 17, Numbers 1 // V/S Indicador Var 0419, Link IOCARD_DISPLAY, Digit 16, Numbers 1 // FPA Indicador Var 0420, Link IOCARD_DISPLAY, Digit 35, Numbers 2 // 00 del ALT (corresponde a #5 y 6) Var 0421, Link IOCARD_DISPLAY, Digit 9, Numbers 3 // ALT { V0056 = V0421 // Pasa el valor al PM } Var 0422, Link IOCARD_DISPLAY, Digit 1, Numbers 1 // Signo VS Var 0423, Link IOCARD_DISPLAY, Digit 12, Numbers 2 // VS FPA //************************************* // SALIDAS DE LA MASTER (LEDS Y FIJOS) //************************************* Var 0516, Link IOCARD_OUT, Output 28 // . DECIMAL del MACH Var 0517, Link IOCARD_OUT, Output 22 // o del HDG Var 0518, Link IOCARD_OUT, Output 17 // o del SPD Var 0519, Link IOCARD_OUT, Output 34 // Led AP1 Var 0520, Link IOCARD_OUT, Output 30 // Led AP2 Var 0521, Link IOCARD_OUT, Output 18 // Led A/THR Var 0522, Link IOCARD_OUT, Output 23 // Led LOC Var 0523, Link IOCARD_OUT, Output 25 // Led APPR Var 0524, Link IOCARD_OUT, Output 26 // Led EXPED Var 0525, Link IOCARD_OUT, Output 38 // o del ALT Var 0526, Link IOCARD_OUT, Output 32 // . decimal del VS Var 0527, Link IOCARD_OUT, Output 35 // oo del VS Var 0528, Link IOCARD_OUT, Output 36 // - del VS Var 0529, Link IOCARD_OUT, Output 27 // 00 del ALT //******************************** // VARIABLES IOCP INTERNAS //******************************** //******************************** // RUTINAS INTERNAS //******************************** Var 0901, Link SUBRUTINE // Pinta IAS / MATH { L0 = TESTBIT V0008 , 1 // Si L0 = 1 está apagado IF L0 = 0 { C0 = TESTBIT V0003 ,15 // Modo MATH o IAS ? IF C0 // MATH MODE { V0407 = V0005 // Pone valor MATH en el display } ELSE { V0402 = V0004 // Pone valor IAS en el display } } } Var 0902, Link SUBRUTINE // Pinta HDG { L0 = TESTBIT V0003 ,6 // Modo HDG/TRK o AP ? IF L0 = 0 // MODO HDG/TRK { V0403 = V0007 // Pone valor } } Var 0910, Link SUBRUTINE, value 0 // Timer1 { IF V0910 <> 0 { V0058 = V0005 // Cargo valor en temporal CALL V0901 // Display del valor } } Var 0911, Link SUBRUTINE, value 0 // Timer2 { IF V0911 <> 0 { V0057 = V0004 // Cargo valor en temporal CALL V0901 // Display del valor } } Var 0912, Link SUBRUTINE, value 0 // Timer3 { IF V0912 <> 0 { V0055 = V0007 // Cargo valor en su posición para el encoder CALL V0902 // Display del valor } } Var 0913, Link SUBRUTINE // Pinta IAS o MACH { C0 = TESTBIT V0003 ,15 // Modo MATH o IAS ? IF C0 // MATH MODE { V0910 = 0 V0910 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0402 = -999999 // Apago el valor del IAS V0516 = 1 // Enciendo el punto decimal V0406 = 8 // Enciendo indicador de MACH V0405 = -999999 // Apago el indicador de IAS } ELSE // IAS MODE { V0911 = 0 V0911 = TIMER 1,1,5 // Lanzo un timer para retardar y dar tiempo a las FSUIPC V0407 = -999999 // Apago el valor del MACH V0516 = 0 // Apago el punto decimal V0406 = -999999 // Apago el indicador de MACH V0405 = 8 // Enciendo el indicador de IAS } } Var 0914, Link SUBRUTINE // Pinta VS / FPA { L1 = TESTBIT V0009 ,2 // Apagado / Encendido IF L1 = 0 // Encendido { C0 = TESTBIT V0006 ,11 // Modo VS/FPA L0 = V0010 IF C0 // FPA { V0527 = 0 // oo desactivado V0526 = 1 // . decimal activado IF L0 < 0 // Si es negativo { L0 = ABS L0 V0423 = L0 / 10 V0528 = 1 } ELSE { V0423 = L0 / 10 V0528 = 0 } } ELSE // VS { V0527 = 1 // oo activado V0526 = 0 // . decimal desactivado IF L0 < 0 // Si es negativo { L0 = ABS L0 V0423 = L0 / 100 V0528 = 1 } ELSE { V0423 = L0 / 100 V0528 = 0 } } } } Var 0915, Link SUBRUTINE, value 0 // Timer FPA { IF V0915 <> 0 { L0 = V0010 / 10 V0060 = L0 // Cargo valor de entrada en salida offset } } Var 0916, Link SUBRUTINE, value 0 // Timer VS { IF V0916 <> 0 { L0 = V0010 / 100 V0060 = L0 // Cargo valor de entrada en salida offset } }