# S7 200 und echtzeituhr "Zeitschaltuhr"



## YepeMC (6 November 2003)

hi...
ich will sowas wie ne zeitschaltuhr schreiben. wollte die echtzeituhr als richtliene nehmen. Kann ich mit dem Baustein READ-RTC ne zeit vergleichen? und damit den ausgang schalten?
hätte es ja einfach getestet aber leider hab ich das nicht rausbekommen wie ich T einsetze.
z.B. um 20:00 soll irgend ein ausgang kommen was muss ich dann bei T setzen?

MFG YepeMC


----------



## BAS (6 November 2003)

*Jo, ich suche auch...*

Hallo,
ich habe die gleiche Fragestellung und viel Hoffnung, daß Christian und/oder andere helfen können.

Unter 
http://www.sps-forum.de/phpBB2/viewtopic.php?t=359&sid=1c33099b0a8f66f307442ec2a82b821f
steht die ähnliche Frage von mir.

Ich hoffe, daß Christian etwas Zeit findet um mir ein Beispiel seiner im o.a. Beitrag beschriebenen Steuerung zu senden. Bestimmt kann er Dir eine Kopie schicken.


----------



## BAS (6 November 2003)

*Aus reiner Neugier*

Aus reiner Neugier, was möchtest Du mit der Schaltuhr realisieren?


----------



## kaufmann-michael (9 November 2003)

*Zeit mit Ob1 auslesen*

Hallo,

also ich würde das mit den Lokaldaten des OB1 machen. Ab Lokaldatenbyte 12 bis 20 sind Uhrzeit und Datum hinterlegt und zwar in jedem Byte, z. B, Stunde Minuten usw. Diese Zahlen sind im BCD-Format hinterlegt, also würd ich das ganze noch umwandeln in Integer mit BTI.

Den Rest wißt er ja eh sicherlich!

Gruß
Michael


----------



## Anonymous (9 November 2003)

Hi

ja bei einer S7/300 würde ich das auch machen aber bei der S7-200 geht das nicht im OB1


----------



## YepeMC (12 November 2003)

danke für die antworten aber leider wie schon gesagt brauch ich nur lösungen für die s7-200

Mfg YepeMC


----------



## andre (13 November 2003)

Hallo,
platziere in einem Netzwerk den Baustein READ_RTC, markiere ihn und drücke die Taste F1. Die Hilfe öffnet sich und besser kann ich es nicht beschreiben. An "T" wird die Zeit BCD-codiert ausgegeben, die mit der Echtzeit verglichen wird.
Leider vollzieht die Echtzeituhr meines Wissens nicht die Sommer- /Winterzeitumstellung.
Nachtrag:
Der Zeitwert T kann dann an anderer Stelle im Programm mit einer Referenzzeit verglichen werden. Leider weiß ich nicht, wie man Programmteile in die Beiträge kopiert, sonst hätte ich fix ein kleines Beispiel erstellt.


----------



## Anonymous (13 November 2003)

Auslesen der Uhrzeit aus der S7 200

Für das Datum und die Uhrzeit sind 8 Byte erforderlich
Am Baustein READ_RTC wird am Eingang T die Adresse festgelegt ab welchem Bereich die 8 Byte belegt werden.
Hier bei unserem Fall beginnt der Bereich ab VB100 und geht bis VB107.

VB 100 hier steht in Darstellung HEX das Jahr
VB 101 hier steht in Darstellung HEX der Monat
VB 102 hier steht in Darstellung HEX der Tag
VB 103 hier steht in Darstellung HEX die Stunden
VB 104 hier steht in Darstellung HEX die Minuten
VB 105 hier steht in Darstellung HEX die Sekunden
VB 106 hier steht in Darstellung HEX die Millisekunden (nicht bei allen Typen der Fall)
VB 107 hier steht in Darstellung HEX der Wochentag  0= deaktiviert 1= Sonntag, 2= Montag, 3= Dienstag  bis  7= Samstag

LD     SM0.0
TODR   VB100

mfg

Christian


----------



## YepeMC (17 November 2003)

ja das sieht doch schonmal nicht schlecht aus muss mir das jetzt mal durch den kopf gehen lassen. ob ich das so umsetzen kann. aufjeden fall erstmal danke. falls jemand zuhause ein beispiel programm rumfliegen hat wäre ich sehr dankbar wenn ihr mir es schicken würdet.


