0 BEGIN PGM 81801_NL MM 1 ;NC-programma om de datum en tijd te 2 ;berekenen uit de huidige systeemtijd. 3 ;De besturing heeft de huidige systeemtijd 4 ;in het oproepende programma in parameter 5 ;Q0 opgeslagen. 6 ;De waarde is tijd in seconden die sinds 7 ;1.1.1970 0 uur zijn verstreken. Aangezien 8 ;dit betrekking heeft op de UTC-tijd, is 9 ;het mogelijk om het tijdsverschil tussen 10 ;UTC-tijd en lokale tijd te bepalen. Voer 11 ;hiervoor in parameter Q50 het verschil 12 ;in uren in. 13 ;De besturing slaat de berekende waarden 14 ;als volgt op: 15 ;Q1= jaar 16 ;Q2= maand 17 ;Q3= dag 18 ;Q4= uur 19 ;Q5= minuut 20 ;Q6= seconde 21 ;Deze waarden kunt u vervolgens gebruiken. 22 ; 23 ;Invoer van het verschil tussen UTC-tijd 24 ;en lokale tijd in uren Q50 = 1 ;TIJDSVERSCHIL IN UREN 25 ; 26 ;Vanaf hier niets meer wijzigen 27 ;Berekening van het totale aantal seconden Q10 = Q0 ;Systeemtijd kopiëren Q51 = Q50 * 3600 ;Omrekening van het tijdverschil in seconden Q10 = Q10 + Q51 ;Systeemtijd + tijdverschil 28 ;Berekening jaar Q1 = 1969 ;Start jaar 29 LBL 10 Q1 = Q1 + 1 ;Een jaar verder rekenen Q12 = Q1 / 4 - INT ( Q1 / 4 ) 30 FN 10: IF +Q12 NE +0 GOTO LBL 18 ;als niet door 4 deelbaar dan geen schrikkeljaar Q12 = Q1 / 400 - INT ( Q1 / 400 ) 31 FN 9: IF +Q12 EQU +0 GOTO LBL 15 ;als door 400 deelbaar dan schrikkeljaar Q12 = Q1 / 100 - INT ( Q1 / 100 ) 32 FN 9: IF +Q12 EQU +0 GOTO LBL 19 ;als door 100 deelbaar dan geen schrikkeljaar 33 LBL 15 Q19 = 366 * 24 * 3600 ;Jaarseconden Q20 = 1 ;Flag: schrikkeljaar Q10 = Q10 - Q19 ;Systeemtijd - jaar 34 FN 11: IF +Q10 GT +0 GOTO LBL 10 ;als systeemtijd positief is, jaar nog niet gevonden 35 FN 9: IF +0 EQU +0 GOTO LBL 19 ;Jaar gevonden 36 ; 37 LBL 18 Q19 = 365 * 24 * 3600 ;Jaarseconden Q20 = 0 ;Flag: geen schrikkeljaar Q10 = Q10 - Q19 ;Systeemtijd - jaar 38 FN 11: IF +Q10 GT +0 GOTO LBL 10 ;als systeemtijd positief is, jaar nog niet gevonden 39 LBL 19 ;Jaar gevonden Q10 = Q10 + Q19 ;Resterende seconden aan het begin van het jaar 40 ; 41 ;Berekening maand 42 ;Januari Q2 = 1 ;Aantal maanden Q12 = 31 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 43 FN 11: IF +Q10 GT +0 GOTO LBL 22 ;Als resterende seconden overblijven, naar februari springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 44 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 45 ;Februari 46 LBL 22 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 28 + Q20 ;Aantal dagen per maand + flag schrikkeljaar Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 47 FN 11: IF +Q10 GT +0 GOTO LBL 23 ;Als resterende seconden overblijven, naar maart springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 48 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 49 ;Maart 50 LBL 23 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 31 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 51 FN 11: IF +Q10 GT +0 GOTO LBL 24 ;Als resterende seconden overblijven, naar april springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 52 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 53 ;April 54 LBL 24 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 30 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 55 FN 11: IF +Q10 GT +0 GOTO LBL 25 ;Als resterende seconden overblijven, naar mei springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 56 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 57 ;Mei 58 LBL 25 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 31 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 59 FN 11: IF +Q10 GT +0 GOTO LBL 26 ;Als resterende seconden overblijven, naar juni springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 60 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 61 ;Juni 62 LBL 26 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 30 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 63 FN 11: IF +Q10 GT +0 GOTO LBL 27 ;Als resterende seconden overblijven, naar juli springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 64 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 65 ;Juli 66 LBL 27 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 31 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 67 FN 11: IF +Q10 GT +0 GOTO LBL 28 ;Als resterende seconden overblijven, naar augustus springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 68 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 69 ;Augustus 70 LBL 28 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 31 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 71 FN 11: IF +Q10 GT +0 GOTO LBL 29 ;Als resterende seconden overblijven, naar september springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 72 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 73 ;September 74 LBL 29 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 30 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 75 FN 11: IF +Q10 GT +0 GOTO LBL 30 ;Als resterende seconden overblijven, naar oktober springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 76 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 77 ;Oktober 78 LBL 30 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 31 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 79 FN 11: IF +Q10 GT +0 GOTO LBL 31 ;Als resterende seconden overblijven, naar november springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 80 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 81 ;November 82 LBL 31 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 30 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Resterende seconden - maandelijkse seconden 83 FN 11: IF +Q10 GT +0 GOTO LBL 32 ;Als resterende seconden overblijven, naar december springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 84 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 85 ;December 86 LBL 32 Q2 = Q2 + 1 ;Maand bij tellen Q12 = 31 ;Aantal dagen per maand Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 87 FN 11: IF +Q10 GT +0 GOTO LBL 38 ;Als resterende seconden overblijven, naar foutmelding springen Q10 = Q10 + Q12 * 86400 ;Resterende seconden aan het begin van de maand 88 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprong naar berekening dag 89 ;Uitvoer foutmelding 90 LBL 38 91 FN 14: ERROR= 1088 ; Tegenstrijdige gegevens 92 ;Berekening dag 93 LBL 39 Q3 = INT ( Q10 / 86400 ) + 1 ;Dag bepalen Q10 = Q10 - ( ( Q3 - 1 ) * 86400 ) ;Berekening resterende seconden 94 ;Berekening uren Q4 = INT ( Q10 / 3600 ) ;Uren bepalen Q10 = Q10 - ( Q4 * 3600 ) ;Berekening resterende seconden 95 ;Berekening minuten Q5 = INT ( Q10 / 60 ) ;Minuten bepalen Q10 = Q10 - ( Q5 * 60 ) ;Resterende seconden bepalen 96 ;Berekening seconden Q6 = INT Q10 ;Seconden bepalen 97 ;Einde programma 98 END PGM 81801_NL MM