# hilfe gesucht für schaltuhr



## linuxluder (1 Oktober 2007)

hi,

vor einigen wochen hatte mir kai hier http://www.sps-forum.de/showpost.php?p=85931&postcount=25 ein paar bausteine ins netz gelegt, mit der man die systemzeit aus des cpu ausliest.

könnte mir freundlicherweise irgendwer dabei helfen, nun auf dieser grundlage bei folgendes behilflich sein, ...
1. einen baustein zu erstellen, der diese uhrzeit und das datum auf einem op7 ausgibt
2. einen baustein zu erstellen, der als schltuhr fungiert?

vielen dank schon mal,
jo


----------



## Eagel1 (1 Oktober 2007)

Hey 
es ist zwar schon etwas was her, als ich das letzte mal mit nen op7 gearbeitet habe aber ich habe in erinnerung das man beim op 7 die system zeit ganz einfach über protool bzw wincc einfügen kann.


----------



## Larry Laffer (1 Oktober 2007)

Hallo,
auf sdem OP7 kannst du die Systemzeit nur als SPS-Variable anzeigen. D.h. du musst in der SPS eine Variable erzeugen, die den von dir gewünschten Inhalt im entsprechenden Format enthält.

Zum Thema Schaltuhr gibt es in der Suche einige interessante Beiträge. Hier vielleicht speziell den von "Kai" heraussuchen ...


----------



## linuxluder (2 Oktober 2007)

hi,

danke für eure tipps. die systemuhrzeit auf op bringen ist zunächst mal sekundär.
ich bräuchte erstmal einen baustein, in dem ich die schaltzeiten eingeben kann, um einen bestimmten merker oder ausgang zu bekommen. die uhr selbst habe ich schon "programmiert" - auf der grundlage der o.g. bausteine.

danke


----------



## riesermauf (3 Oktober 2007)

Uhrzeit auf's OP, siehe hier
http://support.automation.siemens.com/WW/view/de/24088798


----------



## Ralle (3 Oktober 2007)

@linuxluder

Vom Prinzip her kommen für mich zwei Ansätze in Frage:

1. Auslesen der Zeit aus der CPU (SFC1 oder im OB1-Kopf) und Ablegen der Start- und Stop-Zeit im Format "Time and Date". Dann müßte man diese Formate jedesmal auseinanderpuzzeln und über einzelne Vergleicher ermitteln, ob Jahr, Tag, Stunde, Minut, Sekunde die Bedingungen erfüllen, einen Nocken zu schalten oder nicht.

2. Auslesen der Zeit wie oben, Ablegen in zwei Variablen a) Date, b) Time of Day.



> Date:
> 
> Datentyp    Länge (Bit)    Format    Beispiele für das Format
> Min.    Max.
> ...





> Time of Day:
> 
> Datentyp    Länge (Bit)    Format
> TIME_OF_DAYoder TOD    32    Tageszeit in Stunden:Minuten:Sekunden.Millisekunden
> ...



Die Start- und Stopzeit für die Schaltuhr legst du ebenfalls jeweils in diesen zwei Variablenformaten ab. 

Nun kannst du mit 4 Vergleichsoperationen entscheiden, ob deine Schaltuhr den zugehörigen Ausgang schalten soll oder nicht.

Wenn
1. Aktuelles Datum > Einschaltdatum
UND
2. Aktuelle Zeit > Einschaltzeit
UND
3. Aktuelles Datum < Ausschaltdatum
UND
4. Aktuelle Zeit < Ausschaltzeit
DANN
Schaltausgang auf 1

Die Formate für Date und "Time of Date" sind 16 bzw. 32 Bit, können also direkt mit Vergleichern benutzt werden.

Die 2. Variante würde ich wohl vorziehen.

Das Programm würde ich in 4 Teile gliedern:

1. Eingabe der Daten (Start-, Stopzeit) am OP, umwandeln in die gewünschten Formate und eintragen in einen Datenbaustein.
2. Ein Baustein, der fortlaufend die aktuelle Zeit ausliest, in das benötigte Format wandelt.
3. Ein Baustein, der für ein Pärchen (Start-, Stopzeit) die Vergleichsoperationen durchführt und den Schaltausgang schaltet.
4. Wenn nötig, den Baustein von 3. für mehrere Schaltnocken wiederverwenden, z.Bsp. in einem übergeordneten FB für 6 Schaltausgänge.


----------



## linuxluder (3 Oktober 2007)

danke ralle,

hier mal ne kleine Zusammenfassung



> Anforderungen SPS-Projekt in Dringlichkeitsreihenfolge
> 
> 1. Systemzeit aus CPU auslesen [FONT=Symbol erw.][FONT=Symbol erw.]®[/FONT][/FONT] bitte Anmerkungen lesen !!!
> 2. Schaltuhr,
> ...


gruß jo


----------



## Ralle (3 Oktober 2007)

linuxluder schrieb:


> eine Schaltnocke, bezogen auf einen Tag, z. B. 6.00 – 16.30
> eine Schaltnocke, bezogen auf zwei Tage, z. B. 18.00 – 9.30 des nächsten Tages
> eine Schaltnocke, bezogen auf beliebigen Zeitraum 3.10.07, 15.00 – 12.12.08, 12:30
> gruß jo



Ok, da würde ich schon mal die von mir vorgeschlagene Variante 2 in Betracht ziehen. 



> eine Schaltnocke, bezogen auf einen Tag, z. B. 6.00 – 16.30


Soll der Ausgang also an jedem Tag schalten?



> eine Schaltnocke, bezogen auf zwei Tage, z. B. 18.00 – 9.30 des nächsten Tages


??? 

Es gäbe 2 Möglichkeiten, Ausgänge, die täglich wiederkehrend schalten und Ausgänge, die einmalig schalten, also mit Datum angegeben werden. Täglich Schalten als Sonderfall könnte man machen, indem man das Datum auf 0 setzt und entsprechend reagiert.

Die Vorgeschichte werd ich morgen nochmal ansehen, der FC10 von Kai kann ja mit Datum versehen entspechend abgeändert genutzt werden.

Wozu dient der ganze Spaß eigentlich?


----------



## linuxluder (3 Oktober 2007)

*@ ralle*

hi,



> Wozu dient der ganze Spaß eigentlich?


 
Unter anderem schalte ich eine Zirkulationspumpe der Heizung und ein paar Lichter im Haus. Demnächst sollen evtl. ein paar Magnetventile zur Gartenbewässerung dazukommen.
Ich habe mir damals halt sowas "eingebildet". Habe einiges an Kohle reingesteckt. Habs mir leichter vorgestellt, das Programmieren.



> Die Vorgeschichte werd ich morgen nochmal ansehen, der FC10 von Kai kann ja mit Datum versehen entspechend abgeändert genutzt werden.


 
Und genau da hakt es bei mir. Ich habe kaum Probleme mit logischen Verknüpfungen. Aber was darüber hinausgeht, bereitet mir große Schwierigkeiten. Ein paar konkrete Beispiele bringen mich dann immer weiter. Alles was so weiß, habe ich mir zum Großteil selbst beigebracht, na ja, besser gesagt hier im Forum nachgefragt.

Bis dann, Gruß Jo


----------



## Onkel Dagobert (3 Oktober 2007)

Hallo Jo,

in diesem Fall solltest du über eine Wochenschaltuhr nachdenken, also nichts mit Datum, sondern in Abhängigkeit vom Wochentag. Reicht dir eine Auflösung der Schaltzeiten im 15-Minutentakt?


Gruß, Onkel


----------



## linuxluder (3 Oktober 2007)

servus onkel,

