Step 7 Problem mit Betriebsstundenzähler

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Ihr,

habe da mal einen Betriebsstundenzähler gebastelt; allerdings hat der seinen eigenen Takt ... :confused:

Finde jedoch bei mir den Fehler nicht; könnte da bitte mal jemand drüber schauen?

Code:
      U     "Anlage_Ein"
      U(    
      U     "Clock_1Hz"
      FP    "#fm_clock"
      )     
      SPBN  CLK

      L     DB30.Zwischenergebnis
      L     L#1
      +D    
      T     DB30.Zwischenergebnis
      L     DB30.Zwischenergebnis
      L     L#3600
      /D    
      T     DB30.BetriebsstundenZaehler

CLK:  NOP   0


Lieben Dank!
 
Was meinst Du mit "hat der seinen eigenen Takt"? Wie äußert sich das?

Gibt es vielleicht Überschneidungen mit anderen Merkern? Bzw. Schreibzugriffe auf "#fm_clock" an anderen Programmstellen?

PS: Du solltest in globalen Symbolen kein "#"-Zeichen verwenden.

Harald
 
Zuletzt bearbeitet:
Was meinst Du mit "hat der seinen eigenen Takt"? Wie äußert sich das?

Gibt es vielleicht Überschneidungen mit anderen Merkern? Bzw. Schreibzugriffe auf "#fm_clock" an anderen Programmstellen?

PS: Du solltest in globalen Symbolen kein "#"-Zeichen verwenden.
Harald


Hallo Harald,

der Merker wird nur an dieser einen Stelle verwendet!

Habe den Betriebsstundenzähler z.B. heute um 8:01 genullt und jetzt um 11:09 zeigt er noch immer zwei Sunden am Display an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Spirit,

prinzipiell scheint es doch zu funktionieren. Woher nimmst du den Taktmerker?

Das Zwischenergebnis solltest du beim Übertrag zurücksetzen. Ansonsten könnte es in 68 Jahren zu Problemen kommen :ROFLMAO: .
 
Hallo Spirit,

prinzipiell scheint es doch zu funktionieren. Woher nimmst du den Taktmerker?

Das Zwischenergebnis solltest du beim Übertrag zurücksetzen. Ansonsten könnte es in 68 Jahren zu Problemen kommen :ROFLMAO: .

Danke Onkel Dagobert,

das ist ein Taktmerker der CPU.

An welcher Stelle sollte ich das Zwischenergebnis rücksetzen?
 
Dann sieh doch mal im DB30 nach, da steht der Wert ja in Sekunden.
Da kannst du sehen, ob es eine Differenz zur tatsächlich abgelaufenen Zeit gibt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann sieh doch mal im DB30 nach, da steht der Wert ja in Sekunden.
Da kannst du sehen, ob es eine Differenz zur tatsächlich abgelaufenen Zeit gibt.

Danke Ralle,

ja eine Differenz ist schon zu sehen.

Er hat mittlerweile auch auf 3 Stunden umgeschaltet; nur halt nicht zu der Zeit, als es eigentlich hätte sein sollen ...

Unbenannt.JPG
 
Also ich würde es mit addieren bis >= 3600 versuchen.
Dann die Stunden um 1 erhöhen und das Zählwort auf Null setzen
Denn logisch sehe ich an deinem Code keinen Fehler, doch was machst du wenn dein Zählwort den Max Wert von DINT überschreitet?

Hast du hier schon einmal nach Betriebsstundenzähler gesucht?
Es gab mal einen sehr schönen in SCL geschrieben den ich gut fand.(Wenn ich mich nicht irre)


bike
 
@Spirit:
Wenn du das selbst erstellen möchtest ... wie wäre dann folgender Ansatz :
- du liesst dir mir der Einschaltflanke die Systemzeit ein
- für eine aktuelle Anzeige bildest du eine Differenz von Save zu Akt.
- mit der Ausschaltflanke stoppst du das Ganze.
- willst du nun wieder Einschalten und weiter erfassen dann mußt du dann den letzten Endwert speichern und immer mit aufaddieren ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe den Betriebsstundenzähler z.B. heute um 8:01 genullt und jetzt um 11:09 zeigt er noch immer zwei Sunden am Display an.
Was für eine Anzeige hattest Du erwartet?

