-> Hier kostenlos registrieren
Ich bin noch ziemlich unerfahren mit Step7. (Schaffe seit zwei Wochen damit). Im moment bastle ich mir ein Grundkonzept für die wichtigsten Funktionen.
Zu diesen Funktionen gehören u.a. Ereignis- und Betriebsstundenzähler.
Insbesondere die Ereigniszähler bereiten mir ein Problem, dass sich aber bei den Betriebsstundenzähler vermutlich in ählicher Form zeigen wird.
Die Ereigniszähler sollen einen Wertebereich von 0 bis 9.999.999 bekommen.
Nun hatte ich mir vorgestellt, den SFB0 "CTU" zu verwenden, der (das weiß ich schon) nur mit INT als Zählwert umgehen kann, allo bei 32.768 schlappmacht.
Also wollte ich den SFB0 in einem FB in zwei Instanzen laufen lassen.
Der erste Zähler bekommt einen Rücksetzimpuls über Q bei PV>=10000
Gleichzeitig ist dieser Impuls (INST_1.q) Zählimpuls für den zweiten Zählerblock, der dann bis 1000 zählt.
Das Hauptproblem besteht jetzt in der Umwandlung der Zahlenformate.
Der Zählwert soll als DINT an das PLS übermittelt werden.
Gleichzeitig liegt der Rückstellwert des Gesamtzählers als DINT vom PLS vor. Wenn ich nun diesen DINT-Wert in ein BCD-DWORD (DTB) umwandle,
diesen Wortweise nach an die Zähler weitergebe (nach Umwandlung per BTI) fehlt mir eine Dezimalstelle. Das gleiche passiert bei der Umwandlung des Gesamtzähltwertes aus niederwertigem Zähler per ITB und höherwertigem Zähler per ITB, dann Umwandlung des entstehenden DWORD per BTD.
HAt jemand eine Idee oder weiss, wie das einfacher geht?
Zu diesen Funktionen gehören u.a. Ereignis- und Betriebsstundenzähler.
Insbesondere die Ereigniszähler bereiten mir ein Problem, dass sich aber bei den Betriebsstundenzähler vermutlich in ählicher Form zeigen wird.
Die Ereigniszähler sollen einen Wertebereich von 0 bis 9.999.999 bekommen.
Nun hatte ich mir vorgestellt, den SFB0 "CTU" zu verwenden, der (das weiß ich schon) nur mit INT als Zählwert umgehen kann, allo bei 32.768 schlappmacht.
Also wollte ich den SFB0 in einem FB in zwei Instanzen laufen lassen.
Der erste Zähler bekommt einen Rücksetzimpuls über Q bei PV>=10000
Gleichzeitig ist dieser Impuls (INST_1.q) Zählimpuls für den zweiten Zählerblock, der dann bis 1000 zählt.
Das Hauptproblem besteht jetzt in der Umwandlung der Zahlenformate.
Der Zählwert soll als DINT an das PLS übermittelt werden.
Gleichzeitig liegt der Rückstellwert des Gesamtzählers als DINT vom PLS vor. Wenn ich nun diesen DINT-Wert in ein BCD-DWORD (DTB) umwandle,
diesen Wortweise nach an die Zähler weitergebe (nach Umwandlung per BTI) fehlt mir eine Dezimalstelle. Das gleiche passiert bei der Umwandlung des Gesamtzähltwertes aus niederwertigem Zähler per ITB und höherwertigem Zähler per ITB, dann Umwandlung des entstehenden DWORD per BTD.
HAt jemand eine Idee oder weiss, wie das einfacher geht?