Abgelaufene Zeit remanent erfassen

HEidelberger

Level-2
Beiträge
39
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich bräuchte bitte mal Hilfe / Denkanstoß.

Es gibt 2 Taster. Taster1 sorgt dafür, dass mit Betätigung eine Zeit in Sekunden gezählt wird. Taster2 sorgt dafür, dass die bereits angefallene Zeit rückwärts (als Countdown) wieder abgezogen wird.

Die Zeit soll auch nach einem Stromausfall zur Verfügung stehen.

Was für Bausteine könnte man im Simatic Manager dafür nehmen?

Danke für Tipps.
 
ADD_x SUB_x ... mit remanenten Variablen.
Je nachdem, wofür und wie lange und wie genau gezählt werden soll, könnte es auch sinnvoll sein, sich die Zeit der Uhr zu merken.
 
Du könntest auf den Zähler ein Taktmerker aufschalten. Das ist relativ genau.

Genauer geht es aber wenn man direkt die CPU-Zeit abgreift weil die angeblich unabhängig vom SPS-Programm auf einem eigenen Chip läuft. Dazu gibt es Handbücher, wer suchet, der findet.
 
Aus was für einem Baustein bekäme ich die Zeit in Sekunden?
in den Eigenschaften der CPU die CPU-Taktmerker aktivieren, liefert verschiedene Takte, z.B. Bit .5 ist 1 Hz (0.5s = 1 + 0,5s = 0), benötigt zum Zählen noch Flankenerkennung
Achtung: die Taktmerker ändern sich asynchron mitten im OB1 !

Uhrzeit auslesen kann man mit SFC1 READ_CLK
Achtung: evtl. wird die Uhr mit einem Uhrzeitserver synchronisiert und hat evtl. Sprünge, und läuft evtl. in UTC
Hinweis: bei Sommerzeit nicht die Uhr verstellen, sondern bei Bedarf aus der Uhrzeit (Systemzeit) die Lokalzeit berechnen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Uhrzeit auslesen kann man mit SFC1 READ_CLK
Dafür würde ich eher "TIME_TCK" verwenden.
Das ist ein Zeitwert in Milisekunden, der im Hintergrund mit läuft & nicht von der Uhrzeitsynchronisation beeinflusst wird.
Man müsste lediglich den Überlauf beim Maximalwert des TIME-Formats berücksichtigen & dass "TIME_TCK" bei SPS-Start wieder bei 0 anfängt.

Oder man nimmt gleich "RUNTIME" & addiert/subtrahiert auf eine remanente Variable ¯\_(ツ)_/¯

Wenns nicht extrem genau sein muss, sollte das Addieren/Subtrahieren einer remanenten Zählvariable mittels Tasten-DI + Flanke eines Taktmerkers aber die pragmatischste Lösung sein.
 
Zuletzt bearbeitet:
Es gibt 2 Taster. Taster1 sorgt dafür, dass mit Betätigung eine Zeit in Sekunden gezählt wird. Taster2 sorgt dafür, dass die bereits angefallene Zeit rückwärts (als Countdown) wieder abgezogen wird.
Wozu dient dies ? Ist es ein Timersollwert der in diese Weise eingestellt werden soll ?
Wenn das so ist, anstatt die Zeit zu messen, wie wäre es mit einfach die Tastenbetätigungen zu zählen ?
Also wenn die Taste 'Auf' 3-mal betätigt wird, wird den Timersollwert mit 3 Sekunden erhöht. Und umgekehrt mit die 'Unter' Taste.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für eure Tipps. Ich kann zwar noch nicht mit allen Antworten etwas anfangen, aber ich versuche mich einzulesen.

Wozu das dienen soll:
Ich versuche mir eine Steuerung zu bauen, bei der Taster1 einen Motor über eine gewisse Zeit in CW laufen lässt (z.B. 5s). Die Einschaltzeit soll gezählt werden.
Mit Taster2 soll der Motor in CCW betrieben werden. Die Einschaltzeit soll von der bisherigen abgezogen werden (je nachdem wie lange der Motor in CCW lief z.B. 3s => 5s - 3s = 2s), damit der Motor sich immer in einem bestimmten Positionsbereich bewegt. Es gibt nämlich keine Wegsensoren. Daher die Zeit zählen und wieder abziehen.
In einer Grundstellung ist der Motor an einer bestimmten position und die Zeit soll dabei 0s sein.

Für andere Vorschläge wäre ich natürlich ebenso sehr dankbar.
 
PS:
TIME_TCK liefert nicht die Uhrzeit
Hab mich etwas unklar ausgedrückt, sorry.
Für den Vergleich von zwei Zeitstempeln zueinander würde ich eher Time-TCK nehmen, da der TIME-Format ein DINT mit Miliskeunden ist & man deswegen damit gut rechnen kann & eine Milisekunden-Angabe einigermaßen genau ist.
RUNTIME gibt es in Step7 classic nicht
Hab bei "Simatic Manager" = Classic nicht geschaltet 💩
Mit Taster2 soll der Motor in CCW betrieben werden. Die Einschaltzeit soll von der bisherigen abgezogen werden (je nachdem wie lange der Motor in CCW lief z.B. 3s => 5s - 3s = 2s), damit der Motor sich immer in einem bestimmten Positionsbereich bewegt. Es gibt nämlich keine Wegsensoren. Daher die Zeit zählen und wieder abziehen.
In einer Grundstellung ist der Motor an einer bestimmten position und die Zeit soll dabei 0s sein.
Da weiß ich nicht ob dir die Variante mit Taktmerker-Flanken genau genug ist, 100ms-Inkremente wären damit maximal möglich.
=> evtl direkt mit TIME_TCK arbeiten.
Allzu genau wird die zeitgesteuerte Positionierung damit aber auch nicht werden, dass sollte dir klar sein.
Und aufgrund der Ungenauigkeiten bei jedem "Positioniervorgang" brauchst du mindestens beidseitig Endlagenschalter + ggf. einen Referenzsensor für Grundstellung.
Deiner Formulierung entnehme ich mal, dass zumindest ein Grundstellungs-Sensor existiert, richtig?
 