Bei Ganzzahl-Division kommt "natürlich" nur ein ganzzahliges Ergebnis 'raus, bei "DB30.Zwischenergebnis" von 7200 bis 10799 Sekunden wird "2 Stunden" angezeigt, was erst beim Stand 10800 Sekunden auf "3 Stunden" geht. Willst Du schon vorher eine Änderung des Betriebszeit-Zählers sehen, dann mußt Du Dir Nachkommastellen schaffen.


Tip: Du könntest schon alle 36 Sekunden den Übertrag vom Sekunden-Vorzähler in den Stundenzähler ("Centi-Stunden"-Zähler) machen und die Betriebsstunden dann mit zwei Nachkommastellen anzeigen: "123,45 h" (bei der Anzeige einfach 2 Stellen von hinten ein Dezimalkomma in die Ganzzahl einfügen). Ein "Centi-Stunden"-Zähler als DINT reicht ca. 4902 Jahre.

Ich mache meine Betriebsstundenzähler auch mit "Centi-Stunden"-Zählern, allerdings addiere ich die Millisekunden von OB1_PREV_CYCLE als Vorzähler.

Harald
 
Hi Ihr,

lieben Dank für eure Unterstützung!


Habe jetzt mal einen Betriebsstundenzähler nach Anleitung

Printing _Beispiel zu SFC 2 (SET_RTM) _ SFC 3 (CTRL_RTM) _ SFC 4 (READ_RTM) - AWL-Quelle_.pdf

gebastelt und auf meine Belange angepasst:

Dazu noch zwei Fragen:

1) CV (Anzeige des aktuellen Zählerstandes) ist hier ja als Word angegeben. Bei Zählerstand 32767 wird der Betriebsstundenzähler ja stehenbleiben und eine Fehlermeldung ausgeben. Gibt es eine Möglichkeit, dass der Zähler unbegrenzt zählt?

2) Im OB1 ist definiert: VAR_TEMP --> SYSTEM: ARRAY[1..20] OF BYTE

Für was ist dieser Eintrag notwendig?


Danke ...
 
Zuletzt bearbeitet:
Ein unbegrenzter Zähler würde aus meiner Sicht unendlich viel Speicher benötigen, sprich geht nicht. Du kannst aber anstelle eines Word ein Doubleword nehmen und damit auf über 2 Milliarden zählen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
2) Im OB1 ist definiert: VAR_TEMP --> SYSTEM: ARRAY[1..20] OF BYTE

Für was ist dieser Eintrag notwendig?
Da hat sich jemand die "Mühe" gespart, die OB1-Lokaldaten detailliert zu deklarieren. (OB1_EV_CLASS .. OB1_DATE_TIME).

Harald
 
Ein unbegrenzter Zähler würde aus meiner Sicht unendlich viel Speicher benötigen, sprich geht nicht. Du kannst aber anstelle eines Word ein Doubleword nehmen und damit auf über 2 Milliarden zählen.

Danke manseluk,

wie wird denn so ein Betriebsstundenzähler im Allgemeinen in der Praxis gehandelt? Sagt ihr zum Kunden, nach Ablauf von 32767 Stunden muss dieser genullt werden, weil er ansonsten nicht weiterläuft? :confused:

Ok, man könnte ihn natürlich auch dazu verwenden, um nach x Stunden ein Serviceintervall durchzuführen und den Zähler in diesem Zuge nullen.
 
wie wird denn so ein Betriebsstundenzähler im Allgemeinen in der Praxis gehandelt? Sagt ihr zum Kunden, nach Ablauf von 32767 Stunden muss dieser genullt werden, weil er ansonsten nicht weiterläuft? :confused:
Nö, das verschweige ich... :p

Also ich würde es mit addieren bis >= 3600 versuchen.
Dann die Stunden um 1 erhöhen und das Zählwort auf Null setzen
Ich halte es eigentlich so wie bike es schon vorgeschlagen hat. Der Betriebsstundenzähler ist dann ebenfalls ein DINT.
Der Zähler(und andere) ist dann im Motor-FB und im Motor-Datensatz mit drin.

Grundsätzlich ist dein Ansatz ja nicht falsch, nur kommst du mit dem INT nicht weit. Mit nem DINT, wie schon vorgeschlagen, ginge das auch.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Sodale, habe jetzt noch mal einen BTZ entworfen, der mir die Sekunden, Minuten und Stunden hochzählt. Die Stunden werden im DINT-Format angezeigt - denke, das sollte ja fürs Erste reichen.

Denn: Das mit dem "Centi-Stunden"-Zähler habe ich ehrlich gesagt noch nicht so gerafft! ;)

Danke euch für die super Hilfe!
 
Zurück
Oben