Step 7 TOD nur bis Sekunde vergleichen

Nightwalker1987

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich bin gerade dabei für eine Kompressoranlage eine Steuerung zu Programmieren.
Dazu möchte ich gern an einem bestimmten Wochentag zu einer bestimmten Uhrzeit ein Signal ausgeben/Merker setzen.
Den aktuellen Wochentag ermittle ich mit dem SFC1 und dann den FC7. (alles klar)
Nun möchte ich aber die eingestellte Uhrzeit von einem Leitbild mit der aktuellen Uhrzeit auf der SPS vergleichen. Beide Uhrzeiten liegen in einem DB als TOD vor. Ich möchte aber nicht bis in den Millisekundenbereich gehen. Es sollte schon nur bis zur Sekunde ein Abgleich vorhanden sein.
Ich hatte mich im Forum schon einmal dazu etwas umgeschaut. Dort stand, dass man die Uhrzeit auch byteweise abgleichen kann. Jedoch klappt es nicht, wenn ich diese aus dem DB auslesen will. Da immer der "Typ der Variable" korrekt ist.
Wer kann mir da helfen?

mfG N8
 
Hallo,
ich glaube, da schmeisst du etwas durcheinander.
Das Format DT oder auch DATE_AND_TIME ist ein Byte-String, aus dem du dir Byte-BCD-weise die Einzel-Informationen herausholen kannst. Das kannst du in der Step7-Hilfe auch sehr schön nachlesen.
TOD oder auch TIME_OF_DAY ist die Zeitspanne in Millisekunden, die seit Mitternacht vergangen ist.
Du kannst dir natürlich mit einer Division (/ 1000) aus den Millisekunden dann Sekunden machen - das ist aber (glaube ich) nicht das, was du willst - das was du haben willst habe ich allerdings nicht verstanden ... :(

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum verwendest du nicht einfach einen Uhrzeitalarm? Damit kannst du an einem bestimmten Wochentag wöchentlich einen OB aufrufen lassen, in dem du deine Aktion programmiert hast.
 
Da muss ich wohl wirklich was verwechselt haben.
Noch mal zum veranschaulichen:
Ich möchte ganz gerne 2 Kompressoren im wechseln laufen lassen (einer bringt Grundlast der andere wird bei Bedarf zugeschaltet).
Die beiden Kompressoren sollen wöchentlich die Rollen tauschen.
Um dies zu gewährleisten wollte ich den Wochentag über das Leitbild eingeben lassen, an welchem das passieren soll, sowie die Uhrzeit.
Mit dem Wochentag hat alles so weit geklappt.
Den Tausch alleine könnte ich auch jetzt schon realisieren. Jedoch sollen die Kompressoren entweder von Samstag bis Sonntag oder nur am Sonntag ausgeschaltet werden und dies jeweils zu bestimmten Zeiten.
Hierzu wollte ich die Uhrzeit aus lesen und wenn diese erreicht ist ein Merker setzen.
Die Einstellung der Tage und Uhrzeiten sollen variabel über das Leitsystem möglich sein.
Hierzu lege ich diese in einen Datenbaustein ab.
Den Tausch alleine könnte ich auch jetzt schon realisieren. Jedoch sollen die Kompressoren entweder von Samstag bis Sonntag oder nur am Sonntag ausgeaschaltet werden und dies jeweils zu bestimmten Zeiten.
Hierzu wollte ich die Uhrzeit aus lesen und wenn diese erreicht ist ein Merker setzen.
Die Einstellung der Tage und Uhrzeiten sollen variabel über das Leitsystem möglich sein.
Hierzu lege ich diese in einen Datenbaustein ab.

Ich hoffe, das veranschaulicht mein Vorhaben besser.
 
OK ... verstanden ...
Du solltest allerdings beachten, dass du die Uhrzeiten sowieso nicht auf Gleichheit sondern besser auf >= vergleichen solltest. Dann spielen ggf. vorhandene Millisekunden auch schon keine Rolle mehr.
Die andere Variante wäre, dass du dir ein eigenes Zeitformat erstellst, dass nur die Sekunden speichert. Für den Vergleich gelten dann aber trotz allem die gleichen Grundsätze ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
gut!
Jetzt ist nur noch die Frage, wie ich diesen Vergleich hinbekommen kann.
Am liebsten wäre mir direkt aus den Datenbausteinen raus. oder ist dies eher nicht so optimal.
Ich hatte am Anfang mir das in etwa so gedacht, dass ich erst den Wochentag vergleiche, dann die Stunden, dann Minuten, dann Sekunden. (ich dachte, dass ich TOD so aufdröseln könnte).
Gibt es eine einfache Möglichkeit? Habe leider noch keinen Ansatz gefunden, mit dem ich die beiden TOD vergleichen kann.
Gibt es dazu einen SFC oder so?
 
... nicht so kompliziert ...
Ein TOD ist erstmal nur ein DINT in einer besonderen Formatierung.
Der Vergleich ginge dann z.B. so :
Code:
L #mein_System_TOD
L #mein_Visu_TOD
>= D
= #mein_MeldungsBit
oder wenn du mit einer Konstanten vergleichen willst :
:
Code:
L #mein_System_TOD
L TOD#12:34:56.789
> = D
= #mein_MeldungsBit2

Gruß
Larry
 
Zuletzt bearbeitet:
Danke nochmal!

Ich weiß jetzt auch, warum meine ersten Versuche nicht klappten.
Es lag bei mir einfach nur daran, dass ich in KOP programmiert habe. Dort meckert er aber immer, dass TOD nicht zu DInt-Vergleicher passt.
In AWL hatte es gleich super geklappt.

mfG N8
 
Also bei unserer Anlage habe ich einfach die Tagesminute hochgezählt, da unsere Visu Felder dafür hatte in der man dann die Teilung dementsprechend eingestellt hat (60). Also z.B. für 6:30 Uhr Minute 390 ... Wenn gleich dann aktion
 
Zurück
Oben