# Zeitschaltuhr realisieren (dringend)



## JMK (14 August 2007)

Erst mal ein hallo an alle in die Runde (erstes und bestimmt nicht letztes Posting)

Nun zum Problem:

CPU: S7-312C
Step7 V5.2

Neben dem eigentlichen Programm (was bereits fertig ist und getestet ist) brauche ich eine Funktion bzw. Möglichkeit eine Pumpe jeden Abend von 22:30 bis 23:00 laufen zu lassen.

Neben meiner Recherche im Internet setz ich ein wenig die Hoffnung hier in das Forum.

Auf der Siemens Seite habe ich folgendes gefunden
https://support.automation.siemens....seus&aktprim=4&extranet=standard&load=content

Wenn man sich da die Dokumentation anschaut sieht man das der FB120 genau die Funktion ist die ich brauche. Aber ich hab keine Ahnung wie ich die in dem runterladbaren "Code Zeitschaltfunktionsbausteine" bentuzen kann. Mir ist zwar klar wie ich aus dem OB1 den FB120 aufrufen kann aber wie ich die Parameter setzten muss is mir leider Schleierhaft.





Auch den DB120 find ich nicht in dem runerladbaren Code Paket


Für Tips wäre ich sehr dankbar.

EDIT: Sorry das ich so nervig dringend daneben geschrieben hab aber ich muss morgen fertig sein


----------



## Ralle (14 August 2007)

Geh doch nochmal auf die Siemensseite, da sind doch auch Beispiele dabei, schau dir zuerst die mal an, anhand der Beispiele kannst du dann viel besser deine Fragen präzisieren.

PS. Dringend ist es doch immer, oder?


----------



## Larry Laffer (14 August 2007)

Hallo,
ich kenne den beschriebenen FB nicht, aber grundsätzlich ...:
Du legst innerhalb des aufrufenden Bausteins im TEMP-Bereich 1 Variable Einschaltzeit und 1 Variable Ausschaltzeit vom Typ UDT6 an. Diese Variablen trägst du an den FB120 als Parameter. Vorher musst du ssie natürlich noch passend zuweisen, aber das muss sich eigentlich aus dem UDT6 ergeben ...

Warscheinlich :

```
L 12
T Einschaltzeit.Stunde
L 30
T Einschaltzeit.Minute
L 0
T Einschaltzeit.Sekunde
```
 
oder so ... probier mal. Ansonsten bräuchte ich mehr Info's ...


----------



## Steve81 (14 August 2007)

JMK schrieb:


> Auch den DB120 find ich nicht in dem runerladbaren Code Paket


 
DB120 ist der Instanz DB für FB120. Dort wo die roten Fragezeichen sind (über FB120) DB120 hin schreiben, dann wird er generiert.


----------



## JMK (14 August 2007)

Also erst mal danke an alle für die schnellen Antworten:

@Ralle
Das Beispiel von der Siemens Webseite hab ich mir runtergeladen und es hat mich kein Stück weitergebracht.

@Larry (und alle anderen)
https://support.automation.siemens....E_v201.zip?func=cslib.csFetch&nodeid=23780844
Hier findet man das Codepaket von dem ich rede 
UDT6 is dabei aber ich weiß net wie bzw. wo ich die Werte zuordnen kann.

@Steve81
ich vermute fast das DB120 dem im Codepaket zu finden DB20 entsprechen soll. was hab ich den davon wenn ich einen leeren DB generiere?


Problemstellung:
Alles was ich will ist einen Merker (zB M2.0) der in der Zeit von 22:00-23:00 den Wert 1 hat.



Hätte nie gedacht das das so kompliziert ist.

Hoffe das ihr mir da helfen könnt.


----------



## zotos (14 August 2007)

JMK schrieb:


> ...
> @Steve81
> ich vermute fast das DB120 dem im Codepaket zu finden DB20 entsprechen soll. was hab ich den davon wenn ich einen leeren DB generiere?
> ...



Da brauchen wir aber einen [Aua] Knopf.

Lese mal in der Hilfe unter Instanzen nach.

Bitte sag jetzt nicht das man Dich auf einen Kunden los gelassen hat.


----------



## JMK (14 August 2007)

zotos schrieb:


> Da brauchen wir aber einen [Aua] Knopf.
> 
> Lese mal in der Hilfe unter Instanzen nach.
> 
> Bitte sag jetzt nicht das man Dich auf einen Kunden los gelassen hat.


 
Ok dann drück den [Aua] Knopf, wenn du dich dann besser fühlst.  