das wäre sicher auch ne möglichkeit, aber ich denke ziemlich aufwendig.
so wie die fertigen 230V-schaltuhren, mit diesen möglichkeiten
mo, di, mi, do, fr
oder
mo, di, mi, do, fr, sa, so
oder
sa, so

aber das ganz normale aus meinem obigen posting wäre mir zunächst am liebsten.
das mit den wochentagen wäre zusätzlich ein "schmankerl"

gruß "neffe" jo


----------



## Ralle (4 Oktober 2007)

Sag mal jo, kennst du diesen Beitrag bei Siemens schon?
Wenn man die Funkuhr rausnimmt, wäre das ja evtl. etwas.

Zeitschaltuhr


----------



## vipianer (4 Oktober 2007)

Hallo,

ohne das ich die ganzen links hier gelesen hab...wäre das nicht am einfachsten über die S7 Uhrzeitalarme (OB10..OB17)?
anbei ein Auszug aus der Online-Hilfe:

Beschreibung
S7 stellt bis zu acht OBs (OB 10 bis OB 17) zur Verfügung, die einmalig oder periodisch gestartet werden. Sie können Ihre CPU mittels SFC oder STEP 7 so parametrieren, daß diese OBs in den folgenden Intervallen bearbeitet werden:
· Einmalig
· Minütlich
· Stündlich
· Täglich
· Wöchentlich
· Monatlich
· Jährlich
· Am Monatsende


----------



## linuxluder (4 Oktober 2007)

Ralle schrieb:


> Sag mal jo, kennst du diesen Beitrag bei Siemens schon?
> Wenn man die Funkuhr rausnimmt, wäre das ja evtl. etwas.
> 
> Zeitschaltuhr


 
hi ralle,

das schaut wirklich gut aus, aber ich bezweifle, dass ich das selbst so einfach umsetzen kann. aber die verschiedenen schaltuhr-versionen (auf tag, woche, monat oder jahr bezogen) wären super.
ich weiß ehrlichgesagt nicht, ob ich den inhalt der zipfiles so einfach in meinem step7-light öffnen kann.
aber vielleicht kannst du dir ja trotzdem mal die bausteine von kai ansehen. 

bis dann,


----------



## Kai (4 Oktober 2007)

Hallo Jo,

ich habe in der Zwischenzeit meinen Baustein für die Schaltuhr soweit geändert, dass Du die Ein- und Ausschaltzeiten über Dein OP7 ändern kannst. Damit hast Du dann eine Schaltuhr für einen Tag (6:00 - 16:30) und für zwei Tage (18:00 - 9:30), deren Schaltpunkte über Dein OP7 geändert werden können.

Gruß Kai


----------



## Kai (4 Oktober 2007)

Und hier sind die notwendigen Bilder und Variablen für Dein OP7 in ProTool.

Gruß Kai


----------



## Bender25 (5 Oktober 2007)

Ohne das jetzt alles gelesen zu haben. 

Ist es nicht so, wenn du jetzt Soll Uhrzeit und Ist Uhrzeit vergleichst du z.b. einen Problem bekommst wenn diese über Mitternacht geht?

Sprich 23 Uhr ein 1 Uhr aus?


----------



## franzlurch (5 Oktober 2007)

Vielleicht hilft dir das weiter. Schau mal rein !!!


----------



## skyracer (5 Oktober 2007)

*Schaltuhr*

Hallo,
genau das Problem hatte ich auch. Folgendermassen habe ich das gelöst.
Ich hab mir einen FC geschrieben


CALL "_Schaltuhr"
Ein:="Uhr_Datum_Werte".Winter_Hallenentl_ein //Time_of_Day
Aus:="Uhr_Datum_Werte".Winter_Hallenentl_aus //Time_of_Day
Out:="Uhr_Datum_Werte".Schaltuhr_Winter_Entl //Bool

FC12
L #Aus //Time_of_Day
L #Ein //Time_of_Day
>D 
= #Selbe_Tag //Bool

