# Betriebsstundenzähler / Wartungsintervalle



## PättPit (25 Mai 2010)

Hallo, werte Forengemeinde.

Da dies mein erster Beitrag ist, möchte ich ihn gleich nutzen, um mich schnell vorzustellen 

Ich bin 29 Jahre alt, mache gerade meinen Lehrgang zum "SPS-Techniker" und komme aus NRW....


Hier setzt auch gleich schon mein Problemchen ein :-?

Mit Hilfe der Suchfunktion habe ich leider nichts passendes gefunden oder konnte es nicht als passend deuten. Man möge mir bitte verzeihen.

Aber los gehts...


Meine Aufgabe ist es, mit Hilfe von Betriebsstundenzählern Wartungsintervalle zu realisieren, die hinterher via OP3 ausgegeben werden sollen.

Z.B. soll alle 200 Betriebsstunden ein Wartungsintervall für einen Ölwechsel ausgegeben werden.

Leider schaffe ich es derzeit nicht, meine geistige Barrikade zu überwinden.

Bzgl. des Betriebsstundenzählers bin ich lediglich soweit, daß die SFC 2,3 und 4 im Raume stehen. 
Von einer evtl. Vorabkonfiguration habe ich keinen Schimmer 

Was die Realisierung der Wartungsintervalle angeht, steht für mich bisher nur der Begriff Ganzzahldivision im Raum.

Ich hoffe, ich konnte einigermaßen verständlich mein Anliegen schildern und es erbarmt sich jemand, mir einen Wink mit der Eisenbahnschwelle zu geben 

In Kurzform:

-> Wie bereite ich einen Betriebsstundenzähler vor?
-> Wie nutze ich ihn, um Wartungsintervalle zu realisieren?


Vielen Dank schonmal im Voraus...

Beste Grüße,

PättPit


----------



## Paule (25 Mai 2010)

PättPit schrieb:


> Ich bin 29 Jahre alt, mache gerade meinen Lehrgang zum "SPS-Techniker" und komme aus NRW....


Hallo Pit,
wie gut sind denn Deine Vorkenntnisse?
Wenn Dir hier jemand was in AWL runtertippen würde, würdest Du damit klar kommen?


----------



## Lipperlandstern (25 Mai 2010)

Ich würde den Betriebstundenzähler nicht mit den SFC-Bausteinen machen sondern mir einen Sekundentakt in ein DW (Doppelwort) hochzählen.

200 Stunden sind dann eben 720000 Sekunden. Nach der Wartung kannst du den Zähler dann ja auf 0 setzen oder weiterlaufen lassen. 

Wenn ich es richtig im Kopf habe kannst du auf diese Weise bis zu 136 Jahre zählen..... ich hoffe das reicht dir *ROFL*


----------



## PättPit (25 Mai 2010)

Hallo Paule,

vielen Dank schonmal für Deine Antwort 

Also, realistisch eingeschätzt würde ich mich als blutigen Anfänger betrachten. Ich bin nun den dritten Monat dabei.

Je einfacher es also darstellbar gemacht werden könnte, desto besser 

Auch, wenn wohl jetzt die Tomaten fliegen - ein Beispiel in FUP wäre für mich evtl. recht hilfreich. 


Beste Grüße,

PättPit


----------



## Paule (25 Mai 2010)

PättPit schrieb:


> Auch, wenn wohl jetzt die Tomaten fliegen - ein Beispiel in FUP wäre für mich evtl. recht hilfreich.


Ne, das mit den Tomaten wird wohl nicht passieren, wie sehen denn sonst die Bildschirme aus? 
Ich fand Deinen ersten Auftritt hier voll in Ordnung. 
Leider ist FUP nicht so meine Welt und darum ziehe ich mich hier zurück.
Aber wenn ich Dir sonst mal helfen kann, gerne.


----------



## Woldo (25 Mai 2010)

In FUP könnte es so ausschauen


----------



## PN/DP (25 Mai 2010)

PättPit schrieb:


> -> Wie bereite ich einen Betriebsstundenzähler vor?


Wenn in Deiner Aufgabe nicht zwingend die Verwendung der limitierten CPU-Betriebsstundenzähler vorgeschrieben ist,
dann würde ich mir eigene Betriebstundenzähler programmieren. Das ist sehr leicht.