Ich habs in der Hilfe nachgelesen was eine Instanz ist und wenn ich das in Kombination zusammen mit deinem Kommentar versuche zu deuten, dann verwaltet sich der DB also selbst.

Tut mir leid das ich erst anfange SPS-Programmieren zu lernen. Aber jeder fängt irgendwann mal an.


----------



## Steve81 (14 August 2007)

JMK schrieb:


> @Steve81
> ich vermute fast das DB120 dem im Codepaket zu finden DB20 entsprechen soll. was hab ich den davon wenn ich einen leeren DB generiere?


 
Der ist nicht leer wenn du ihn erzeugst.
Er wird für den FB als Instanz benötigt. 
Ansonsten würde es ein FC tun.


----------



## JMK (14 August 2007)

OK 
aber das eignetliche Problem besteht immer noch:

Alles was ich will ist einen Merker (zB M2.0) der in der Zeit von 22:00-23:00 den Wert 1 hat.

was muss ich tun ?


----------



## zotos (14 August 2007)

JMK schrieb:


> ...
> Ich habs in der Hilfe nachgelesen was eine Instanz ist und wenn ich das in Kombination zusammen mit deinem Kommentar versuche zu deuten, dann verwaltet sich der DB also selbst.
> ...



Ja und nun geht es weiter: Lese mal nach was ein UDT ist.

Damit Du den Satz von Siemens auch verstehst.



			
				SIEMENS schrieb:
			
		

> Eckdaten/Parametrierbarkeit:
> Arbeitsspeicherbedarf:
> day: 760 Bytes
> Instanz-DB: 52 Bytes
> ...



Der FB Day (FB120) wirkt doch da recht simpel.

Man Baut sich einen day_udt aus zwei times_udt.


----------



## Larry Laffer (14 August 2007)

...
Wenn die Sache zu schwierig wird :
ich weiß, dass wir im Forum unter "Zeitschaltuhr" oder so das Thema erst hatten. Dort hatte Kai (soweit ich weiß) einen schönen Baustein kreiert. Vielleicht wäre die Such-Funktion es wert, einmal bemüht zu werden ...


----------



## edison (14 August 2007)

Wie weit bist Du denn?
Hast du den enstprechenden FB in deinem Programm aufgerufen?
Hast Du den Instanz DB erzeugen lassen?
Sind die entsprechenden UDTs rüberkopiert?
Wo willst Du denn die Schaltzeiten vorgeben (Datenbaustein, Visualisierung,etc.)?
Das ganze schon in der CPU / unter PLCSIM angesehen?

Nur Dringend, ohne Infos - so klappt das nicht


----------



## Ralle (14 August 2007)

Larry hat recht, der Siemens-FC scheint hier eh mit Kanonen auf Spatzen zu schießen. Sieh mal in die Standard-Library bei den IEC-Functions nach und hier im Forum unter "Zeitschaltuhr", oder "Uhrzeit". Es geht auch ganz bodenständig. Die aktuelle Zeit würde ich aus dem OB oder mit dem dafür vorgesehenen SFC lesen. Die Zeit wird ja intern im Format ms seit Mitternacht gespeichert (bei den Zeitinfos aus dem OB1 kannst du diese auch in ms umrechnen), so daß du deine Vorgabezeit lediglich in ms umrechnen mußt und dann über zwei Vergleicher ermittelst, ob die aktueller Uhrzeit zwischen den beiden Vorgabezeiten (Start, Ende) liegt. Wenn ja, schaltest du einen Merker auf True.


----------



## Werner54 (14 August 2007)

*Ob10*

Hallo,

die 312C beherrscht den OB10. Täglich 22:00 aufrufen, aktiv setzen und im OB10 sowas wie: UN Mxx.x | SMxx.x eintragen.
Dann im OB1 oder sonstwo mit Mxx.x einen Timer ausschaltverzögert 1h starten und den Merker xx.x zurücksetzen.
Nachteil: die CPU-Zeit ist nicht gepuffert und muss anderweitig überwacht werden.


----------



## JMK (14 August 2007)

Larry Laffer schrieb:


> ...
> Wenn die Sache zu schwierig wird :
> ich weiß, dass wir im Forum unter "Zeitschaltuhr" oder so das Thema erst hatten. Dort hatte Kai (soweit ich weiß) einen schönen Baustein kreiert. Vielleicht wäre die Such-Funktion es wert, einmal bemüht zu werden ...


 
Danke.

Der Kai is mein persönlicher Held des Tages.