L "Uhr_Datum_Werte".Uhrzeit //Time_of_Day
L #Ein //Time_of_Day
>D 
= #Ist_Gr_Ein //Bool

L "Uhr_Datum_Werte".Uhrzeit //Time_of_Day
L #Aus //Time_of_Day
<D 
= #Ist_Kl_Aus //Bool

U #Ist_Gr_Ein
U #Ist_Kl_Aus
U #Selbe_Tag
O( 
U #Ist_Gr_Ein
O #Ist_Kl_Aus
UN #Selbe_Tag
) 
= #Out //Bool

Funktioniert auf jeden Fall.Wenn Du willst kannst Du jetzt noch den
Tag als Parameter einbinden. Ich mache das immer Tag 0-7 bedingt einschalten.
Mit 8 bedingungslos (also egal welcher Tag) ein/ausschalten.

Viel Spass


----------



## Kai (5 Oktober 2007)

Bender25 schrieb:


> Ohne das jetzt alles gelesen zu haben.
> 
> Ist es nicht so, wenn du jetzt Soll Uhrzeit und Ist Uhrzeit vergleichst du z.b. einen Problem bekommst wenn diese über Mitternacht geht?
> 
> Sprich 23 Uhr ein 1 Uhr aus?


 
Nein, es gibt da keine Probleme.

Im FC220 (Schaltuhr) mache ich folgende Unterscheidungen:


```
Einschaltzeit < Ausschaltzeit
 
Einschaltzeit = 10:00:00.000
Ausschaltzeit = 14:00:00.000
 
Einschaltzeit > Ausschaltzeit
 
Einschaltzeit = 22:00:00.000
Ausschaltzeit = 06:00:00.000
 
Einschaltzeit = Ausschaltzeit (Schaltuhr bleibt aus)
 
Einschaltzeit = 08:00:00.000
Ausschaltzeit = 08:00:00.000
```
 
Zur Verdeutlichung habe ich noch einmal den FC220 (Schaltuhr) als FUP beigefügt. 

Im Netwerk 2 kann man sehen, wie die Schaltuhr arbeitet.

Gruß Kai


----------



## Kai (5 Oktober 2007)

franzlurch schrieb:


> Vielleicht hilft dir das weiter. Schau mal rein !!!


 
In Deiner Zeichnung ist ein kleiner Fehler:

Im Netzwerk 2 muss der zweite Vergleich auf <= und nicht auf >= erfolgen.

#Uhrzeit <= TOD#16:0:0.0

Gruß Kai


----------



## linuxluder (5 Oktober 2007)

ich bin gerade dabei, die bausteine von kai in meine step7 zu "klopfen".
ist da eigentlich wieder eine instanz-db dabei, der sich beim aufruf automatisch generiert?

danke jo


----------



## Kai (5 Oktober 2007)

linuxluder schrieb:


> ist da eigentlich wieder eine instanz-db dabei, der sich beim aufruf automatisch generiert?


 
Nein, es sind zur Zeit noch kein Instanz-DBs dabei.

Instanz-DBs braucht man nur, wenn man mit FBs arbeitet. Und da die aktuellen Bausteine nur ein OB und zwei FCs sind, hat man auch keine Instanz-DBs.

http://www.sps-forum.de/showpost.php?p=99972&postcount=15

Gruß Kai


----------



## linuxluder (5 Oktober 2007)

hi kai,

ich hab die bausteine drin, hat eigentlich alles geklappt.
das netzwerk 2 aus dem ob1 habe ich jetzt mal deaktiviert, sonst wäre mir die sps nicht angefahren. liegt vermutlich daran, dass ich das op7 noch nicht integriert habe.

editiert 21:37: ich habe den fehler entdeckt. der merker 200.0 war es. offensichtlich habe ich nicht so viele merker zur verfügung. 128 ?  egal, ich habe ihn einfach durch merker 100.0 ersetzt.