Ein Betriebstundenzähler zählt die Zeit, wie lange ein Aggregat in Betrieb ist (deshalb heißt der so).
Also immer, wenn das Aggregat in Betrieb ist (der Ansteuer-Ausgang oder ein Rückmelde-Eingang = 1 ist), dann eine 
Zeiteinheit (z.B. Sekunden) zählen. Wenn das Aggregat nicht in Betrieb ist, dann nicht weiterzählen.

Nun für die Anzeige und Verarbeitung der Betriebsstunden die gezählten Sekunden in Stunden umrechnen. Da kommt dann 
die Ganzzahldivision ins Spiel, kann man aber auch umgehen, wenn die Anzeige nur volle Stunden anzeigen muß. 
Dann würde ich einfach in einem INT 3600 Sekunden abzählen und in einem zweiten INT die vollen Stunden. Wenn der 
Sekundenzähler 3600 Sekunden gezählt hat, dann den Sekunden-Zähler auf 0 setzen und den Stunden-Zähler um 1 erhöhen.

Die in Step7 vorhandenen normalen Zähler ZV eignen sich nicht zum Zählen der Betriebsstunden, weil die nur bis 999 
zählen und dann stehenbleiben.



PättPit schrieb:


> -> Wie nutze ich ihn, um Wartungsintervalle zu realisieren?


Indem Du Dir merkst, bei welchem Betriebsstundenzähler-Stand die letzte Wartung war (bzw. die Zählung gestartet wurde).
Nun berechnest Du, wieviele Betriebsstunden seit der letzten Wartung vergangen sind (Betriebsstundenzähler-Stand minus 
gemerkten Zählerstand der letzten Wartung). Wenn diese Stunden-Differenz >= Vorgabe-Wartungsintervall ist, dann läßt 
Du ein Meldebit 1 werden, das auf dem OP die Wartungs-Aufforderung anzeigt. Wenn der Anlagen-Bediener mit dem OP 
quittiert, daß die Wartung durchgeführt wurde, merkst Du Dir den jetzigen Betriebsstundenzähler-Stand als Zählerstand 
der letzten Wartung (die Differenz wird dadurch wieder 0).

Nun einfach das umgangsprachlich beschriebene Vorgehen in ein Programm übersetzen.
In AWL geht das am leichtesten, KOP und FUP sind aber auch möglich.

Gruß
Harald


----------



## PättPit (25 Mai 2010)

Ich danke Euch schonmal für Eure Lösungsansätze. Die werde ich mir direkt morgen mal zur Brust nehmen.
Das geht ja echt rasend schnell :s1:

Morgen (Vor)mittag werde ich nochmal ausführlich berichten.

Jetzt ruft allerdings erstmal die Couch 


@Paule: Dann bin ich ja beruhigt. Danke schonmal für Dein Angebot der Hilfe, wenn es mal nicht um FUP geht 


Einen schönen Abend Euch noch.


Beste Grüße,

PättPit


----------



## PN/DP (25 Mai 2010)

Ach ja, das noch:
Damit die Zählerstände und der gemerkte Zählerstand nicht bei Spannungsausfall oder Ausschalten der Maschine verloren gehen, 
müssen diese remanent sein. Also am einfachsten INT-DBW aus einem Datenbaustein benutzen. Aber keinen Instanz-DB.

Gruß
Harald


----------



## PättPit (26 Mai 2010)

Mahlzeit zusammen 

So, nach einigem Hin und Her bin ich mal wieder etwas schlauer. Mitstreiter und Dozent haben sich mehr oder weniger aussagekräftig geäußert und nun sieht die Welt wieder ein bisschen anders aus.


-> Die CPU ist eine VIPA CPU-114 (114-6BJ02)

-> Es soll IEC-konform projektiert werden.

-> Zählsystem muss die nötige Remanenz aufweisen


Ich hatte nun in Erwägung gezogen, mir den IEC-Baustein SFB0 zur Hilfe zu nehmen. 

Laut Aussage des Dozenten soll die interne Uhr der CPU genutzt werden, um den Zähler zu versorgen.
Wie ist das zu realisieren?

Durch das Quittieren soll das jeweilige Intervall wieder von vorne beginnen (das ist mir soweit klar).


Vielen Dank schonmal an jene, die sich der Problematik bisher angenommen haben:sm24:



Beste Grüße,

PättPit


----------



## PättPit (27 Mai 2010)

So, nach langem Hin und Her habe ich nun endlich eine funktionierende Lösung gefunden.