http://www.sps-forum.de/showthread.php?t=13911

Die Suche hatte ich eigentlich schon vorher bemüht, habe halt nur die falschen Suchbegriffe benutzt. 

Danke an alle die sich bemüht haben mir Anfänger zu helfen.


----------



## Kai (14 August 2007)

JMK schrieb:


> CPU: S7-312C
> 
> Neben dem eigentlichen Programm (was bereits fertig ist und getestet ist) brauche ich eine Funktion bzw. Möglichkeit eine Pumpe jeden Abend von 22:30 bis 23:00 laufen zu lassen.


 
Hier mal ein kurzes Programmbeispiel von mir.  

Zu der Schaltuhr siehe auch diesen Beitrag:

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

Gruß Kai


----------



## andi-g (24 Oktober 2007)

Kai schrieb:


> Hier mal ein kurzes Programmbeispiel von mir.
> 
> Zu der Schaltuhr siehe auch diesen Beitrag:
> 
> ...


 
Hallo,
Habe mir die Freiheit genommen und den FC110 in mein Programm
übernommen. funktioniert. ... aber warum ???????

wenn ich irgendwelche vergleichs- oder rechenvorgänge mit dem 
Format TOD machen will, bekomme ich immer die Meldung
"Aktualdatentyp TOD passt nicht zum formalen Typ DINT des Formalparameters" 
(z.b. bei einem vergleich: <=D)

Irgendjemand eine Ahnung ? Vielen Dank ! Andreas.


----------



## Perfektionist (24 Oktober 2007)

vermutlich hat Kai die Typprüfung abgeschaltet - wo genau, weiss ich jetzt nicht auswendig, da ich AWL programmiere und daher nie Probleme damit habe, es sei denn, ich irre mich über den Typ, den ich gerade verwende. aber irgendwo bei Optionen ... da müsste es schon sein.


----------



## andi-g (24 Oktober 2007)

Vielen Dank für die Info !
funktioniert nun auch in FUP. In AWL ist es eh kein problem.

schönen Abend ! Andreas.


----------



## Kai (24 Oktober 2007)

Perfektionist schrieb:


> vermutlich hat Kai die Typprüfung abgeschaltet


 
Richtig, ich habe die Typüberprüfung für Operanden für KOP/FUP abgeschaltet. 

Gruß Kai


----------



## andi-g (25 Oktober 2007)

*für rookies wie mich...*

falls auch andere vor einem ähnlichen Problem stehen:

Problem: 
Rechen- oder Vergleichsoperationen des Formates 
TOD "TIME_OF_DAY" unter FUP
resultierende Fehlermeldung: "Aktualdatentyp TOD passt nicht zum formalen Typ DINT des Formalparameters" 
(z.b. bei einem vergleich: <=D)

Lösung:
entweder AWL: (in diesem Fall werden zwei Uhrzeiten addiert
& das Ergebniss in eine dritte Zeit "#EINSCHALT_OS" geschrieben)

      U(    
      L     "SYSTEM_DB".OFFSET_EINSCHALTZEIT
      L     #EINSCHALTZEIT
      +D    
      )     
      T     #EINSCHALTZEIT_OS

oder über FUP:
es muss im kop/fup/awl editor unter extras/einstellungen
im Reiter KOP/FUP das Häkchen unter "Typüberprüfung von Operanten"
entfernt werden. Nun sollte man div. rechen & vergleichsoperationen
von Zeiten im TOD format durchführen können. (z.b. >=D Vergleich)

Besten Dank an alle Beteiligten im Forum, LG. Andreas.


----------



## franzlurch (25 Oktober 2007)

Vielleicht hilft dir das weiter !!!


----------



## andi-g (25 Oktober 2007)

ja, das wäre ein Beispiel für FUP. Danke !


----------



## Guts2 (1 August 2008)

Kai schrieb:


> Hier mal ein kurzes Programmbeispiel von mir.
> 
> Zu der Schaltuhr siehe auch diesen Beitrag:
> 
> ...



Ich will eine Solche Funktion auch einbauen, aber irgendwie bekommen ich es nocht hin einen FC6 oder FC8 zu benutzen.
Wenn ich diese im FC100 verwenden möchte, kommt immer der Fehler Element nicht gefunden  

Hab vorher mit Codesys Programmiert. Verstehe daher noch nicht warum das jetzt nicht funktioniert :shock:


----------



## vierlagig (1 August 2008)

