TIA Zählwert bei CTU (IEC Counter) zurück setzen in einem HW-Interrupt Baustein

AndyD

Level-1
Beiträge
87
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich habe ne Steuerung im Einsatz, die keine Zählerbaugruppe besitzt. Jetzt habe ich mir wie folgt beholfen:
HW-Interrupt OB erstellt
CTU (IEC-Counter) eingefügt
den Digitaleingang in der Gerätesicht auf eine Verzögerung von 0,05ms Sekunden gesetzt und bei steigender wie auch fallender Flanke den HW-Interrupt OB angewählt.

Die Impulse die ich bekomme werden erfasst. Funktioniert so weit also.
Jetzt frage ich mich nur, wie ich den Zählwert des IEC-Counters wieder auf 0 setzen kann. Wenn kein Impuls kommt wird der HW-Interrupt ja nicht ausgeführt. Aber genau wenn eine gewisse Anzahl an Impulsen durch ist beende ich Befüllprozess.
Allerdings muss bevor ein weiterer Befüllprozess gestartet wird genau dieser Zählwert wieder auf "0" zurück gesetzt werden.

Hat da jemand eine Idee?

Grüße

AndyD
 
Hmmm...

Variante 1:
Da du den CTU ja in nem Interrupt-OB verwendest existiert die Counter-Instanz normalerweise als separater DB.
Du könntest jetzt an anderer Stelle im Programm (gezielt einmalig über Enable-Eingang) einen weiteren CTU aufrufen der am Reset-Eingang 1 hat und den selben Instanz-DB verwendet.

Variante 2:
Du rufst deinen Interrupt nur bei Positiver-Flanke auf und addierst dir einfach einen DINT auf. Den DINT kannst du dann überall und zu jeder Zeit auf Null setzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi.
Danke für die schnelle Antwort.
Werde Variante 1 mal ausprobieren.
Variante 2 hab ich so ähnlich versucht. Ich lass in nem globalen DB einen INT Wert hochlaufen. Den hab ich dann einmalig zwischen den Prozessen mit 0 beschrieben. Als dann der zweite Prozess gestartet ist, hat er aber dennoch nicht bei 0 angefangen sonern beim Endwert des ersten Prozesses obwohl vor dem zweiten Prozess laut Beobachtungstabelle und Online Ansicht des DB 0 zu sehen war.
Wie gesagt, ich probier morgen mal Variante 1.

Grüße

AndyD
 
Variante 2 so ähnlich heißt was?

Im Interrupt steht:
L DB10.DBW0
L 1
+I
T DB10.DBW0

Wo sollte da jetzt also ein "alter" Wert herkommen?
 
Hi.
Da hab ich mich unglücklich ausgedrückt.
Ich habe einen CTU Timer genommen und auf den CV den Eingang 0.0 geschrieben und als Out db1.dbw0 verwendet als INT.
Den db1.dbw0 hab ich im zyklischen programm mit einem Ereignis auf null zurück gesetzt. Der Zähler nimmt aber scheinbar dann einen Wert aus seinem Instanz DB und reicht diesen wieder auf den Wert des Global DB.
Der Zähler hat einen R Eingang worüber man den Wert im Instanz DB zurück setzt. Allerdings kann ich den im HW-Interrupt nicht benutzen.

Aber anstatt dem Zähler einfach in AWL hoch zählen wäre auch ein Versuch wert.
Manchmal sieht man echt den Wald vor lauter Bäumen nicht.
Thx für den Denkanstoß.

Grüße

AndyD
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe einen CTU Timer genommen und auf den CV den Eingang 0.0 geschrieben und als Out db1.dbw0 verwendet als INT.
Den db1.dbw0 hab ich im zyklischen programm mit einem Ereignis auf null zurück gesetzt. Der Zähler nimmt aber scheinbar dann einen Wert aus seinem Instanz DB und reicht diesen wieder auf den Wert des Global DB.
Genau so ist es.
Der Zähler hat einen R Eingang worüber man den Wert im Instanz DB zurück setzt. Allerdings kann ich den im HW-Interrupt nicht benutzen.
Deswegen mein Vorschlag mit dem Aufruf der selben Instanz an einem anderen Ort.
Damit kannst du den R-Eingang auch anderswo verwenden.
Man kann den Zählwert vermutlich auch in der CTU-Instanz löschen, dafür kenn ich das Ding, jetzt ad hoc, nicht genau genug.
Aber anstatt dem Zähler einfach in AWL hoch zählen wäre auch ein Versuch wert.
Manchmal sieht man echt den Wald vor lauter Bäumen nicht.
Jep, weiß bis heute noch nicht wofür man den CTU braucht. :)
 
Zuletzt bearbeitet:
Zurück
Oben