// ***************************************************************************** // * Config_SIOC By Manolo Vélez - www.opencockpits.com // ***************************************************************************** // * FileName : chrono737.txt // * Date : 15/08/2013 - Ver 1.11 // ***************************************************************************** // ----------------------------------------------------------------------------- // Script basado en el desarrollado por Carlos López y modificado por Manuel Vélez // // // Este Reloj cronómetro, basado en el funcionamiento del mismo en el B737NG dispone // de dos displays de 4 dígitos cada uno. En el superior visualizamos el año, Mes y día // o la hora en formato HH.MM o MM.SS, cambiando entre estas 4 opciones con el botón // TIME/DATE. Así mismo el botón SET activará el parpadeo de los dígitos para modificarlos // mediante los botones + y -, por lo que no es preciso entrar en el FS para modificar // la fecha o la hora, sino que lo podemos hacer directamente desde aqui, // actualizándose automáticamente en el FS. // // En este Script no voy a usar ningún timer, de modo que el propio reloj del FS // es el que va a dar el pulso de reloj para que este Reloj-Cronómetro funcione. // Para ello, todo el script gira en torno al funcionamiento del Offset 4 del IOCP, // que almacena el dato del segundo de reloj del FS. Esto es así, porque he comprobado // que al abrir alguna opción de menú del FS, éste para el reloj, por lo que de éste // modo, siempre nuestro reloj siempre visualizará el dato exacto del FS. // Para esto, se ha creado una variable general que contempla los diferentes estados // di visualización de los displays. Por tanto, en función del valor de dicha variable // así actuará el script. Estos son los diferentes estados de la variable Time_Date_Year // // Time_Date_Year = 0 // Time_Date_Year = 1 Visualizo el año // Time_Date_Year = 2 Visualizo el dia y mes // Time_Date_Year = 3 Visualizo la hora Zulu // Time_Date_Year = 4 Visualizo Minutos y Segundos // // Para modificar la fecha o la hora, se pondran en intermitente cada // dígito. // // Notar que se enciende el punto del dígito 2 para separar las horas de los minutos, los minutos // de los segundos o el día del mes, dependiendo de lo que estemos viendo. // // Disponemos de dos botones para el control de los displays inferiores. El botón CHR activa // el cronómetro y el botón ET Elapsed Time o tiempo parcial. // // Función CHR. Al pulsar lo // que vemos en el display es el cronómetro. La segunda vez que lo pulsamos lo iniciamos. La tercera // lo paramos y así sucesivamente. Si queremos ponerlo a cero, pulsamos el botón RST. La información // se nos muestra en formato MM:SS y cuando llegamos a 59:59 volvemos a iniciar el cronómetro desde cero. // // Función ET. Al pulsar su pulsador se muestra // el display es el Elapsed Time. La segunda vez que lo pulsamos lo iniciamos. La tercera // lo paramos y así sucesivamente. Si queremos ponerlo a cero, pulsamos el botón RST. La información se // nos muestra en formato MM:SS durante la primera hora, luego lo vemos en formato HH_MM. // // // // En la modificación de la fecha se tiene en cuenta si el año es bisiesto o no, así que para // saber más del calculo del año bisiesto : // // http://es.wikipedia.org/wiki/A%C3%B1o_bisiesto // http://es.wikipedia.org/wiki/Algoritmo_bisiesto // http://upload.wikimedia.org/wikipedia/commons/2/27/Graf_algo_bisiesto.PNG // // ----------------------------------------------------------------------------- Var 0000, Value 0 // Inicializacion de valores de variables { &D_CHRBRIGHT = 120 &PARPADEO_U = 0 &PARPADEO_D = 1 &Time_Date_Year = 3 &Disp_Year = &Zulu_Year_Set &Year_to_Modif = &Zulu_Year_Set // Pasamos el año a una vble interna &Modif_Year = 0 &Estado_CHR = 1 &Estado_ET = 1 &CHR_ET_ToDisp = -1 &DECIMAL_C = 0 &Aguja_Segundos = 45 } // // ----------------------------------------------------------------------------- // // VARIABLES PROPIAS // // ----------------------------------------------------------------------------- // Var 0010, name Time_Date_Year // Indice para digitos Time-Date-Year Var 0012, name Modif_Year // Activamos control modificacion año. 0=Descativado, 1=Activado Var 0014, name Modif_DDMM // Activamos control modificacion Dia.Mes -> 0=Descativado, 1=Mes 2=Día Var 0015, name Modif_HHMM // Activamos control modificacion Hora.Minutos-> 0=Descativado, 1=Minutos 2=Horas Var 0016, name Year_to_Modif // Guarda el año para modificar Var 0018, name DD_to_Modif // Guarda el Dia para modificar Var 0020, name MM_to_Modif // Guarda el Mes para modificar Var 0022, name CHR_ET_ToDisp // Controla si vemos el CHR o el ET en el display inferior. 0=CHR 1=ET Var 0024, name CHR_Min // Acumula los Minutos del cronometro Var 0026, name CHR_Sec // Acumula los Segundos del cronometro Var 0028, name Estado_CHR // COntrola el estado del Botón CHR. 0 -> Pone Crono en display // 2 -> Inicia CHR o continúa // 3 -> STOP Cronómetro. Var 0030, name ET_Hr // Acumula las Horas del ET (Elapsed Time) Var 0032, name ET_Min // Acumula los Minutos del ET (Elapsed Time) Var 0034, name ET_Sec // Acumula los Segundos del ET (Elapsed Time) Var 0036, name Estado_ET // COntrola el estado del Botón ET. 0 -> Pone ET en display // 2 -> Inicia ET o continúa // 3 -> STOP ET Var 0037, name Limit_DD_Mes // Almacena el total de días que tiene el mes activo Var 0038, name DayofYear // Almacena el día del año Var 0039, name M_MOTOR, Link IOCARD_MOTOR, Device 16, Output 1, Aceleration 200 Var 0040, name Aguja_Segundos { L0 = 4092 / 60 L0 = L0 * &Aguja_Segundos &M_MOTOR = ROUND L0 } Var 0041, name PARPADEO_U, link SUBRUTINE { &BLINK = 0 } Var 0042, name PARPADEO_D, Link SUBRUTINE { &BLINK2 = 0 } Var 0043, name HH_to_Modif // Guarda la hora para modificar Var 0044, name MI_to_Modif // Guarda los minutos para modificar // ----------------------------------------------------------------------------- // // VARIABLES FSUIPC // // ----------------------------------------------------------------------------- Var 0050, name Clock_Seconds, link FSUIPC_INOUT, offset $023A, length 1 // Segundos del Reloj del FS { IF &Time_Date_Year = 1 // Visualizo el año { IF &Modif_Year = 1 // Si estamos en activacion del control del año { &Disp_Year = &Year_to_Modif &Disp_Year = Delay -999999, 50 } } IF &Time_Date_Year = 2 // Visualizo el dia y mes { IF &Modif_DDMM = 1 // Si estamos en activacion del control modificacion Mes { &Disp_Month_Min = &MM_to_Modif &Disp_Month_Min = Delay -999999, 50 &Disp_Day_Hour = &DD_to_Modif } IF &Modif_DDMM = 2 // Si estamos en activacion del control modificacion Día { &Disp_Day_Hour = &DD_to_Modif &Disp_Day_Hour = Delay -999999, 50 &Disp_Month_Min = &MM_to_Modif } } IF &Time_Date_Year = 3 // Visualizo la hora Zulu { CALL &Show_Display IF &Modif_HHMM = 1 // Si estamos en activacion del control modificacion Minutos { &Disp_Month_Min = &MI_to_Modif &Disp_Month_Min = Delay -999999, 50 &Disp_Day_Hour = &HH_to_Modif } IF &Modif_HHMM = 2 // Si estamos en activacion del control modificacion Horas { &Disp_Day_Hour = &HH_to_Modif &Disp_Day_Hour = Delay -999999, 50 &Disp_Month_Min = &MI_to_Modif } } IF &Time_Date_Year = 4 // Visualizo Minutos y Segundos { CALL &Show_Display } If &Estado_CHR = 2 // 2 -> Inicia CHR o continúa { IF &CHR_ET_ToDisp = 0 { &PARPADEO_D = 1 } &CHR_Sec = &CHR_Sec + 1 If &CHR_Sec > 59 { &CHR_Sec = 0 &CHR_Min = &CHR_Min + 1 If &CHR_Min > 59 // Cuando llegamos a 1 hora se pone a cero { &CHR_Min = 0 } } &Aguja_Segundos = &CHR_Sec // Movemos la aguja de los segundos si el CHR esta funcionando } If &Estado_ET = 2 // 2 -> Inicia ET o continúa { IF &CHR_ET_ToDisp = 1 { &PARPADEO_D = 1 } &ET_Sec = &ET_Sec + 1 If &ET_Sec > 59 { &ET_Sec = 0 &ET_Min = &ET_Min + 1 If &ET_Min > 59 { &ET_Min = 0 &ET_Hr = &ET_Hr + 1 } } } If &CHR_ET_ToDisp = 0 // Mostramos el CHR en los displays inferiores { Call &Ver_CHR } else // Mostramos el ET en los displays inferiores { if &CHR_ET_ToDisp = 1 { Call &Ver_ET } } } Var 0052, name Zulu_Hour, link FSUIPC_INOUT, offset $023B, length 1 // Hora Zulu. Lectura y escritura { CALL &Show_Display } Var 0054, name Zulu_Minute, link FSUIPC_INOUT, offset $023C, length 1 // Minutos Zulu. Lectura y escritura { CALL &Show_Display } Var 0056, name Day_of_Year, link FSUIPC_INOUT, offset $023E, length 2 // Numero del día del año. Lectura y escritura. Numero total de dias al año Var 0058, name Day_of_Month, link FSUIPC_IN, offset $023D, length 1 // Día del mes correspondiente. Sólo lectura { CALL &Show_Display } Var 0060, name Current_Month, link FSUIPC_IN, offset $0242, length 1 // Numero del mes. Sólo lectura { CALL &Show_Display } Var 0062, name Zulu_Year_Set, link FSUIPC_INOUT, offset $0240, length 2 // Año. Lectura y escritura { &Year_to_Modif = &Zulu_Year_Set Call &Chk_Bisiesto // Comprobamos si es bisiesto } // ----------------------------------------------------------------------------- // // VARIABLES IOCARDS ------------ DISPLAYS ------------ // // ----------------------------------------------------------------------------- Var 0100, name Disp_Year, Link IOCARD_DISPLAY, Device 16, Digit 0, Numbers 4 // UP Displays Year Var 0101, name Disp_Day_Hour, Link IOCARD_DISPLAY, Device 16, Digit 2, Numbers 2 // UP Displays Day or Hour Var 0102, name Disp_Month_Min, Link IOCARD_DISPLAY, Device 16, Digit 0, Numbers 2 // UP Displays Month or Minutes Var 0104, name Disp_DWN_Min, Link IOCARD_DISPLAY, Device 16, Digit 6, Numbers 2 // Down Displays CHR - ET -> Min Var 0105, name Disp_DWN_Sec, Link IOCARD_DISPLAY, Device 16, Digit 4, Numbers 2 // Down Displays CHR - ET -> Sec Var 0108, name D_CHRBRIGHT, Link IOCARD_DISPLAY, Device 16, Digit 16, Numbers 3 Var 0113, name DECIMAL_U, Link IOCARD_OUT, Device 16, Output 20 Var 0114, name DECIMAL_D, Link IOCARD_OUT, Device 16, Output 21 Var 0115, name DECIMAL_C, Link IOCARD_OUT, Device 16, Output 22 // ----------------------------------------------------------------------------- // // VARIABLES IOCARDS ------------ ENTRADAS ------------ // // ----------------------------------------------------------------------------- // Var 0120, name SW_Time_Date, Link IOCARD_SW, Device 16, Input 1, Type P // ----------------------------------> Botón TIME-DATE { IF &Modif_Year = 0 // Si NO estamos en activacion del control del Año-Set (Botón SET) { &Time_Date_Year = &Time_Date_Year + 1 IF &Modif_DDMM > 0 // Si estoy modificando dia del mes o el mes { &Modif_DDMM = 0 } IF &Modif_HHMM > 0 // Si estoy modificando dia hora o minutos { &Modif_HHMM = 0 } } IF &Time_Date_Year > 4 // Comprobamos si nos salimos de margenes { &Time_Date_Year = 1 // Ponemos a 1 } Call &Show_Display // Mostramos en displays el dato correspondiente If &Estado_CHR = 3 // Si el CHR esta parado { // &Aguja_Segundos = 9000 // Movemos la aguja de los segundos a 15 para ver los displays mejor } } Var 0122, name SW_SET, Link IOCARD_SW, Device 16, Input 2, Type P // ----------------------------------> Botón SET { IF &Time_Date_Year = 1 // Si estoy visualizando el año { IF &Modif_Year = 0 // Si NO estoy modificando el año { &Modif_Year = 1 // Activamos control modificacion año &Year_to_Modif = &Zulu_Year_Set // Pasamos el año a una vble para modificar } else { Call &Chk_Bisiesto // Comprobamos si es bisiesto call &calc_DayofYear &Day_of_Year = &DayofYear // Devolvemos el día al FS para que lo modifique &Modif_Year = 0 // Desactivamos control modificacion año &Zulu_Year_Set = &Year_to_Modif // Devolvemos el año al FS para que lo modifique Call &Show_Display // Mostramos el año } } IF &Time_Date_Year = 2 // Si estoy visualizando el dia del mes y el mes (DD.MM) { IF &Modif_DDMM = 0 // Si NO estoy modificando dia del mes y el mes { &Modif_DDMM = 1 // Activamos control modificacion Mes &MM_to_Modif = &Current_Month // Pasamos el mes a una vble para modificar &DD_to_Modif = &Day_of_Month &PARPADEO_U = 0 } else { IF &Modif_DDMM = 1 // Si estamos modificando el mes pasamos a modificar el día { Call &Chk_DiasDelMes // Calculamos cuantos dias tiene el mes que hemos modificado &Modif_DDMM = 2 // Activamos control modificacion Día &DD_to_Modif = &Day_of_Month // Pasamos el día a una vble para modificar &Disp_Month_Min = Delay &MM_to_Modif, 50 } else // Terminamos de modificar así que mandamos valores al FS { call &calc_DayofYear &Day_of_Year = &DayofYear // Devolvemos el día al FS para que lo modifique &PARPADEO_U = 2 &Modif_DDMM = 0 call &Show_Display &show_Display = Delay 1, 50 } } } IF &Time_Date_Year = 3 // Si estoy visualizando el dia del Hora y minutos (HH.MM) { IF &Modif_HHMM = 0 // Si NO estoy modificando Nada { &Modif_HHMM = 1 // Activamos control modificacion Minutos &MI_to_Modif = &Zulu_Minute // Pasamos minutos &HH_to_Modif = &Zulu_Hour // Pasamos Horas &PARPADEO_U = 0 } else { IF &Modif_HHMM = 1 // Si estamos modificando Minutos pasamos a modificar Horas { // Call &Chk_DiasDelMes &Modif_HHMM = 2 // Activamos control modificacion Día &HH_to_Modif = &Zulu_Hour // Pasamos el día a una vble para modificar *OJO* &Disp_Month_Min = Delay &MI_to_Modif, 50 } else // Terminamos de modificar así que mandamos valores al FS { //call &calc_DayofYear //&Day_of_Year = &DayofYear // Devolvemos el día al FS para que lo modifique *OJO* &Zulu_Hour = &HH_to_Modif &Zulu_Minute = &MI_to_Modif &PARPADEO_U = 2 &Modif_HHMM = 0 call &Show_Display &show_Display = Delay 1, 50 } } } } Var 0124, name SW_CHR, Link IOCARD_SW, Device 16, Input 0 // ----------------------------------> Botón CHR { if &SW_CHR = 1 { if &CHR_ET_ToDisp = -1 { &CHR_ET_ToDisp = 0 &Aguja_Segundos = 0 &DECIMAL_C = 1 &DECIMAL_D = 1 } else { &DECIMAL_C = 1 Call &Ver_CHR If &CHR_ET_ToDisp = 1 // Venimos de la Función ET { &CHR_ET_ToDisp = 0 // Acivamos control sobre el display para CHR } else // Ya estabamos en la función CHR { &Estado_CHR = &Estado_CHR + 1 // Cambiamos el estado de CHR } If &Estado_CHR > 3 // Comprobamos limite del estado del CHR { &Estado_CHR = 2 // 2 -> Inicia CHR o continúa 3 -> STOP Cronómetro. } If &Estado_CHR <> 2 { &PARPADEO_D = 2 } } } } Var 0125, name SW_ET, Link IOCARD_SW, Device 16, Input 6, type P // ----------------------------------> Botón ET { if &CHR_ET_ToDisp = -1 { &CHR_ET_ToDisp = 0 &Aguja_Segundos = 0 &DECIMAL_C = 1 &DECIMAL_D = 1 } else { &DECIMAL_C = 0 Call &Ver_ET If &CHR_ET_ToDisp = 0 // Venimos de la Función CHR { &CHR_ET_ToDisp = 1 // Acivamos control sobre el display para ET } else // Ya estabamos en la función ET { &Estado_ET = &Estado_ET + 1 // Cambiamos el estado de ET } If &Estado_ET > 3 // Comprobamos limite del estado del ET { &Estado_ET = 2 // 2 -> Inicia ET o continúa 3 -> STOP ET } If &Estado_ET <> 2 { &PARPADEO_D = 2 } } } Var 0126, Link IOCARD_SW, Device 16, Input 5, type P // ----------------------------------> Botón RST { if &SW_CHR = 1 { &CHR_ET_ToDisp = -1 &Estado_CHR = 1 &Estado_ET = 1 &DECIMAL_C = 1 &Aguja_Segundos = 45 &Disp_DWN_Min = -999999 &Disp_DWN_Sec = -999999 &DECIMAL_D = 0 &CHR_Min = 0 &CHR_Sec = 0 &ET_Hr = 0 &ET_Min = 0 &ET_Sec = 0 &DECIMAL_C = 0 } else { if &CHR_ET_ToDisp = -1 { &CHR_ET_ToDisp = 0 &Aguja_Segundos = 0 &DECIMAL_C = 1 &DECIMAL_D = 1 } else { If &CHR_ET_ToDisp = 0 { &CHR_Min = 0 // Ponemos a cero los minutos del CHR &CHR_Sec = 0 // Ponemos a cero los segundos del CHR &Aguja_Segundos = 0 Call &Ver_CHR } else { &ET_Hr = 0 // Ponemos a cero la hora del ET &ET_Min = 0 // Ponemos a cero los minutos del ET &ET_Sec = 0 // Ponemos a cero los segundos del ET Call &Ver_ET } } } } Var 0127, Link IOCARD_SW, Device 16, Input 3, type P // ----------------------------------> Botón + { IF &Modif_Year = 1 // Si estamos en activacion del control del año { &Year_to_Modif = &Year_to_Modif + 1 &Disp_Year = &Year_to_Modif } IF &Modif_DDMM = 1 // Si estamos en activacion del control del Mes { &MM_to_Modif = &MM_to_Modif + 1 If &MM_to_Modif > 12 { &MM_to_Modif = 1 } &Disp_Month_Min = &MM_to_Modif } IF &Modif_DDMM = 2 // Si estamos en activacion del control del Día { &DD_to_Modif = &DD_to_Modif + 1 If &DD_to_Modif > &Limit_DD_Mes { &DD_to_Modif = 1 } &Disp_Day_Hour = &DD_to_Modif } IF &Modif_HHMM = 1 // Si estamos en activacion del control de Minutos { &MI_to_Modif = &MI_to_Modif + 1 If &MI_to_Modif > 59 { &MI_to_Modif = 0 } &Disp_Month_Min = &MI_to_Modif } IF &Modif_HHMM = 2 // Si estamos en activacion del control de Horas { &HH_to_Modif = &HH_to_Modif + 1 If &HH_to_Modif > 23 { &HH_to_Modif = 0 } &Disp_Day_Hour = &HH_to_Modif } } Var 0128, Link IOCARD_SW, Device 16, Input 4, type P // ----------------------------------> Botón - { IF &Modif_Year = 1 // Si estamos en activacion del control del año { &Year_to_Modif = &Year_to_Modif - 1 &Disp_Year = &Year_to_Modif } IF &Modif_DDMM = 1 // Si estamos en activacion del control del Mes { &MM_to_Modif = &MM_to_Modif - 1 If &MM_to_Modif < 1 { &MM_to_Modif = 12 } &Disp_Month_Min = &MM_to_Modif } IF &Modif_DDMM = 2 // Si estamos en activacion del control del Día { &DD_to_Modif = &DD_to_Modif - 1 If &DD_to_Modif < 1 { &DD_to_Modif = &Limit_DD_Mes } &Disp_Day_Hour = &DD_to_Modif } IF &Modif_HHMM = 1 // Si estamos en activacion del control de Minutos { &MI_to_Modif = &MI_to_Modif - 1 If &MI_to_Modif < 0 { &MI_to_Modif = 59 } &Disp_Month_Min = &MI_to_Modif } IF &Modif_HHMM = 2 // Si estamos en activacion del control de Horas { &HH_to_Modif = &HH_to_Modif - 1 If &HH_to_Modif < 0 { &HH_to_Modif = 23 } &Disp_Day_Hour = &HH_to_Modif } } // // ----------------------------------------------------------------------------- // // SUBRUTINAS // // ----------------------------------------------------------------------------- // Var 0200, name Show_Display, Link SUBRUTINE // Muestra el año { &PARPADEO_U = 0 IF &Time_Date_Year = 1 // Visualizo el año { &Disp_Year = -999999 // Apagamos el año &Disp_Year = &Zulu_Year_Set } IF &Time_Date_Year = 2 // Visualizo el dia y mes { &Disp_Day_Hour = &Day_of_Month &Disp_Month_Min = &Current_Month &PARPADEO_U = 2 } IF &Time_Date_Year = 3 // Visualizo la hora Zulu y Minutos { &Disp_Day_Hour = &Zulu_Hour &Disp_Month_Min = &Zulu_Minute &PARPADEO_U = 1 } IF &Time_Date_Year = 4 // Visualizo Minutos y Segundos { &Disp_Day_Hour = &Zulu_Minute &Disp_Month_Min = &Clock_Seconds &PARPADEO_U = 1 } } Var 0202, name Ver_CHR, Link SUBRUTINE // Pasa CHR al display { &Disp_DWN_Min = &CHR_Min // Mostramos los minutos del CHR en Display Down &Disp_DWN_Sec = &CHR_Sec // Mostramos los minutos del CHR en Display Down } Var 0204, name Ver_ET, Link SUBRUTINE // Pasa ET al display { If &ET_Hr = 0 // Durante la primera hora mostramos MM:SS { &Disp_DWN_Min = &ET_Min // Mostramos los minutos del ET en Display Down &Disp_DWN_Sec = &ET_Sec // Mostramos los segundos del ET en Display Down } else // Despues mostramos HH:MM { &Disp_DWN_Min = &ET_Hr // Mostramos la hora del ET en Display Down &Disp_DWN_Sec = &ET_Min // Mostramos los minutos del ET en Display Down } } Var 0206, name Chk_Bisiesto, Link SUBRUTINE // Comprueba si el año es bisisesto { L0 = MOD &Zulu_Year_Set ,4 // L0 acumula el resto de la división IF L0 = 0 { &Chk_Bisiesto = 1 // No Bisiesto = 0 Bisiesto = 1 } ELSE { L0 = MOD &Zulu_Year_Set ,400 IF L0 = 0 { L0 = MOD &Zulu_Year_Set ,100 IF L0 = 0 { &Chk_Bisiesto = 1 // No Bisiesto = 0 Bisiesto = 1 } ELSE { &Chk_Bisiesto = 0 // No Bisiesto = 0 Bisiesto = 1 } } ELSE { &Chk_Bisiesto = 0 // No Bisiesto = 0 Bisiesto = 1 } } } Var 0208, name Chk_DiasDelMes, Link SUBRUTINE // Calcula cuantos días tiene el mes // 31 días tienen ENE, MAR, MAY, JUL, AGO, OCT, DIC // 30 días tienen ABR, JUN, SEP, NOV // 28 días tiene FEB excepto los bisiestos que tiene 29 { If &MM_to_Modif = 1 // ENE { &Limit_DD_Mes = 31 } If &MM_to_Modif = 2 // FEB { If &Chk_Bisiesto = 0 // Si no es bisiesto { &Limit_DD_Mes = 28 } else // Si es bisiesto { &Limit_DD_Mes = 29 } } If &MM_to_Modif = 3 // MAR { &Limit_DD_Mes = 31 } If &MM_to_Modif = 4 // ABR { &Limit_DD_Mes = 30 } If &MM_to_Modif = 5 // MAY { &Limit_DD_Mes = 31 } If &MM_to_Modif = 6 // JUN { &Limit_DD_Mes = 30 } If &MM_to_Modif = 7 // JUL { &Limit_DD_Mes = 31 } If &MM_to_Modif = 8 // AGO { &Limit_DD_Mes = 31 } If &MM_to_Modif = 9 // SEP { &Limit_DD_Mes = 30 } If &MM_to_Modif = 10 // OCT { &Limit_DD_Mes = 31 } If &MM_to_Modif = 11 // NOV { &Limit_DD_Mes = 30 } If &MM_to_Modif = 12 // DIC { &Limit_DD_Mes = 31 } } Var 0210, name Calc_DayofYear, Link SUBRUTINE // Calcula el dia del mes en relacion al año total // // Así el 1 de ENE es el calc_DayofYear = 1 y el // // 31 de DIC es el 365 excepto en bisiesto que es el 366 { If &MM_to_Modif = 1 // ENE 31 { &DayofYear = &DD_to_Modif // Paso a Calc_DayofYear el día del mes de Enero } If &MM_to_Modif = 2 // FEB 28 { &DayofYear = &DD_to_Modif + 31 // Le sumo a los días del mes los del mes anterior } If &MM_to_Modif = 3 // MAR 31 { &DayofYear = &DD_to_Modif + 59 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 4 // ABR 30 { &DayofYear = &DD_to_Modif + 90 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 5 // MAY 31 { &DayofYear = &DD_to_Modif + 120 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 6 // JUN 30 { &DayofYear = &DD_to_Modif + 151 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 7 // JUL 31 { &DayofYear = &DD_to_Modif + 181 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 8 // AGO 31 { &DayofYear = &DD_to_Modif + 212 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 9 // SEP 30 { &DayofYear = &DD_to_Modif + 243 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 10 // OCT 31 { &DayofYear = &DD_to_Modif + 273 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 11 // NOV 30 { &DayofYear = &DD_to_Modif + 304 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif = 12 // DIC 31 { &DayofYear = &DD_to_Modif + 334 // Le sumo a los días del mes los de los meses anteriores } If &MM_to_Modif > 1 { If &Chk_Bisiesto = 1 // Si es bisiesto { &DayofYear = &DayofYear + 1 } } &Current_Month = &MM_to_Modif &Day_of_Month = &DD_to_Modif } Var 212, name BLINK, Link SUBRUTINE { IF &BLINK = 0 { IF &PARPADEO_U = 0 // No parpadea y queda apagado { &DECIMAL_U = 0 } IF &PARPADEO_U = 1 // Parpadea { &DECIMAL_U = 1 &BLINK = DELAY 1, 50 } IF &PARPADEO_U = 2 // No parpadea y queda encendido { &DECIMAL_U = 1 } } ELSE { IF &PARPADEO_U = 0 { &DECIMAL_U = 0 } IF &PARPADEO_U = 1 { &DECIMAL_U = 0 } IF &PARPADEO_U = 2 { &DECIMAL_U = 1 } } } Var 214, name BLINK2, Link SUBRUTINE { IF &BLINK2 = 0 { IF &PARPADEO_D = 0 // No parpadea y queda apagado { &DECIMAL_D = 0 } IF &PARPADEO_D = 1 // Parpadea { &DECIMAL_D = 1 &BLINK2 = DELAY 1, 50 } IF &PARPADEO_D = 2 // No parpadea y queda encendido { &DECIMAL_D = 1 } } ELSE { IF &PARPADEO_D = 0 { &DECIMAL_D = 0 } IF &PARPADEO_D = 1 { &DECIMAL_D = 0 } IF &PARPADEO_D = 2 { &DECIMAL_D = 1 } } }