Vielen Dank für eure Tipps. Ich kann zwar noch nicht mit allen Antworten etwas anfangen, aber ich versuche mich einzulesen.

Wozu das dienen soll:
Ich versuche mir eine Steuerung zu bauen, bei der Taster1 einen Motor über eine gewisse Zeit in CW laufen lässt (z.B. 5s). Die Einschaltzeit soll gezählt werden.
Mit Taster2 soll der Motor in CCW betrieben werden. Die Einschaltzeit soll von der bisherigen abgezogen werden (je nachdem wie lange der Motor in CCW lief z.B. 3s => 5s - 3s = 2s), damit der Motor sich immer in einem bestimmten Positionsbereich bewegt. Es gibt nämlich keine Wegsensoren. Daher die Zeit zählen und wieder abziehen.
In einer Grundstellung ist der Motor an einer bestimmten position und die Zeit soll dabei 0s sein.

Für andere Vorschläge wäre ich natürlich ebenso sehr dankbar.
Kannst du nicht irgendwo zusätzlich zum Grundstellungssensor einen Impulsgeber(Zahnsensor o.Ä.) einbauen?
 
Hmm. die Motor geht nicht momentan von Null auf das Nenndrehzahl. Es wird kein 100% Korrelation zwischen Laufzeit und Stellung sein. Es wird schwierig eine zuverlässige Grundstellung zu erkennen ohne Rückmeldung. Ohne dies wird den Wert in die SPS wandern.
In einer Grundstellung ist der Motor an einer bestimmten position und die Zeit soll dabei 0s sein.
Kan man diese Grundstellung visuell sehen ?
Kannst du nicht irgendwo zusätzlich zum Grundstellungssensor einen Impulsgeber(Zahnsensor o.Ä.) einbauen?
Wenn das nicht geht, eine weitere Taster damit man nach visuelle Bestätigung die Grundstellung nullen kann.
 
Es sollen Rollo-Motoren angesteuert werden.
Die Null-/Grundstellung wird immer gewährleistet, wenn die Motoren in der oberen oder später unteren Position selbst durch Lastabschaltung abschalten.

Entsprechend der Länge des Tasterdrucks soll die Verfahrzeit notiert werden. Bei der Reverse-Bewegung entsprechend die Verfahrzeit negativ dazu laufen. Damit würde ich in etwa wissen, wo sich das Rollo befindet, wenn dieses außerhalb eines Automatikbetriebs bewegt. Der Automatikbetrieb soll aber noch nicht betrachtet werden. Ich versuche mich in kleinen Stücken an das Gesamtproblem heranzutasten. Oder besser gesagt, ein Konzept zu entwerfen, wie das Problem gelöst werden könnte.

Die Hardware dazu gibts ja bereits: S7-315 mit DI & DO Baugruppen

Ich bin aber gern offen für weitere Vorschläge, die zum Zielführen könnten. Was ich nur nicht versuche, fertige Lösungen von irgendwoher zu kopieren.

Vielen Dank weiterhin für Tipps.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin HEidelberger,

Rollosteuerungen waren schon mehrfach Thema hier im Forum.
Du musst auch bedenken, dass das Rolle pro Zeit einen unterschiedlichen Weg zurücklegt. Je nachdem, wieweit es schon aufgerollt ist. Dadurch ändert sich nämlich der Durchmesser und damit die Umfangsgeschwindigkeit bei gleicher Drehzahl.
 
1733149266213.png
So ungefähr sollte es in Classic gehen. E0.1 ist der Taster Vor, E0.2 der Taster zurück. M4.0 und M4.1 sind die Flankenmerker vom Taktmerker 100.5 (0.5 Hz). Wenn du ein anderes Taktmerkerbyte verwendest, musst du den Wert anpassen. Das DB1.DBW2 ist der gespeicherte Wert. Der Datenbaustein 1 ist in den Eigenschaften Teil 2 remanent eingestellt. #Vor und #Zurueck sind die Ausgänge.
 
Grundstellung Auf bzw. Zu würde man indirekt erkennen, wenn man die Position nur im Bereich 0...100% aufaddieren/subtrahieren würde. Bei jedem längeren Tastendruck, der über das Ende hinausgeht würde sozusagen indirekt Grundstellung ausgelöst...
 
Das Merkerbyte habe ich in der CPU aktiviert und mit "100" gesetzt. Wie bekommen ich das im KOP oder fub dann, entsprechend Deinem Bsp #16 in das netzwerk?

Danke
 
Zurück
Oben