wie machst du den aufruf? tippst du einfach: call fc8? kann dich beruhigen, das funktioniert in den seltensten fällen mit bausteinen aus der standard-bibliothek - das ist auch die stelle an der du suchen mußt ... mit strg+k bekommst du linker hand einen auswahlbaum angezeigt - biblitheken, standard libary und dann mal die entsprechenden fcs suchen und an der entsprechenden stelle in deinem projekt einbinden/aufrufen ... doppelklick sollte hier funktionieren oder drag'n'drop


----------



## Guts2 (1 August 2008)

Habs eben auch gefunden  
Aber danke. 2 Stunden rum probiert und nix geklappt. Jetzt geht es aufwärts


----------



## suvaemente (31 Dezember 2013)

Hallo habe mir mal den FC100 und den FC110 in mein Programm geschrieben ich möchte zu einer bestimmten uhrzeit jeden Tag ein Befehl auslösen brauche ich beide FC's ? 
	

		
			
		

		
	



Oder brauche ich dazu jetzt blos den Schaltuhrmerker M120.0 setzen und meine Ein- und Ausschaltzeit eintragen ?
Muss ich dazu in der CPU noch was freigeben oder einstellen ? CPU 313-1AD03-0AB0


----------



## MSB (31 Dezember 2013)

suvaemente schrieb:


> Hallo habe mir mal den FC100 und den FC110 in mein Programm geschrieben ich möchte zu einer bestimmten uhrzeit jeden Tag ein Befehl auslösen brauche ich beide FC's ?
> 
> 
> 
> ...



Hast du überhaupt schon mal eine Programmierumgebung gesehen, bist du mit Variablen IN/OUT vertraut?

Hier sieht man doch eindeutig das der FC100 aufs MD102 schreibt, und dieses am FC110 wiederum gelesen wird, insofern ist die Frage oberflächlich betrachtet obsolet.
Genau so würde das bei Codesys auch ausschauen (z.B. DT_TO_TOD) ... hier ist halt die Konvertierung von Date_And_Time auf Date bzw. Tod gekapselt.


----------



## suvaemente (31 Dezember 2013)

ja das sehe ich die beiden gehören zusammen.


----------



## suvaemente (31 Dezember 2013)

ich habe es so übernommen und mal aufgespielt aber da kommt bei meiner CPU sofort die SF Leuchte muss ich in der CPU noch was einstellen ?


----------



## bike (31 Dezember 2013)

Die CPU macht nur das, was in dem Programm geschrieben wurde.
Also ist dein Programm fehlerhaft.
Daher versuche zuerst verstehen, was du programmieren willst.


bike


----------



## suvaemente (31 Dezember 2013)

Ich möchte aus der CPU die Uhrzeit auslesen und zu einer bestimmten Zeit jeden Tag ein Befehl auslösen.



ich habe aber mit OB10-17 noch nichts gemacht und kann aber blos OB10 auswählen den Rest nicht liegt es vllt. daran ?


----------



## Toki0604 (31 Dezember 2013)

Erstelle doch einfach mal einen OB10 in deinem Projekt.
Schau dir die Optionen an die du im Hardwaremanager auswählen / einstellen kannst.
In diesem OB10 programmierst du das was du zu deiner gewünschten Uhrzeit ausführen möchtest.
Die F1 Funktion des Simatic Managers wird dir weitere Informationen zur Anwendung von Uhrzeitalarmen liefern können.

Gruß, Toki


----------



## suvaemente (1 Januar 2014)

ich bin grade dabei mir die fc100 und fc110 selbst zu erstellen aber wenn ich den FC6 mit einbinden will zeigt er mir einen Fehler an obwohl ich FC6 wie in der Vorlage erstellt habe woran kann das liegen ?


----------



## 190B (1 Januar 2014)

Hast an der Schnittstellenbeschreibung der FC6 etwas geändert, nach dem Du die FC6 in die FC100 eingebunden hast? Wenn ja, dann mußt den Aufruf aktualisieren.


----------



## suvaemente (1 Januar 2014)

ok habe jetzt alles selber hin bekommen die uhr geht meine Frage ist jetzt nur ich habe das Hauptprogramm im OB1 habe aber noch eine andere Funktion (FC1) diese wurde aber immer über den OB1 eingebunden "Call FC 1" kann ich jetzt im OB1 wo das Hauptprogramm mit der Uhr ist ein neues Netzwerk machen mit "Call FC 1 " oder muss ich ein OB2 erstellen ?


----------



## Blockmove (1 Januar 2014)

Es geht im OB1 weiter


----------

