# S7-1200 Reglerbausteine (SYSTEM\_TIME)

**URL:** <https://oscat.discourse.group/t/s7-1200-reglerbausteine-system-time/2495>\
**Category:** oscat.lib fuer Step 7\
**Created:** [16. Dezember 2025 um 05:36 UTC](https://oscat.discourse.group/t/s7-1200-reglerbausteine-system-time/2495 "2025-12-16T05:36:59Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mg1](https://yyz2.discourse-cdn.com/free1/user_avatar/oscat.discourse.group/mg1/32/134_2.png) [@mg1](https://oscat.discourse.group/u/mg1)\
**Post date:** [16. Dezember 2025 um 05:36 UTC](https://oscat.discourse.group/t/s7-1200-reglerbausteine-system-time/2495/1 "2025-12-16T05:36:59Z")

</div>

Da geisterte ca. 2020 eine KORREKT übersetzte Oscat für die S7-1200 rum.  
Ich habe sie verwendet. Die ist aber dermaßen falsch, dass ich mich zu diesem Kommentar gezwungen sehe.  
Ich veröffentliche hier die Reglerbausteine im Klartext. (anders geht es nicht mehr, UND BITTE TESTEN vor dem Verwenden)  
(Für meine Anwendungsfall ging es perfekt)

Verwendet wurde eine S7-1212 (FW 3.1 ist schon ziemlich alt sollte für alle neueren funktionieren)  
Die Reglerbausteine (siehe folgende Blogs) wurden im meinem Fall nicht unter dem MAIN-Task verwendet sondern unter CYL (333ms).  
Wenns jemand für MAIN verwenden will bitte auch vorher testen.

Dazu wurde erst mal die System\_Time aus der besagten nicht funktionierende LIB verändert (im Orig.Oscat gib es dafür die T\_PLC\_us und die T\_PLC\_ms)  
Systembdingt gibt es T\_PLC\_us, T\_PLC\_ms immer noch ABER VERÄNDERT siehe weitere BLOGs  
Die SYSTEM\_TIME sollte unter dem MAIN Task eingebunden werden

System\_Time  
Input

Output

InOut

Static  
Systemzeit\_ DTL DTL#1970-01-01-00:00:00 True True True True  
Systemzeit\_Err\_i Int 0 True True True False  
old\_systemzeit\_ DTL DTL#1970-01-01-00:00:00 True True True False  
fast\_time\_t Time T#0ms True True True False  
ms\_dw DWord 16#0 True True True False  
us\_dw DWord 16#0 True True True False  
old\_Systemzeit\_MINUTE UDInt 0 False False False False  
Minutes\_ UDInt 0 False False False False  
check1\_ DTL DTL#1970-01-01-00:00:00 True True True False  
check2\_ DTL DTL#1970-01-01-00:00:00 True True True False  
check3\_ Time T#0ms True True True False  
check4\_ DWord 16#0 True True True False  
check5\_ Int 0 True True True False  
Temp  
T\_DIFF\_ENO\_x Bool  
Constant

#Systemzeit\_Err\_i:=RD\_SYS\_T(OUT=\>#“Systemzeit\_”);  
// \*\*\*\*\*\*\*\*\*\*\*\*\* MILLISEKUNDEN \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
IF #“old\_systemzeit\_”=DTL#1970-01-01-00:00:00 THEN  
#“old\_systemzeit\_”:=#“Systemzeit\_”;  
END\_IF;  
#fast\_time\_t:=T\_DIFF(IN1:=#“Systemzeit\_”, IN2:=#“old\_systemzeit\_”, ENO=\>#T\_DIFF\_ENO\_x);  
IF NOT #T\_DIFF\_ENO\_x THEN  
#“old\_systemzeit\_”:=T\_SUB(IN1:=#“old\_systemzeit\_”, IN2:=T#-24d\_20h\_31m\_23s\_648ms);  
#“check1\_”:=#“old\_systemzeit\_”;  
#“old\_systemzeit\_”:=T\_ADD(IN1:=#“old\_systemzeit\_”, IN2:=T#24d\_20h\_31m\_23s\_647ms);  
#“check2\_”:=#“old\_systemzeit\_”;  
#“check3\_”:=T\_DIFF(IN1:=#“Systemzeit\_”, IN2:=#“old\_systemzeit\_”);  
#“check4\_”:=TIME\_TO\_DWORD(#fast\_time\_t);  
#“check5\_”:=#“check5\_”+1;  
#T\_DIFF\_ENO\_x:=TRUE;  
END\_IF;  
#ms\_dw:=TIME\_TO\_DWORD(#fast\_time\_t);  
#us\_dw:=SHL(IN:=#ms\_dw,N:=10); // entspricht einer DIV durch 1000, stimmt nicht ganz genau weil das ist [ms]\*1024 sollte aber ausreichend sein