noch was anderes:
ich verstehe das schon richtig oder: ich habe jetzt *eine* schaltuhr? oder mehrere? oder kann mir das jetzt für jede weitere bestimmte dinge "duplizieren"?

danke für deine geduld, Jo


----------



## Kai (5 Oktober 2007)

linuxluder schrieb:


> editiert 21:37: ich habe den fehler entdeckt. der merker 200.0 war es. offensichtlich habe ich nicht so viele merker zur verfügung. 128 ? egal, ich habe ihn einfach durch merker 100.0 ersetzt.


 
Was hast Du den für eine CPU?



linuxluder schrieb:


> ich verstehe das schon richtig oder: ich habe jetzt *eine* schaltuhr? oder mehrere? oder kann mir das jetzt für jede weitere bestimmte dinge "duplizieren"?


 
Wenn Du mehrere Schaltuhren brauchst, rufst Du den FC220 (FC_SCHALTUHR) einfach mehrmals im OB1 auf. Du musst nur vorher den DB220 (DB_SCHALTUHR) entsprechend erweitern.

Gruß Kai


----------



## skyracer (5 Oktober 2007)

*SchaltUhr*

Macht ruhig weiter,

Wenn's dann doch nicht klappt, denkt ihr vielleicht mal an meinen Beitrag 

Schönen Gruss aus Bukarest oder wie das Kaf grad heisst wo ich bin


----------



## skyracer (6 Oktober 2007)

Kai schrieb:


> Nein, es gibt da keine Probleme.
> 
> Im FC220 (Schaltuhr) mache ich folgende Unterscheidungen:
> 
> ...


 

Und was ist wenn ich am nächsten Tag zur selben Zeit den Out negieren!! ??
  möchte?


----------



## linuxluder (6 Oktober 2007)

Kai schrieb:


> Was hast Du den für eine CPU?


 
CPU 312; Ich hatte das Problem schon mal. Auch da lag es an einem Merker über 128.




> Wenn Du mehrere Schaltuhren brauchst, rufst Du den FC220 (FC_SCHALTUHR) einfach mehrmals im OB1 auf. Du musst nur vorher den DB220 (DB_SCHALTUHR) entsprechend erweitern.


 
Mach ich. Danke.


----------



## Kai (6 Oktober 2007)

linuxluder schrieb:


> CPU 312; Ich hatte das Problem schon mal. Auch da lag es an einem Merker über 128.


 
Die CPU 312 hat einen Merkerbereich von M0.0 - M127.7

Ich Gerätehandbuch für die CPU 312 findest Du ab Seite 7-3 eine Übersicht der technischen Daten, unter anderem auch eine Übersicht über den Merkerbereich:

S7-300 CPU 31xC und CPU 31x Technische Daten

Eine weitere Übersicht über den Merkerbereich findest Du in der Operationsliste für die CPU 312 auf Seite 10:

Operationsliste S7-300 CPU 31xC, CPU 31x, IM 151-7 CPU, IM 154-8 CPU, BM 147-1 CPU, BM 147-2 CPU

Gruß Kai


----------



## NightHawk112 (25 November 2008)

Hallo!!!
Ich habe die zeitschaltuhr mit den Vergleichern soweit versucht aufzubauen.
Der Vergleich der Wochentage mit INT_Vergleichern klappt problemlos, jedoch geht der Vergleich der Zeiten mit dem CMP<D Baustein nicht. Obwohl die Variablen, die dem FB übergeben werden im Format TOD sind, nimmt dieser die nicht an den Eingängen an, was mache ich da falsch???


----------



## Kai (25 November 2008)

Wenn Du in STEP 7 in FUP programmierst, dann musst Du im KOP/AWL/FUP-Programmeditor unter "Extras/Einstellungen" im Register "KOP/FUP" den Haken bei "Typüberprüfung für Operanden" entfernen.

Gruß Kai


----------



## robby (7 Dezember 2008)

