0 BEGIN PGM 81801_it MM 1 ;Programma NC per calcolare la data e l'ora 2 ;dall'ora di sistema corrente. 3 ;Il controllo numerico ha salvato l'ora di 4 ;sistema corrente nel parametro Q0 nel 5 ;programma chiamante. 6 ;Il valore è l'ora in secondi trascorsi dal 7 ;1.1.1970 ore 00. Siccome si riferisce 8 ;all'ora UTC, è possibile definire la 9 ;differenza di tempo tra ora UTC e ora locale. 10 ;Inserire a tale scopo la differenza in ore 11 ;nel parametro Q50. 12 ;Il controllo numerico salva i valori 13 ;calcolati come descritto di seguito: 14 ;Q1= anno 15 ;Q2= mese 16 ;Q3= giorno 17 ;Q4= ora 18 ;Q5= minuto 19 ;Q6= secondo 20 ;Questi valori possono poi essere impiegati. 21 ; 22 ;Voce della differenza tra ora UTC e ora 23 ;locale in ore Q50 = 1 ;DIFFERENZA IN ORE 24 ; 25 ;Da questo momento non modificare più nulla 26 ;Calcolo dei secondi totali Q10 = Q0 ;Copia dell'ora di sistema Q51 = Q50 * 3600 ;Conversione della differenza di tempo in secondi Q10 = Q10 + Q51 ;Ora di sistema + differenza tempo 27 ;Calcolo dell'anno Q1 = 1969 ;Inizio anno 28 LBL 10 Q1 = Q1 + 1 ;Ulteriore calcolo di un anno Q12 = Q1 / 4 - INT ( Q1 / 4 ) 29 FN 10: IF +Q12 NE +0 GOTO LBL 18 ;Se non divisibile per 4 nessun anno bisestile Q12 = Q1 / 400 - INT ( Q1 / 400 ) 30 FN 9: IF +Q12 EQU +0 GOTO LBL 15 ;Se divisibile per 400 anno bisestile Q12 = Q1 / 100 - INT ( Q1 / 100 ) 31 FN 9: IF +Q12 EQU +0 GOTO LBL 19 ;Se divisibile per 100 nessun anno bisestile 32 LBL 15 Q19 = 366 * 24 * 3600 ;Secondi dell'anno Q20 = 1 ;Merker: anno bisestile Q10 = Q10 - Q19 ;Ora di sistema - anno 33 FN 11: IF +Q10 GT +0 GOTO LBL 10 ;Se ora di sistema positiva, anno non ancora trovato 34 FN 9: IF +0 EQU +0 GOTO LBL 19 ;Anno trovato 35 ; 36 LBL 18 Q19 = 365 * 24 * 3600 ;Secondi dell'anno Q20 = 0 ;Merker: nessun anno bisestile Q10 = Q10 - Q19 ;Ora di sistema - anno 37 FN 11: IF +Q10 GT +0 GOTO LBL 10 ;Se ora di sistema positiva, anno non ancora trovato 38 LBL 19 ;Anno trovato Q10 = Q10 + Q19 ;Secondi residui a inizio anno 39 ; 40 ;Calcolo del mese 41 ;Gennaio Q2 = 1 ;Numero del mese Q12 = 31 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 42 FN 11: IF +Q10 GT +0 GOTO LBL 22 ;Se rimangono secondi residui, salto a febbraio Q10 = Q10 + Q12 * 86400 ;Secondi residui - inizio del mese 43 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 44 ;Febbraio 45 LBL 22 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 28 + Q20 ;Numero di giorni del mese + merker anno bisestile Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 46 FN 11: IF +Q10 GT +0 GOTO LBL 23 ;Se rimangono secondi residui, salto a marzo Q10 = Q10 + Q12 * 86400 ;Secondi residui - inizio del mese 47 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 48 ;Marzo 49 LBL 23 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 31 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 50 FN 11: IF +Q10 GT +0 GOTO LBL 24 ;Se rimangono secondi residui, salto ad aprile Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 51 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 52 ;Aprile 53 LBL 24 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 30 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 54 FN 11: IF +Q10 GT +0 GOTO LBL 25 ;Se rimangono secondi residui, salto a maggio Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 55 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 56 ;Maggio 57 LBL 25 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 31 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 58 FN 11: IF +Q10 GT +0 GOTO LBL 26 ;Se rimangono secondi residui, salto a giugno Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 59 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 60 ;Giugno 61 LBL 26 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 30 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 62 FN 11: IF +Q10 GT +0 GOTO LBL 27 ;Se rimangono secondi residui, salto a luglio Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 63 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 64 ;Luglio 65 LBL 27 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 31 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 66 FN 11: IF +Q10 GT +0 GOTO LBL 28 ;Se rimangono secondi residui, salto ad agosto Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 67 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 68 ;Agosto 69 LBL 28 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 31 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 70 FN 11: IF +Q10 GT +0 GOTO LBL 29 ;Se rimangono secondi residui, salto a settembre Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 71 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 72 ;Settembre 73 LBL 29 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 30 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 74 FN 11: IF +Q10 GT +0 GOTO LBL 30 ;Se rimangono secondi residui, salto a ottobre Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 75 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 76 ;Ottobre 77 LBL 30 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 31 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 78 FN 11: IF +Q10 GT +0 GOTO LBL 31 ;Se rimangono secondi residui, salto a novembre Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 79 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 80 ;Novembre 81 LBL 31 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 30 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 82 FN 11: IF +Q10 GT +0 GOTO LBL 32 ;Se rimangono secondi residui, salto a dicembre Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 83 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 84 ;Dicembre 85 LBL 32 Q2 = Q2 + 1 ;Conteggio del mese Q12 = 31 ;Numero di giorni del mese Q10 = Q10 - Q12 * 86400 ;Secondi residui - secondi del mese 86 FN 11: IF +Q10 GT +0 GOTO LBL 38 ;Se rimangono secondi residui, salto a messaggio di errore Q10 = Q10 + Q12 * 86400 ;Secondi residui a inizio del mese 87 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Salto al calcolo del giorno 88 ;Emissione del messaggio di errore 89 LBL 38 90 FN 14: ERROR= 1088 ; Dati contraddittori 91 ;Calcolo del giorno 92 LBL 39 Q3 = INT ( Q10 / 86400 ) + 1 ;Determinazione del giorno Q10 = Q10 - ( ( Q3 - 1 ) * 86400 ) ;Calcolo dei secondi residui 93 ;Calcolo delle ore Q4 = INT ( Q10 / 3600 ) ;Determinazione delle ore Q10 = Q10 - ( Q4 * 3600 ) ;Calcolo dei secondi residui 94 ;Calcolo dei minuti Q5 = INT ( Q10 / 60 ) ;Determinazione dei minuti Q10 = Q10 - ( Q5 * 60 ) ;Determinazione dei secondi residui 95 ;Calcolo dei secondi Q6 = INT Q10 ;Determinazione dei secondi 96 ;Fine programma 97 END PGM 81801_it MM