Step 7 Zeit für Zähler verwenden

slot23

Level-1
Beiträge
89
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich hätte mal eine Frage zur Verwendung der S7 Zeit. Ich würde gerne einen Zähler programmieren, der immer Schicht-, Tag-, und Wochenweise zählt. Also zum Beispiel um 6 Uhr in der Früh beginnt und um 14 Uhr zurückgesetzt wird. (für die Schicht) Hat hier schon jemand Erfahrungen gesammelt? Wollte das ganze eingentlich nur über einen SFB 4 und einen Zähler machen. Mit dem SFB 4 hätte ich die Zeit für den Zähler vorgegeben (8 Stunden für eine Schicht) und diese dann als Zeit für den Zähler hergenommen. Allerdings funktioniert das ganze nicht so genau. Daher würde ich es gerne über die Zeit der Steuerung probieren. Die Frage ist nur ob das geht??

Danke schon mal im voraus!

Gruß

Slot23
 
Hallo slot23,

wenn ich Dich richtig verstehe, möchtest Du die Systemzeit der Steuerung auslesen
und diese dann mit 6, 14, 22... vergleichen.
Die Zeit kannst Du mit dem SFC1 "READ_CLK" auslesen. Du erhälst sie als Datentyp "DATE_AND_TIME".
Die Stunde steht im Byte 3.

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gebs,

Ja genau richtig, ich möchte die Systemzeit der Steuerung auslesen und vergleichen. Mit dem SFC1 hab ich gerade ein kleines Problem. Hier wird ja ein DT (Date & Time) Format verlangt oder? Mir wird die Zeile von CDT egal was ich eingebe rot makiert. Die Fehlermeldung ist: Deklarationsbereich der Aktualseite paßt nicht zum formalen Deklarationsbereich VAR_OUTPUT des Formalparameters CDT. Ich habe aber für meinen DB den ich anwähle, den Bereich Date und Time angewählt Was mache ich falsch??

Gruß

Slot23
 
Hallo,
deine Variable (im DB1 oder wo auch immer) muß natürlich als DT bzw. Date_and_Time deklariert sein. Am Besten übergibst du sie dann symbolisch an den SFC - also so : "DB1".mein_Zeitstempel. Dann funktioniert es auch ...
(Der DB1 muß dafür natürlich auch symbolisch ansprechbar sein ...).

Gruß
Larry
 
Danke an euch beide, das Lesen der Zeit funktioniert jetzt. Alleridngs habe ich nun ein kleines Problem mit der Aufteilung der Stunden und Minuten. Ich benötige eigentlich nur die Stunden. Auf der Siemens Homepage ist eine Erklärung, wie man die Stunden einzeln ausliest.
Zuerst call SFC 1, diesen festlegen und anschließend mit

LAR1 P##Date_Time
L B[AR1,P#3.0] // Stunde ist 3 Byte
T AB 3

die Stunde auslesen.

Allerdings wird mir mal wieder die erste Zeile LAR1 P##Date_Time rot makiert. Sie ist aber genauso wie beim CDT definíert. Eigentlich ist die Auswertung ja ziemlich leicht, allerdings scheitert es immer wieder an solch einfachen Dingen :x

Kann mir eventuell nochmal jemand helfen??

Gruß

Slot23
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo slot23,

ich vermute mal Du hast das in einem FC programmiert. In FC's ist diese Art der AR-Zuweisung
für IN-,IN_OUT- und OUT-Variablen nicht erlaubt.
P# als Adreßoperator darf nur für lokale Symbole der obersten Strukturtiefe (Parameterlevel) verwendet werden. Andernfalls könnte in vielen Fällen (z.B. geschachtelte FC-Parameter) diese Adreßkonstante zu groß für die MC7-Register werden.
Im FC geht es nur mit Temp-Variablen.

Grüße
Gebs
 
Danke an euch beide, das Lesen der Zeit funktioniert jetzt. Alleridngs habe ich nun ein kleines Problem mit der Aufteilung der Stunden und Minuten. Ich benötige eigentlich nur die Stunden. Auf der Siemens Homepage ist eine Erklärung, wie man die Stunden einzeln ausliest.
Zuerst call SFC 1, diesen festlegen und anschließend mit

LAR1 P##Date_Time
L B[AR1,P#3.0] // Stunde ist 3 Byte
T AB 3

die Stunde auslesen.

Allerdings wird mir mal wieder die erste Zeile LAR1 P##Date_Time rot makiert. Sie ist aber genauso wie beim CDT definíert. Eigentlich ist die Auswertung ja ziemlich leicht, allerdings scheitert es immer wieder an solch einfachen Dingen :x

Kann mir eventuell nochmal jemand helfen??

Gruß

Slot23

Probier mal folgende Schreibweise:

Code:
L P##Date_Time
LAR1 
L B[AR1,P#3.0] // Stunde ist 3 Byte
T AB 3

Irgendwie kann ich mich entsinnen, dass kürzlich schon einmal jemand mit deiner Schreibweise Probleme hatte.

@Gebs
Davon hab ich noch nie gelesen, klingt interessant und gefährlich, hat du eine Quelle dazu?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab es gerade mit einer IN-Variable in einem FC getestet.
Deine Schreibweise wurde rot dargestellt, meine Schreibweise wurde angenommen.

Wird es bei dir Rot oder stimmt das berechnete Ergebnis nicht?

PS: Sollte eingentlich funktionieren!
 
Zuletzt bearbeitet:
Hallo,
also mit dem SFC1 lade ich die System Zeit in einen DB (z.B. an CDT vom SFC 1: P#DB400.DBX0.0) als RET_VAL das DBW8, so und nun brauche ich für die aktuelle Stunde nur noch das DBB3 in Int wandeln (nehme hierfür z.B. DBW18 fertig.

Gruß online
 
Zuletzt bearbeitet:
Zurück
Oben