Bisher ist es mehr oder minder nur "skizziert" aber es tut seinen Dienst 

Zu allem Überfluss hat mein FreePDF noch gestreikt, sodaß ich es mir mit Hilfe von Screenshots zusammenschustern musste aber es hat irgendewie funktioniert 


Beste Grüße,

PättPit


----------



## Buschmann (28 Mai 2010)

Guten Morgen!

Hast du dir mal den Beitrag #6 angesehen? 

Ich bin zwar kein SPS-Gott, aber die Systemzeit für einen Betriebsstundenzähler zu nutzen, halte ich nicht wirklich für sinnvoll... Was passiert denn, wenn jemand die Systemzeit verstellt?? Dann dürften deine Betriebsstunden durcheinander geraten, oder?

Gruß
Buschmann


----------



## PättPit (28 Mai 2010)

Guten Morgen, Buschmann.

Ja, natürlich habe ich ihn mir angesehen. 
Ich persönlich hätte es auch anders/einfacher realisiert. Allein, um mir die Modulodivision zu sparen 
Allerdings war es Vorgabe des Dozenten.

Daß mir dadurch die Betriebsstunden merklich/kritisch durcheinandergeraten, glaube ich nicht, da die ausschlaggebende Größe die laufenden Millisekunden sind.

Beste Grüße,

PättPit


----------



## hucki (28 Mai 2010)

Ich lasse einen Wartungszähler prinzipiell von der Vorgabe auf Null abwärts zählen. Dann kann man den Wert direkt dem Benutzer visualisieren, damit der weiß, in x Betriebstunden ist die Wartung fällig.

@Woldo,
hat das einen Grund, daß der Betriebstundenzähler aus deinem Beitrag 6 erst resettet werden kann/soll, wenn das Wartungsintervall abgelaufen ist? Was ist, wenn Du einen vorbildlichen Benutzer hast (soll's ja vereinzelt geben, hab' ich gehört), der die Wartung schon vor Ablauf des Intervalls durchführt?


----------



## Paule (30 Mai 2010)

hucki schrieb:


> Was ist, wenn Du einen vorbildlichen Benutzer hast (soll's ja vereinzelt geben, hab' ich gehört), der die Wartung schon vor Ablauf des Intervalls durchführt?


Vorzeitige Wartung => unnötige Wartung => unnötige Kosten.
Vorbildlicher Benutzer wird entlassen.

War nur ein Spaß > kann ja schon mal Sinn machen. 



hucki schrieb:


> Ich lasse einen Wartungszähler prinzipiell von der Vorgabe auf Null abwärts zählen. Dann kann man den Wert direkt dem Benutzer visualisieren, damit der weiß, in x Betriebstunden ist die Wartung fällig.


Was ist wenn die Wartung dann zu diesem Zeitpunkt nicht gemacht werden kann?
Läuft der Zähler ins Minus? 
Oder bleibt er bis zum jüngsten Tag auf Null stehen?
Oder wird die Maschine sofort abgestellt?


----------



## hucki (30 Mai 2010)

Paule schrieb:


> Vorzeitige Wartung => unnötige Wartung => unnötige Kosten.
> Vorbildlicher Benutzer wird entlassen.
> 
> War nur ein Spaß > kann ja schon mal Sinn machen.


Macht sogar meistens Sinn:
Unsere Maschinen sind Teil einer Gießzelle. Wenn die gerade steht, weil z.B. eine Form gewechselt wird, kann der Kunde hingehen, wann ist die nächste Wartung fällig - aha, bloß noch ein paar Stunden. Befehl an Inst - los, gleich mit erledigen.
Da wär's definitiv teurer, die Gießzelle noch mal anzuhalten, nur weil 2 oder 3 Stunden später erst das Wartungsintervall abläuft. Wartung nicht zu machen ist auch teurer, weil bei zu starker Verschmutzung nur noch Ausschuß produziert wird. 




Paule schrieb:


> Was ist wenn die Wartung dann zu diesem Zeitpunkt nicht gemacht werden kann?
> Läuft der Zähler ins Minus?
> Oder bleibt er bis zum jüngsten Tag auf Null stehen?
> Oder wird die Maschine sofort abgestellt?


