Uhrzeitsynchronisation OP -> CPU

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
ich habe folgendes Problem: Ich will die CPU-Zeit (CPU315) über ein OP 170B stellen. Bereichszeiger für Aufträge und für Datum/Zeit sind projektiert. Wie bekomme ich die Uhrzeit-Daten zum SFC 0? Ich habe es mit dem
FC 3 versucht weiß aber nicht genau, wie die Daten im Bereichszeiger Datum/Uhrzeit belegt sind (Tag, Monat, Jahr, Stunde,...).
Hat da jemand einen Lösungsansatz?
 

sps-concept

Well-known member
Beiträge
2.235
Punkte Reaktionen
249
Uhrzeit

Hallo André,

du kannst nen extra Button auf dem TP machen, den du nach dem Stellen drückst. Mit dem löst du in der SPS den AG-Auftrag 40 aus. Datum/Uhrzeit werden in Format DATE_AND_TIME übertragen. Mit diesen Daten aus dem Bereichszeiger fütterst du den SFC0.

MfG
André Räppel
 
OP
A

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
Zuviel Werbung?
->Hier kostenlos registrieren
Das ging aber schnell :)
Soweit ist es klar. Aber gib mal am SFC 0 die Datenadresse vom Bereichszeiger Datum/Uhrzeit ein, z.B.: DB1.DBW0, laut ProTool hat dieser eine Länge von 6 Worten. Das funktioniert nicht. Ich glaube, das Format Date_And_Time muß vorher erst mit dem FC 3 "D_TOD_DT" gebildet werden (steht so in der Online-Hilfe). Aber wieso muß ich das Format Date_And_Time erst bilden, obwohl es im Bereichszeiger des OP schon abgelegt ist? Da muß es noch irgendeinen Trick geben!
 

sps-concept

Well-known member
Beiträge
2.235
Punkte Reaktionen
249
Uhrzeit

Hallo,

nein das musste nich. Deklariere im Bereichszeiger eine Variable im Format DATE_AND_TIME und 2 Reservewörter. Die DATE_AND_TIME kannste dann vom SFC0 symbolisch ansprechen. Wirst sehen das funzt. Is bissel mies beschrieben von Siemens.


Code:
Bereichszeiger.Datum_Zeit.SPS	DATE_AND_TIME	ausgelesene Systemzeit CPU	
Bereichszeiger.Datum_Zeit.Res_1	INT	reserviert für System	
Bereichszeiger.Datum_Zeit.Res_2	INT	reserviert für System

MfG
André Räppel
 
OP
A

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
Hallo,
ja so sieht das schon ganz anders aus. Ich werde es in den nächsten Tagen ausprobieren und mich dann melden.
Danke bis dahin!
André
 
OP
A

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
bin erst heute dazu gekommen, das Programm zu testen. Es funktioniert!
Ich bin aber auf ein anderes Problem gestoßen. Ich löse das Ganze mit einem Tastendruck (F-Taste) am OP aus. Erst den Steuerungsauftrag 40 aktivieren und dann den SFC 0 ausführen. Muß zwischen Auftrag 40 und SFC0 eine "Denkpause" existieren oder kann beides hintereinander bearbeitet werden? Ich habe immer einen Versatz von einigen Sekunden zwischen OP-Zeit und CPU-Zeit (CPU-Zeit geht nach). Ich habe das Programm etwa so geschrieben:
L DBx.DBXy.z (F-Taste OP)
FP M 1.0
S M 1.1
UN M 1.1
SPB M001
R M 1.1
L 40
T DBx.DBW0 (Auftrag Nr. 40)
CALL SFC 0
.
.
.
M001: NOP 0
Wie gesagt, es funktioniert aber ich habe diesen Zeitversatz.
Kann mir jemand einen Tip geben, der so etwas schon einmal realisiert hat?
Gruß André
 
OP
A

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
So, ich habe noch etwas probiert und getestet. Der Auftrag 40 hat eine relativ lange Bearbeitungszeit. Wenn der Baustein SFC 0 gleich anschließend aufgerufen wird, liegen die Uhrzeitdaten vom OP noch garnicht vor. Ich habe dann mal mit einer Verzögerung experimentiert und festgestellt, das für eine sichere Synchronisation der Zeiten zwischen Auftrag 40 und SFC 0 etwa 2 Sekunden liegen sollten, sonst kann es sein, das man die Uhrzeit vom vorherigen Auftrag erwischt, die ja noch im Datenbaustein liegt. Möglicherweise spielt da auch der Basistakt des OP eine Rolle, wobei der bei mir auf 500 ms eingestellt ist.
Ich frage mich, wie soll man da eine exakte Synchronisation zustande bringen? Es gibt ja Fälle, da muß es sekundengenau sein.
 

sps-concept

Well-known member
Beiträge
2.235
Punkte Reaktionen
249
Uhrzeit

Hallo André,

lege dir einfach noch eine Variable im Format DATE_AND_TIME an und vergleiche diese mit der im Bereichszeiger. Wenn sie sich geändert hat dann ruf den SFC0 auf und speichere anschliessend die Zeit aus dem Bereichszeiger in der anderen Variablen ab.

MfG
André Räppel
 
OP
A

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
Zuviel Werbung?
->Hier kostenlos registrieren
Das ging ja schnell!
Ich habe festgestellt, das der Auftrag 40 vom OP eine "gewisse Zeit" braucht. Wenn er bearbeitet wird vergeht mitunter über eine Sekunde. Während dieser Zeit läuft ja die Uhr weiter und diese Zeit fehlt dann bei der Synchronisation. Man kann die Bearbeitungszeit relativ genau ermitteln, da der Auftrag selbständig wieder auf 0 gestzt wird wenn er erledigt ist. Und dabei habe ich das o.a. festgestellt.
Trotzdem danke für Deinen Tip, so komme ich doch relativ genau an die Op-Zeit heran!
 

Harry

Well-known member
Beiträge
76
Punkte Reaktionen
6
Hab auch schon an der Zeitsychronisation von PC und S7 rumgepröbelt und habe folgendes herausgefunden:

Komischerweise kann man zwar auswerten, dass der Steuerungsauftrag abgeschlossen ist, bis die Zeit aber wirklich übertragen ist, vergeht nochmals eine gewisse Zeit.
Irgendwo in einem Handbuch steht auch, dass eine Zeit von etwa 5s einzuhalten ist zwischen den Steuerungsaufträgen zur Zeitsynchronisation.

Hat mich relativ viel Zeit gekostet, bis ich da mal drauf gekommen bin...

Gruss

Harry
 
OP
A

andre

Well-known member
Beiträge
268
Punkte Reaktionen
37
Hallo,
ich habe heute nocheinmal an meinem Programm "gefeilt". Unter anderem habe ich den Tip meines Namensvetter umgesetzt (zweite Variable mit Bereichszeiger vergleichen). Es läuft jetzt zu meiner vollsten Zufriedenheit. Beide Zeiten sind nahezu synchron. Dadurch ist natürlich ein recht umfangreicher Baustein entstanden :)
CPU-Zeit mit OP-Zeit synchronisieren -> Ergebnis wiederum am OP anzeigen -> per Tastendruck Sommer- Winterzeitumstellung (+/- 1 Std.)
Danke nochmal an meinen Namensvetter für den Tip!
 
Oben