ich finde franzlurch hat die beste und einfachste metode
(bis aufm kleinen fehler isses einfach gut):icon_wink:.


----------



## BTDA (30 Mai 2010)

Thread hochhol.
Ich habe lange gesucht aber nicht die richtige Lösung gefunden.
Ich möchte über einen Zeitvergleich einen Merker setzen und genauso wieder zurücksetzen. Das das ganze für eine Rollosteuerung ist kann ich den Merker nicht permanent auf "1" sitzen lassen , da ansonsten eine manuelle Steuerung nicht mehr mögliche wäre.
Beispiel Schaltuhr sagt Stockwerk OG "AUF" solange Zeit>= OG AUf erreicht und Zeit <= OG AB. D.h. wenn jemand dann das Rollo lokal herunterfährt würde es automatisch wieder auf da der Zentrale-AUF Merker noch  aktiv ist. Dies will ich umgehen indem ich den OG Aufmerker nach einer ZEit von 1min automatisch zurücksetze. 

Ein Vergleich mit L Ist-zeit      L AUf ZEIt ==I hat leider auch nur hin und wieder funktioniert. Ich nehem an es liegt daran das die Zyklus länger dauert als 1 msec. Und um getriggert zu werden müssen beide Zeiten bis auf die msec gleich sein. 

Ich hoffe ich habe mich einigermassen verständlich ausgedrückt.
Vielen Dank schon mal


----------



## Ralle (30 Mai 2010)

Da würde ich ein Fenster drumherum bilden.

Also 

Auf_UG = Aufzeit - 100 ms, 
Auf_OG = Aufzeit + 100 ms 

und dann ein Vergleicher 

(Istzeit > Auf_UG) And (Istzeit < Auf_OG).

PS: Zur Ergänzung, man könnte auch der Istzeit die ms "wegschneiden" und die Aufzeit ist wahrscheinlich eh auf Sekunden genau, dann geht auch der Vergleich auf Gleichheit, aber in Unkenntnis des Formates deiner Zeiten, hab ich mal die Variante mit > und < gewählt.


----------



## Paule (30 Mai 2010)

Also ich habe jetzt nicht die 32 Beiträge davor gelesen aber was ich aus Deinem Beitrag lese würde ich das so machen:
Zeitschaltuhr setzt mit einer Flanke einen Merker z.B.: "Auf" Endlage oben oder Taster ab setzt den Merker wieder zurück.
Merker steuert Schütz "Auf" an.


----------



## eden (15 Dezember 2011)

"KAI", kann Sie laden diese komplett program nach forum ?

Danke


----------



## eden (15 Dezember 2011)

hallo, 
ich habe noch eine frage:
was meinen diese instruction ?

DB220.DBW0
DB220.DBD2

ich weis das ist data base 220, adress 0 und 2, aber was ist das DBW und DBD ?

Danke


----------



## madvario (15 Dezember 2011)

DBW = DataBaseWord
DBD = DataBaseDoubleword

Word = 2 Byte
DWord = 4 Byte

Bitte


----------



## drudge (13 September 2012)

Kai schrieb:


> Was hast Du den für eine CPU?
> 
> 
> 
> ...




Hallo Kai,

wollte deine Schaltuhr heute mal ausprobieren.
Komischerweise funktioniert die immer nur im 12 Stunden-Rhytmus?!
Ich habe zwei Schaltuhren aufgerufen:

Also wenn ich die Variablen folgendermaßen einstelle:

#Ein 6:00 uhr
#Aus 7:00 uhr

Das funktioniert  problemlos. ABER die zweite Schaltuhr:

#Ein 14:00 uhr
#Aus 16:00 uhr

funktioniert nicht, sobald ich die Uhrzeit in der SPS höher als 12:00 uhr einstelle (zb über das MP170), schaltet sofort die Schalktuhr (Merker am Ausgang = 1).

Jemand eine Idee, woran das liegt?


----------

