TIA Probleme mit TON

LegacyCoder

Level-2
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin etwas ratlos und verwundert mit dem Verhalten eines Stücks Code von mir. Ich überwache an einer Maschine verschiedene Bewegungen mit einer Einschaltverzögerung TON_Time. Ist diese abgelaufen soll ein Fehlerbit gesetzt werden, welches danach über einen Reset zurückgesetzt wird.

Der Timer läuft ab und setzt auch den Ausgang Q. Dies habe ich in dem angehangenen Trace auch mehrfach kontrolliert. Nur komischerweise setzt der Code mir das Fehlerbit nicht. Der Code ist eigentlich relativ simple und der Teil als Screenshot angehangen.

Ich habe schon kontrolliert, ob der Reset gleichzeitig kommt. (obwohl das durch die IF-ELSIF eigentlich egal sein sollte) Macht er nicht.

Der Baustein wird in einem Cyclic Interrupt OB mit eingestelltem 10ms Weckalarm abgearbeitet. Aus dem Trace geht hervor, dass der Ausgang Q der TON auch mindestens einen Zyklus ansteht. Also sollte auch in die IF gesprungen werden.

Auch wird das Fehlerbit nur an diesen zwei Stellen (setzten im IF zweig, zurücksetzten im ELSIF Zweig) geschrieben. Es wird auch nicht von außerhalb mit direkten Zugriff auf die Instanz beschrieben.

Wie gesagt bin ich etwas ratlos und für jede Idee dankbar.

Danke und Grüße

Trace.pngCode.png
 
Hier die Deklaration der Variablen.

FaultPositionNotReached ist als Output definiert und ich glaube das macht mir auch das Problem, wenn ich nicht falsch liege.Variable.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kann grade nicht sagen, ob ein Output seinen Zustand aus dem letzten Zyklus speichert.
Allgemein ist es auch etwas unsauber, Ausgänge mehrfach zu beschreiben, selbst wenn es bedingt ist.
Mein Tipp: statische oder temporäre Variable definieren und diese dann am Baustein-Ende an den Output übergeben.

Achja, und solange dein Timer True ist, kann der Ausgang nicht zurückgesetzt werden. Weiß nicht, ob das beabsichtigt ist. Aber wenn #TON_PositionNotReached.Q true ist, wird nicht abgefragt, ob ein Reset-Impuls kommt.
 
Dieses Verhalten ist bei den IEC Zeiten bei den 1200er und 1500er Steuerungen dokumentiert.
Die Zeit Bausteine Laufen azyklisch zu deinem OB damit kann der Instanz zugriff in deinem Zyklus zu verschiedene Ergebnissen kommen.
Wie bereits beschrieben verschalte den Ausgang deines Timers mit einer Variable und nutze nur diese im Programm.
Hatte genau das selbe Problem bei einem Steuerungstausch von einer 314 zu einer 1500er auch schon mal.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe mal die verschiedenen Lösungsvorschläge ausprobiert.

@UDP : Das habe ich nicht mehr versucht. Aber ich denke das soll bisschen in die Richtung von BastiM. seiner Lösung gehen bezüglich der Asynchronität. Der Timer wird auch nicht bedingt aufgerufen, dafür hab ich den Screenshot aber auch vllt. zu kurz abgeschnitten.

@Matze001, @Januar : Danke für den Tipp mit der Deklaration. Hat aber anscheinend nix mit dem Problem zu tun. Ich werde dennoch die Variable als static definieren und dem Ausgang zuweisen. Dann habe ich auch in jedem Zyklus eine Zuweisung. Trotzdem wäre es interessant zu wissen, ob der Ausgang wenn er in einem Zyklus nicht beschrieben wird seinen Zustand beibehält. Falls es jemand weiß 😉

@BastiM. : Das war wirklich das Problem. Der Ausgang Q der TON wurde asynchron zum Aufruf im FB beschrieben. Das wusste ich nicht, dass das überhaupt möglich ist. Danke für den Hinweis. Wieder mal was dazu gelernt. 👍

Danke an alle.
 
Zurück
Oben