0 BEGIN PGM 81801_DE MM 1 ;NC-Programm, um aus der aktuellen Systemzeit 2 ;das Datum und die Uhrzeit berechnet werden. 3 ;Die aktuelle Systemzeit hat die Steuerung im 4 ;rufenden Programm im Parameter Q0 gespeichert. 5 ;Der Wert ist Zeit in Sekunden, die seit dem 6 ;1.1.1970 0Uhr vergangen sind. Da sich dies 7 ;auf die UTC-Zeit bezieht, gib es die 8 ;Moeglichkeit die Zeitdifferenz zwischen 9 ;UTC-Zeit und Ortszeit zu definieren. Tragen 10 ;Sie dazu im Parameter Q50 die Differenz in 11 ;Stunden ein. 12 ;Die Steuerung speichert die errechneten Werte 13 ;wie folgt: 14 ;Q1= Jahr 15 ;Q2= Monat 16 ;Q3= Tag 17 ;Q4= Stunde 18 ;Q5= Minute 19 ;Q6= Sekunde 20 ;Diese Werte koennen Sie dann nutzen. 21 ; 22 ;Eintrag der Differenz zwischen UTC-Zeit und 23 ;Ortszeit in Stunden 24 Q50 = 2 ;ZEITDIFFERENZ IN STUNDEN 25 ; 26 ;Ab hier nichts mehr aendern 27 ;Berechnung der Gesammtsekunden 28 Q10 = Q0 ; Systemzeit kopieren 29 Q51 = Q50 * 3600 ;Umrechnung der Zeitdifferenz in Sekunden 30 Q10 = Q10 + Q51 ;Systemzeit + Zeitdifferenz 31 ;Berechnung Jahr 32 Q1 = 1969 ;Start Jahr 33 LBL 10 34 Q1 = Q1 + 1 ;Ein Jahr weiterrechnen 35 Q12 = Q1 / 4 - INT ( Q1 / 4 ) 36 FN 10: IF +Q12 NE +0 GOTO LBL 18 ; wenn nicht durch 4 teilbar dann kein Schaltjahr 37 Q12 = Q1 / 400 - INT ( Q1 / 400 ) 38 FN 9: IF +Q12 EQU +0 GOTO LBL 15 ; wenn durch 400 teilbar dann Schaltjahr 39 Q12 = Q1 / 100 - INT ( Q1 / 100 ) 40 FN 9: IF +Q12 EQU +0 GOTO LBL 19 ; wenn durch 100 teilbar dann kein Schaltjahr 41 LBL 15 42 Q19 = 366 * 24 * 3600 ; Jahressekunden 43 Q20 = 1 ; Merker: Schaltjahr 44 Q10 = Q10 - Q19 ; Systemzeit - Jahr 45 FN 11: IF +Q10 GT +0 GOTO LBL 10 ; wenn Systemzeit positiv, Jahr noch nicht gefunden 46 FN 9: IF +0 EQU +0 GOTO LBL 19 ; Jahr gefunden 47 ; 48 LBL 18 49 Q19 = 365 * 24 * 3600 ; Jahressekunden 50 Q20 = 0 ; Merker: kein Schaltjahr 51 Q10 = Q10 - Q19 ; Systemzeit - Jahr 52 FN 11: IF +Q10 GT +0 GOTO LBL 10 ; wenn Systemzeit positiv, Jahr noch nicht gefunden 53 LBL 19 ; Jahr gefunden 54 Q10 = Q10 + Q19 ;Restsekunden zu Jahresbeginn 55 ; 56 ;Berechnung Monat 57 ;Januar 58 Q2 = 1 ;Monatszahl 59 Q12 = 31 ;Anzahl Tage im Monat 60 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 61 FN 11: IF +Q10 GT +0 GOTO LBL 22 ;Wenn Restsekunden bleiben spring zu Februar 62 Q10 = Q10 + Q12 * 86400 ;Restsekunden Monatsanfang 63 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 64 ;Februar 65 LBL 22 66 Q2 = Q2 + 1 ;Monat hochzaehlen 67 Q12 = 28 + Q20 ;Anzahl Tage im Monat + Merker Schaltjahr 68 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 69 FN 11: IF +Q10 GT +0 GOTO LBL 23 ;Wenn Restsekunden bleiben Sprung zu Maerz 70 Q10 = Q10 + Q12 * 86400 ;Restsekunden Monatsanfang 71 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 72 ;Maerz 73 LBL 23 74 Q2 = Q2 + 1 ;Monat hochzaehlen 75 Q12 = 31 ;Anzahl der Tage im Monat 76 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 77 FN 11: IF +Q10 GT +0 GOTO LBL 24 ;Wenn Restsekunden bleiben Sprung zu April 78 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 79 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 80 ;April 81 LBL 24 82 Q2 = Q2 + 1 ;Monat hochzaehlen 83 Q12 = 30 ;Anzahl der Tage im Monat 84 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 85 FN 11: IF +Q10 GT +0 GOTO LBL 25 ;Wenn Restsekunden bleiben Sprung zu Mai 86 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 87 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 88 ;Mai 89 LBL 25 90 Q2 = Q2 + 1 ;Monat hochzaehlen 91 Q12 = 31 ;Anzahl der Tage im Monat 92 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 93 FN 11: IF +Q10 GT +0 GOTO LBL 26 ;Wenn Restsekunden bleiben Sprung zu Juni 94 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 95 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 96 ;Juni 97 LBL 26 98 Q2 = Q2 + 1 ;Monat hochzaehlen 99 Q12 = 30 ;Anzahl der Tage im Monat 100 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 101 FN 11: IF +Q10 GT +0 GOTO LBL 27 ;Wenn Restsekunden bleiben Sprung zu Juli 102 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 103 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 104 ;Juli 105 LBL 27 106 Q2 = Q2 + 1 ;Monat hochzaehlen 107 Q12 = 31 ;Anzahl der Tage im Monat 108 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 109 FN 11: IF +Q10 GT +0 GOTO LBL 28 ;Wenn Restsekunden bleiben Sprung zu August 110 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 111 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 112 ;August 113 LBL 28 114 Q2 = Q2 + 1 ;Monat hochzaehlen 115 Q12 = 31 ;Anzahl der Tage im Monat 116 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 117 FN 11: IF +Q10 GT +0 GOTO LBL 29 ;Wenn Restsekunden bleiben Sprung zu September 118 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 119 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnug Tag 120 ;September 121 LBL 29 122 Q2 = Q2 + 1 ;Monat hochzaehlen 123 Q12 = 30 ;Anzahl der Tage im Monat 124 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 125 FN 11: IF +Q10 GT +0 GOTO LBL 30 ;Wenn Restsekunden bleiben Sprung zu Oktober 126 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 127 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 128 ;Oktober 129 LBL 30 130 Q2 = Q2 + 1 ;Monat hochzaehlen 131 Q12 = 31 ;Anzahl der Tage im Monat 132 Q10 = Q10 - Q12 * 86400 ;Restsekunden = Monatssekunden 133 FN 11: IF +Q10 GT +0 GOTO LBL 31 ; Wenn Restsekunden bleiben Sprung zu November 134 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 135 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 136 ;November 137 LBL 31 138 Q2 = Q2 + 1 ;Monat hochzaehlen 139 Q12 = 30 ;Anzahl der Tage im Monat 140 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 141 FN 11: IF +Q10 GT +0 GOTO LBL 32 ;Wenn Restsekunden bleiben Sprung zu Dezember 142 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 143 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 144 ;Dezember 145 LBL 32 146 Q2 = Q2 + 1 ;Monat hochzaehlen 147 Q12 = 31 ;Anzahl der Tage im Monat 148 Q10 = Q10 - Q12 * 86400 ;Restsekunden - Monatssekunden 149 FN 11: IF +Q10 GT +0 GOTO LBL 38 ;Wenn Restsekunden bleiben Sprung zur Fehlermeldung 150 Q10 = Q10 + Q12 * 86400 ;Restsekunden am Monatsanfang 151 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Sprung zu Berechnung Tag 152 ;Ausgabe Fehlermeldung 153 LBL 38 154 FN 14: ERROR= 1088 ; Daten widerspruechlich 155 ;Berechnung Tag 156 LBL 39 157 Q3 = INT ( Q10 / 86400 ) + 1 ;Tag bestimmen 158 Q10 = Q10 - ( ( Q3 - 1 ) * 86400 ) ;Berechnung Restsekunden 159 ;Berechnung Stunden 160 Q4 = INT ( Q10 / 3600 ) ;Stunden bestimmen 161 Q10 = Q10 - ( Q4 * 3600 ) ;Berechnung Restsekunden 162 ;Berechnung Minuten 163 Q5 = INT ( Q10 / 60 ) ;Minuten bestimmen 164 Q10 = Q10 - ( Q5 * 60 ) ;Restsekunden bestimmen 165 ;Berechnung Sekunden 166 Q6 = INT Q10 ;Sekunden bestimmen 167 ;Programm Ende 168 END PGM 81801_DE MM