Ja, er bleibt bis zum jüngsten Tag auf Null stehen. Genauso wenn die Wartung zwar gemacht wird, aber keiner den Zähler resettet.
Und solange der Null ist, steht halt zusätzlich auf dem Display, das die Wartung fällig ist.
Denn das ist für mich der Sinn eines Wartungszählers - den Benutzer daran erinnern, wann er die nächste Wartung machen soll(te).
Achso: ansonsten passiert, was bei einem Aufwärtszähler auch passiert - nichts.


----------



## KB78 (31 Mai 2010)

Woldo schrieb:


> In FUP könnte es so ausschauen


 

Ich hätte dazu auch nochmal eine kurze Frage. Wenn ich das so mache wie Woldo beschrieben hat, dann addiert er bei mir nicht 1 mal pro Sekunde, sondern x - mal pro Sekunde. (nehme an dass es abhängig von der Zykluszeit der SPS ist)

Den Sekundentakt nehm ich aus dem Taktmerker der CPU (Bit 5) ...hat vielleicht einer eine Idee warum das nicht geht bei mir oder hab ich vielleicht was falsch eingestellt?


----------



## Gerhard K (31 Mai 2010)

> Den Sekundentakt nehm ich aus dem Taktmerker der CPU (Bit 5) ...hat vielleicht einer eine Idee warum das nicht geht bei mir oder hab ich vielleicht was falsch eingestellt?


 
weil du einen Takt verwendest. du brauchst einen Impuls.

z.BSP.
Taktmerker= 1 sek TRUE 1 sek FALSE => Takt

Impuls


```
U M0.5
FP Mx.x
U ...
```


----------



## marlob (31 Mai 2010)

Woldo schreibt was von #Sekunden*impuls*. Ich hoffe das war Hinweis genug 
Also deinen Sekundentakt mal auf positive Flanke abfragen.


----------



## Paule (31 Mai 2010)

Hallo Gerhard,
Du bringst mich jetzt glatt zum grübeln.
Es geht doch um das Taktmerkerbyte von der CPU


Gerhard K schrieb:


> Taktmerker= 1 sek TRUE 1 sek FALSE => Takt


Das wären ja nur 30 Impulse pro Minute
>> Confused <<


----------



## KB78 (31 Mai 2010)

Alles klar ich habs jetzt ...vielen Dank nochmal. 

Ich glaube ich werde mir jetzt mal angewöhnen mehr in AWL zu programmieren in FUP hat er das nicht richtig angezeigt :grin:

mit der Flankenauswertung hab ich es nämlich schon versucht in FUP *peinlich peinlich*


----------



## Gerhard K (31 Mai 2010)

Paule ich habe geschrieben z.Bsp.

War eigentlich nur zur Erklärung gemeint.Nicht als Sekundenimpuls.

Mir ist schon klar, dass da kein Sekundenimpuls generiert werden kann, sondern nur ein 2sekunden Impuls.

Aber Danke .


----------



## Paule (31 Mai 2010)

Ne Gerhard,
wollte Dich nicht verbessern.
Habe jetzt echt gerade einen Hänger.

Taktmerkerbyte von CPU z.B.: MB 0 dann ist Merker 0.5 Sekundentakt

Wie lange ist der denn High?
1 Sekunde High und 1 Sekunde Low geht ja nicht.
Oder ist er so lange High bis der Merker 0.0 wieder aktualisiert wird, sprich 100 Millisekunden.
Aber wie lange ist dann der Merker 0.0 High?


----------



## KB78 (31 Mai 2010)

Paule schrieb:


> Ne Gerhard,
> wollte Dich nicht verbessern.
> Habe jetzt echt gerade einen Hänger.
> 
> ...


 


Bit 5 entspricht 1Hz ..d.h. 0,5sec high und 0,5sec low also eine Periodenzeit von 1sec


----------



## Gerhard K (31 Mai 2010)

Der Taktmerker 0.5 ist 0.5 s  True und 0.5 s False


----------



## Gerhard K (31 Mai 2010)

KB78 war schneller


----------



## KB78 (31 Mai 2010)

Gerhard K schrieb:


> KB78 war schneller


 

ne sekunde vielleicht nur... 

dafür hab ich aber auch nen Bild drin ^^


----------



## Paule (31 Mai 2010)

KB78 schrieb:


> Bit 5 entspricht 1Hz ..d.h. 0,5sec high und 0,5sec low also eine Periodenzeit von 1sec


Oh je, natürlich!
*ROFL*


----------