----------



## YepeMC (17 November 2003)

hab mir das jetzt mal so durch den kopf gehen lassen und ich versteh das nicht so wirklich

was müsste ich an T schreiben wenn ich alle 2 min ein signal am ausgang haben will???   

Mfg YepeMC


----------



## Anonymous (17 November 2003)

Nein nicht an T
An T legst Du die Adresse fest wo die Daten also sprich die Uhrzeit geschrieben wird. In diesem Bereich steht dann immer die aktuelle Zeit.
Ganz einfaches Beispiel:

VB 103 hier steht in Darstellung HEX die Stunden 
VB 104 hier steht in Darstellung HEX die Minuten 
VB 105 hier steht in Darstellung HEX die Sekunden 

Das heißt im VB103 bis VB105 steht jetzt die aktuelle Zeit.
Jetzt mußt du Dir noch in 3 andere Bereiche die Werte schreiben ab wann
Du zB. etwas einschalten willst.

VB203 Stunden
VB204 Minuten
VB206 Sekunden

zb. VB 203=17 VB204=30 VB205=00 ergibt zB. 17.30 Uhr
jetzt mußt Du Deinen Einschaltpunkt in unserem Fall 17.30 mit der
aktuellen Uhrzeit vergleichen.Also VB103-VB104 vergleichen mit VB203-VB204.
Und mit dem vergleichen kannst Du Dir zB. dann einen Merker/Ausgang setzen der dann etwas einschaltet.


Hoffe Du kommst klar mit meiner Erklärung
Mit dem hier bist Du von einer Schaltuhr noch sehr weit entfernt aber kommst dem ganzen doch schon etwas näher.

Mfg

Christian


----------



## Anonymous (17 November 2003)

Das auschalten nicht vergessen geht genauso wie das einschalten.
Und wenn Du wirklich alle 2 Minuten etwas einschalten möchtest dann
benutze besser einen normalen Timer.
Eine richtige Schaltuhr mit 3-4 Einschaltpunkten und 3-4 Ausschaltpunkten pro Tag und das ganze mal 7 für eine Woche ist schon etwas arbeit.

mfg


----------



## YepeMC (18 November 2003)

nein will nicht alle 2 min etwas einschalten es soll schon so wie ne zeitschaltuhr funktionieren.
also ich glaube das mit den VB 103 bis VB 105 hab ich jetzt verstanden.
also ich erstelle jetzt für dieses beispiel 3 rtc_read und jeweils an T muss dann eins von den VB&s. okay!?
so aber was ich jetzt nicht verstanden habe ist wo ich jetzt dem VB den wert gebe.
sorry das ich mich so dumm anstelle hab leider noch nicht wirklich viel mit microwin zutun gehabt kenn mich nur mit Step7 aus


----------



## Anonymous (18 November 2003)

Hi

also so ganz hast Du das noch nicht verstanden aber nicht schlimm wir werden das schon schaffen.
Das auslesen der Zeit brauchst Du nur einmal machen und nicht 3x.
Einen Merker kann man ja auch nur einmal zuweisen aber Ihn so oft man will verarbeiten im Programm.
Also an T schreibst Du die Adresse.
Ab dieser Adresse werden 8 Byte's belegt in die das Datum und die Uhrzeit geschrieben werden.
Deine Einschaltwerte und Ausschaltwerte mußt Du schon fest programmieren mit dem PG oder Du hast ein Display, Touch Panel worüber eine Eingabe erfolgt.


Mit nettem Gruß

Christian


----------



## Hanf_Lolly (26 September 2008)

hi, ich wollte das Thread nochmal eben wieder aufleben lassen. Genau wie der Thread Ersteller habe das selbe vor. Allerdings möchte ich nun wissen wie ich in den

VB204 und VB205 meine "Wunschzeit" zu schreiben. Vielen dank für eure Hilfe!!!

Mfg

Hanf_Lolly


----------



## dalbi (27 September 2008)

Hallo Leute,

also als erstes benötigt man folgende Variablen


