Uhrzeit-Werte umwandeln

Automatik-Holgi

Level-1
Beiträge
159
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, wie kann ich bei der s7-200 CPU224 Uhrzeit-Daten bei bestimmten Ereignissen (über Eingänge verarbeitet) speichern und wieder als richtige Uhrzeit-Werte (z.B. für Stunde [VB13] den Wert 15, wenn das Ereignis um 15.xx Uhr eingetreten ist) als Variable speichern und beispielsweise im Tabellenstatus anzeigen?

Bislang verfahre ich wie folgt:

LD E0.0
BTI VB13,VW2000

wobei BTI das Byte aus VB13 in eine ganze Zahl (16Bit) wandelt.

Da der Wert von VW2000 -wenn E0.0 um 15.XX Uhr angesteuert wird- nicht gleich 15 ist und WEIL DIE ANDEREN UMWANDLUNGSFUNKTIONEN MIR AUCH NICHT GEHOLFEN HABEN, BIN ICH ETWAS GENERVT...

Wer kann mir bitte helfen?

Danke
Holger
 
Zeit S7200

Hi,

Zitat Siemens S7200 Hilfe:

"Die Operation Echtzeituhr lesen (TODR) liest die aktuelle Uhrzeit und das aktuelle Datum aus der Hardware-Uhr der CPU und lädt beides in einen 8-Byte-Uhrzeitpuffer mit Beginn an Adresse T.

Format des Byte-Uhrzeitpuffers (T):
T-Byte Beschreibung Byte-Daten
0 Jahr (0-99) Aktuelles Jahr (BCD-Wert)
1 Monat (1-12) Aktueller Monat (BCD-Wert)
2 Tag (1-31) Aktueller Tag (BCD-Wert)
3 Stunde (0-23) Aktuelle Stunde (BCD-Wert)
4 Minute (0-59) Aktuelle Minute (BCD-Wert)
5 Sekunde (0-59) Aktuelle Sekunde (BCD-Wert)
6 00 Reserviert – immer auf 00 gesetzt
7 Wochentag (1-7) Aktueller Wochentag, 1=Sonntag (BCD-Wert)"

Also da wäre die Stunde(Byte 3) schon da, wo ist das Problem?
Oder verstehe ich dich falsch?

Gruss: Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vermutlich verstehst du mich falsch...

Erklär mir mal konkret, wie ich ein Ereignis zeitlich festhalte.
Beispiel : Eingang E0.0 wird in der Stunde 15 (15.XX Uhr) aktiviert, ich will diesen Wert 15 (ich meine dann auch 15,und nix anderes!!!) in irgendeiner passenden Variable ablegen und ihn mir zum Beispiel später im Tabellenstatus anzeigen lassen. Wie muss ich das Programmieren? Ich will doch nur später sehen, wann der Eingang aktiviert wurde...


Holger
 
Zeitstempel

Hi Holger,
also der Eingang E0.0 kommt; es ist 15:33; mit der Flanke von E0.0:
-ich lese die Systemzeit aus(siehe oben)
-ich nehme Byte 3( Stunde,0-23, aktuelle Stunde (BCD-Wert)), wandle nach Integer(dann habe ich 15) und speichere irgendwo ab.

Oder was möchtest du, etwas anderes?

Gruss: Vladi
 
.... und für mich in KOP plz....

darüber lacht der...

ok, mit dem was man gelernt hat, kommt man meist am Baesten zurecht, aber eigentlich ist jede Programmsprache nur 'Slang', den man sich halt aneignen muss

BTT:
Versteh ich das Richtig:
Irgendwann kommt ein Ereignis, auf das Du mit Verzögerung/ täglich reagieren möchtest. Diese (Uhr-) Zeit möchtest du als Datum (Einzelform von Daten, als mit ohne TTDDJJJJ..) 'fangen' und bei Bedarf wieder auswerten?

Greetz
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja so ungefähr.
Ich möchte mehrere (ca.3) Stunden- und Minuten-Werte in mehreren (also,ca.6) Variablen abspeichern, jedesmal,wenn ein bestimmter Eingang aktiviert wird:

Beispiel : Es ist 14.32Uhr, E0.0 ist für ein paar Sekunden aktiv
Es ist 15.11Uhr, E0.0 ist für ein paar Sekunden aktiv
Es ist 18.55Uhr, E0.0 ist für ein paar Sekunden aktiv.

Wenn ich später irgendwann mal in den Status-Tabelle schaue, möchte ich folgendes lesen:

Variable1 : 14
Variable2 : 32
Variable3 : 15
Variable4 : 11
Variable5 : 18
Variable6 : 55

VERSTEHT JEMAND,WAS ICH WILL??????

Holger
 
S7 200 Problem

Hi,
also Holger, das nervt zwar ein wenig, aber vielleicht bist du nicht einfach
faul, sondern kappierst was nicht. Deswegen schreibe ich dir dein AWL:

Code:
LD     SM0.1                       // beim SPS Start
[B]MOVD   &VB100, VD50[/B]                // Pointer auf Adresse VB100 in VD50 erstellen
// ---------------------------------
LD     E0.0                        // Eingang für den Zeitstempel
EU                                 // mit der Flanke die Uhr lesen.. 
TODR   VB10                        // dann haben wir in VB13:Stunde(BCD); in VB14:Minute (BCD)
MOVD   0, AC0                      // Akku 0 löschen
MOVD   0, AC1                      // Akku 1 löschen
MOVB   VB13, AC0                   // Stunde in Akku 0 laden
MOVB   VB14, AC1                   // Minute in Akku 1 laden
BCDI   AC0                         // jetzt haben wir die Stunde als Integer da
BCDI   AC1                         // jetzt haben wir die Minute als Integer da
MOVB   AC0, VB20                   // dann haben wir in VW20 Stunde und Minute
MOVB   AC1, VB21                   //..
[B]MOVW   VW20, *VD50[/B]                 // Stunde UND Minute in VWxxx laden, ab VW100...
+D     2, VD50                     // Pointer zeigt auf das nächste Wort, VWxxx +2

Ah so, in FUP und KOP ginge das auch, aber ich mache es nicht, ihr
habt das Recht böse auf mich zu sein..:rolleyes: . Alles klar?

Vladi
 
Hallo Vladi.
Naja, das liegt wohl wirklich daran, dass ich es nicht kapiert habe.
Hab noch nie mit solchen Operationen gearbeitet. Ich werde es bei nächster Gelegenheit mal langsam in mich aufnehmen. Vielen Dank an dieser Stelle und vielleicht bis bald...:confused:

Holger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle,

hier mal ein paar Tips zu der Uhr:

1. Umwandeln: kann per Dode programmiert werden (natürlich) aber unter www.s7-200.net gibts da auch kostenlos Bibliotheken zum runterladen. Schaut euch mal die Bibs zum darstellen der Uhr für die TD's an.

2. Ereignisse mit Zeistempel festhalten:
Hier gibt es abhängig von der Weiterverwendung mehrere Möglichkeiten.

A. Wenn Ihr die Info später auf einem PC auswerten wollt--> Datalog Assisten und eine Speicherkarte verwenden. Auslesen der Ereignisse und Darstellen in Excel mit dem S7-200 Explorer

B. Ereignisse später wieder in der CPU verarbeiten --> Rezepte-Assisten und eine Speicherkarte verwenden. Ereignis mit Zeitstempel als Rezept auf der Karte ablegen und bei Bedarf wieder mit der CPU lesen

C. Mit indirekter Adressierung bei Ereignis den Zeitstempel in den V-Speicher der CPU ablegen.

Ich hoffe das hilft.

Gruss

Helmut
 
Hey Vladi !

Es funktioniert. Ich habe es noch etwas ausgebaut (auf mehrere Variablen für mehrere Ereignis-Zeiten) und bin bestens zufrieden !:)

Vielen Dank!

PS:Besser spät als nie!
 
Zurück
Oben