```
CPU_Jahr    VB0    Aktuelles Jahr (0-99) BCD-Wert
CPU_Monat    VB1    Aktueller Monat (1-12) BCD-Wert
CPU_Tag    VB2    Aktueller Tag (1-31) BCD-Wert
CPU_Stunde    VB3    Aktuelle Stunde (0-23) BCD-Wert
CPU_Minute    VB4    Aktuelle Minute (0-59) BCD-Wert
CPU_Sekunde    VB5    Aktuelle Sekunde (0-59) BCD-Wert
CPU_Reserviert    VB6    Reserviert immer auf 00 gesetzt
CPU_Wochentag    VB7    Aktueller Wochentag (1-7) 1=Sonntag (BCD-Wert)
```

das auslesen der Uhr erfolgt dann mittels READ_RTC siehe Bild.

In denn Variablen steht jetzt das aktuelle Datum und die Uhrzeit BCD codiert.

Gruss Daniel


----------



## Hanf_Lolly (27 September 2008)

Soweit so gut, das habe ich verstanden, aber wie ich jetzt die Uhrzeit, wo ich eine Aktion haben in eine VB schreibe, das ist meine Frage!!! Das steht ich nicht, in AWL kann ich ja ncht schreiben VB100=2 oder so...

Weiß jemand wie das geht? Danke!!!

Hanf_Lolly


----------



## dalbi (27 September 2008)

Hallo also ich habe es so gelöst,
da meine S7-200 nicht alle Funktionen unterstützt.

Stunde u. Minute in ein Wort (VW8 schieben)

```
LD     log_1:SM0.0
MOVB   CPU_Stunde:VB3, VB8

LD     log_1:SM0.0
MOVB   CPU_Minute:VB4, VB9
```
Zeit BCD codiert in INT wandeln (Stunde*100+Minute)

```
LD     log_1:SM0.0
BCDI   Zeit:VW8
```
z.B. Einschalten um 20:00 Uhr

```
LDW=   Zeit:VW8, 2000
S      A_Brunnen:A0.0, 1
```
z.B. Ausschalten um 23:30 Uhr

```
LDW=   Zeit:VW8, 2330
R      A_Brunnen:A0.0, 1
```
Gruss Daniel


----------



## lorenz2512 (28 September 2008)

hallo,
hier gibt es fertige bausteine dafür: http://www.s7-200.net/libraries/Scripts/toc586a.html?Part=1


----------



## Hanf_Lolly (30 September 2008)

ok vielen dank an euch! konnte es noch nicht testen weil mein usb serial adapter kaputt ist aber werde es in den nächsten tagen nachholen!Vielen vielen dank!!!

Mfg  

Hanf_Lolly


----------



## OB1 (1 Oktober 2008)

lorenz2512 schrieb:


> hallo,
> hier gibt es fertige bausteine dafür: http://www.s7-200.net/libraries/Scripts/toc586a.html?Part=1




Diese Bausteine funktionieren aber nur mit 22xCPUs und nicht mit 21xCPUs
Bei 21xCPUs ist ein Lösungsweg wie von D. Albinus zu bestreiten.


----------



## Hanf_Lolly (6 Oktober 2008)

Hallo!

Ich habe den Lösungsweg von D. Albinus nachprogrammiert. Jetzt würde ich aber gerne noch die Sekdunden mit ins spiel bringen, d.h. die Rolladen sollen schon wieder um 20:00:12 zurückgesetzt werden. Wie bringe ich sowas ein?

So mein meine Verschiebung der VB's aus


```
LD     SM0.0
MOVB   VB3, VB8
LD     SM0.0
MOVB   VB4, VB9
LD     SM0.0
MOVB   VB5, VB10
```

Aber wie sage ich, dass er um 20:00:12 den Eingang A0.1 zurücksetzen soll? Also welche Zahlen muss ich in den "(????)" Bereich eintragen um die Sekunden noch mit zu berücksichtigen??? 


```
LDW= VB8, 2000
S A0.1, 1
LDW= VB8, (????)
R A 0.1, 1
```


Danke für euere Hilfe!!!

Mfg

Hanf_Lolly


----------



## OB1 (7 Oktober 2008)

Hallo Hanf_Lolly

Habe es nicht getestet aber es müste so gehen


```
LD     Immer_ein
NOP    1                           //Sekunden
BTI    VB5, AC0
MOVW   AC0, AC1
BCDI   AC1
NOP    1                           //Minuten
BTI    VB4, AC0
BCDI   AC0
*I     +100, AC0
+I     AC0, AC1
ITD    AC1, AC1
NOP    1                           //Stunden
BTI    VB3, AC0
BCDI   AC0
ITD    AC0, AC0
*D     +10000, AC0
MOVD   AC0, VD10
+D     AC1, VD10                   //20:00:12 -> Doppelwort VD10 200012
```

und dann nur mehr das Doppelwort vergleichen.


Oder du verwendest http://www.s7-200.net/libraries/Scri...6a.html?Part=1


----------



## Hanf_Lolly (8 Oktober 2008)

Habe ich alles  so in mein Programm geschrieben, aber mein Step 7 Mirco WIN sagt mir, dass die ausgewählte Operation von dem ausgewählten Zielsystem nicht unterstützt wird... ich habe eine CPU 214; CPU Version 01.11

Kann das sein, dass die multiplizier Funktion nicht unterstützt wird oder so? Und was ist überhaupt AC01 etc?

Mfg

Hanf_Lolly


----------



## OB1 (8 Oktober 2008)

Hallo Hanf_Lolly




Hanf_Lolly schrieb:


> Habe ich alles  so in mein Programm geschrieben, aber mein Step 7 Mirco WIN sagt mir, dass die ausgewählte Operation von dem ausgewählten Zielsystem nicht unterstützt wird... ich habe eine CPU 214; CPU Version 01.11



Das ist mein Fehler, denn meine kleinste CPU ist 216 und ich habe nicht bedacht das es noch keinere CPUs mit eingeschränktem Befehlssatz gibt.:icon_redface:

Ich kann dir erst Montag wieder helfen da zur Zeit nicht in der Firma bin.




Hanf_Lolly schrieb:


> Und was ist überhaupt AC01 etc?




AC0 AC1 sind die Akkumulatoren


----------



## OB1 (13 Oktober 2008)

Hallo Hanf_Lolly

Hab es für 214 geschrieben und auf 216 getestet.



```
LD     Immer_ein
NOP    1                           //Sekunden
MOVB   VB5, AC0
MOVW   AC0, AC1
BCDI   AC1
NOP    1                           //Minuten
MOVB   VB4, AC0
BCDI   AC0
MUL    +100, AC0
+I     AC0, AC1
NOP    1                           //Stunden
MOVB   VB3, AC2
MOVW   AC2, AC0
BCDI   AC0
MUL    +10000, AC0
MOVD   AC0, VD10
+D     AC1, VD10                   //20:00:12 -> Doppelwort VD10 200012
```


----------



## Hanf_Lolly (13 Oktober 2008)

Erstmal danke für deine Mühe aber funktionieren tut es das bei mir immmer noch nicht... also ich hab jetzt ein Netzwerk wo ich die Echtzeit in den VB0 lade dann ein Netzwerk mit dem Kram da oben und dann ein Netzwerk das sieht so aus:


```
LDD=   VD10, 200000                //z.B: Runterfahren um 20:00:00 Uhr
S      A1.1, 1                     //Rolladen runterfahren(1=1Bit) - Endlagen extern
LDD=   VD10, 200012                //Abschalten um 20:00:12 Uhr
R      A1.1, 1                     //Rolladen nicht mehr ansteuern(1=1Bit)
```

Was ist daran denn noch verkehrt? 

Mfg

Hanf_Lolly


----------



## OB1 (13 Oktober 2008)

Hanf_Lolly schrieb:


> Erstmal danke für deine Mühe aber funktionieren tut es das bei mir immmer noch nicht... also ich hab jetzt ein Netzwerk wo ich die Echtzeit in den VB0 lade dann ein Netzwerk mit dem Kram da oben und dann ein Netzwerk das sieht so aus:
> 
> 
> ```
> ...



hast du dir den Status von VD10 schon mal angeschaut?
Was steht in vd10 drinnen?


----------



## Hanf_Lolly (13 Oktober 2008)

Ganz merkwürdig da steht z.B. um 19:59







Mfg

hanf_lolly


----------

