TIA GRAPH - speichernde Aktion wird nicht ausgeführt

HannesStr

Level-1
Beiträge
8
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin neu hier im Forum und hoffe ihr könnt mir bei einem Problem mit der Programmiersprache GRAPH im TIA-Portal weiterhelfen.
Folgende Situation:
Im Schritt 2 soll ein Leuchtmelder blinken.
Im Schritt 3 soll der Leuchtmelder dann speichernd auf 1 gesetzt werden.
Mein Problem liegt darin, dass bei Aktivierung von Schritt 3 der Leuchtmelder nicht auf 1 gesetzt wird, siehe Bild 1.
Wenn ich allerdings einen Leerschritt einfüge, siehe Bild 2, dann funktioniert das Setzen.
Kann mir vielleicht von Euch jemand erklären an was das liegt?
Liebe Grüße, Johannes
 

Anhänge

  • Bild 1.PNG
    Bild 1.PNG
    45,9 KB · Aufrufe: 66
  • Bild 2.PNG
    Bild 2.PNG
    49 KB · Aufrufe: 65
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

eine ganz logische Erklärung habe ich auch nicht, mich hat das jetzt interessiert und ich habe ein bisschen getestet.
Also wenn man in deinem Beispiel in Schritt 2 das Ereignis S1 weglässt funktioniert es wie erwartet. Alternativ habe ich probiert kann man auch die Anweisung in Schritt 1 ändern, (ich vermute an dem Interlock ist ein Taktmerker verschaltet) man kann die Anweisung auch so schreiben: Kein Interlock, Kennung N #leuchtmelder := #taktmerker diese Variante funktioniert bei mir auch.

Wobei ich die erste Möglichkeit bevorzugen würde.
Ich hätte jetzt vermutet das es mit der Kennung N zusammenhängt. Er weißt der Variable #leuchtmelder den Wert TRUE zu während der Schritt aktiv ist (wenn der Interlock erfüllt ist), wird die Trans_1 TRUE schreibt er die Variable #Leuchtmelder auf FALSE was eig. wieder durch den S in S1 (kommender Schritt) Schritt 2 überschrieben werden sollte.. Ist aber ja scheinbar nicht so. Vermutlich wird im Hintergrund das Ereignis kommender Schritt ausgeführt bevor der N von Schritt 1 zurückgenommen wird.
Die Variante mit der direkten Zuweisung #leuchtmelder := #taktmerker funktioniert dann weil hier der Compiler nicht explizit FALSE beim Verlassen von Schritt 1 schreiben muss.
Ist aber nur eine Vermutung, so würde ich mir das herleiten..
 
Warum setzt (und rücksetzt) du zusätzliche (unnötige) Variablen?
1704350667758.png

Wenn du wissen willst, ob ein bestimmter Schritt aktiv ist, kannst du eine Standardvariable des Schrittes abfragen (.x).
Im Ablauf FB:
1704350881525.png

Außerhalb des Ablauf FB:
1704351016674.png
 
Schritte brauchst du nicht setzen oder zurücksetzen, im Instanz DB des Graphen wird für jeden Schritt eine UDT angelegt in der alle Informationen stehen für Schritt und Transition vorhanden sind.

Für Schritte ohne wirkliche Transition reicht es aus wenn du im Graph eine Variable "Leerschritt" erstellst, die kannst du dann immer dort verwenden wo du keine richtigen Aktionen und Transitionen hast, das musst du nicht für jeden Schritt einzeln anlegen.

Taktmerker kannst du in der Hardwarekonfiguration deiner CPU aktivieren (Systemmerkerbyte), dann musst du dir keine basteln.

Eventuell hat das Verhalten auch damit zu tun, dass du deine #Step Variable als Transition geschalten hast und auch als erstes setzt und damit eventuell die restliche Aktionen nicht sauber abgearbeitet werden können vor der Weiterschaltung.

Screenshot 2024-01-04 093133.png

Ich hab noch in Schritt zwei als Transition hinzugefügt, dass der Leuchtmelder 5s Sekunden blinken soll, bevor eine Weiterschaltung geschieht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
Eigendlich muss das so funktionieren, aber TIA macht da mal wieder Murks.

Soll beim Verlassen des Schrittes die Lampe bereits angehen, so geht auch ein S0 S Leuchtmelder.
Kann sein das dies noch geht...

TIA verhaspelt mal wieder die Reihenfolge beim Schrittwechsel. Es gibt halt keine Fachkräfte mehr:eek:

Edit: Welche Version? Rein Interesse halber?
 
Hallo,

eine ganz logische Erklärung habe ich auch nicht, mich hat das jetzt interessiert und ich habe ein bisschen getestet.
Also wenn man in deinem Beispiel in Schritt 2 das Ereignis S1 weglässt funktioniert es wie erwartet. Alternativ habe ich probiert kann man auch die Anweisung in Schritt 1 ändern, (ich vermute an dem Interlock ist ein Taktmerker verschaltet) man kann die Anweisung auch so schreiben: Kein Interlock, Kennung N #leuchtmelder := #taktmerker diese Variante funktioniert bei mir auch.

Wobei ich die erste Möglichkeit bevorzugen würde.
Ich hätte jetzt vermutet das es mit der Kennung N zusammenhängt. Er weißt der Variable #leuchtmelder den Wert TRUE zu während der Schritt aktiv ist (wenn der Interlock erfüllt ist), wird die Trans_1 TRUE schreibt er die Variable #Leuchtmelder auf FALSE was eig. wieder durch den S in S1 (kommender Schritt) Schritt 2 überschrieben werden sollte.. Ist aber ja scheinbar nicht so. Vermutlich wird im Hintergrund das Ereignis kommender Schritt ausgeführt bevor der N von Schritt 1 zurückgenommen wird.
Die Variante mit der direkten Zuweisung #leuchtmelder := #taktmerker funktioniert dann weil hier der Compiler nicht explizit FALSE beim Verlassen von Schritt 1 schreiben muss.
Ist aber nur eine Vermutung, so würde ich mir das herleiten..
Hallo,
danke für deine Lösungsvorschläge und dein ausführliche Erklärung. Mir persönlich gefällt die zweite Variante besser. Bei der ersten Variante wird ja der Setzvorgang bei jedem Zyklus neu ausgeführt und nicht nur einmalig bei der Schrittaktivierung. Ob das irgendwelche negativen Auswirkungen haben kann, weiß ich allerdings auch nicht.
 
Warum setzt (und rücksetzt) du zusätzliche (unnötige) Variablen?
Anhang anzeigen 74040

Wenn du wissen willst, ob ein bestimmter Schritt aktiv ist, kannst du eine Standardvariable des Schrittes abfragen (.x).
Im Ablauf FB:
Anhang anzeigen 74041

Außerhalb des Ablauf FB:
Anhang anzeigen 74042
Hallo, diese zusätzlichen Variablen haben mit meiner Problemstellung nichts zu tun. Die Variablenbezeichnung, z.B. #step_3, ist wohl etwas unglücklich gewählt. Ich wollte damit nicht testen, ob ein Schritt aktiv ist oder nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schritte brauchst du nicht setzen oder zurücksetzen, im Instanz DB des Graphen wird für jeden Schritt eine UDT angelegt in der alle Informationen stehen für Schritt und Transition vorhanden sind.

Für Schritte ohne wirkliche Transition reicht es aus wenn du im Graph eine Variable "Leerschritt" erstellst, die kannst du dann immer dort verwenden wo du keine richtigen Aktionen und Transitionen hast, das musst du nicht für jeden Schritt einzeln anlegen.

Taktmerker kannst du in der Hardwarekonfiguration deiner CPU aktivieren (Systemmerkerbyte), dann musst du dir keine basteln.

Eventuell hat das Verhalten auch damit zu tun, dass du deine #Step Variable als Transition geschalten hast und auch als erstes setzt und damit eventuell die restliche Aktionen nicht sauber abgearbeitet werden können vor der Weiterschaltung.

Anhang anzeigen 74048

Ich hab noch in Schritt zwei als Transition hinzugefügt, dass der Leuchtmelder 5s Sekunden blinken soll, bevor eine Weiterschaltung geschieht.
Hallo, dein Antwort verstehe ich ehrlich gesagt nicht.
Was meinst du damit, dass man Schritte nicht setzen bzw. Rücksetzen muss? Eventuell irritiert mit meine Variablenbezeichnung, #step_1,
#step_2 usw. Ich hätte auch genauso gut #out_1, #out_2 usw. verwenden können.
Das mit dem Leerschritt wäre als Alternative zu meinem Leerschritt mit anschließender "true"-Transistion, wie im Bild 2 dargestellt, gedacht, oder?
Das mit der #Step-Variable als Transition sehe ich nicht. Ich habe doch immer eine Variable Namens "#trans" als Weiterschaltbedingung verwendet?
 
Hi,
Eigendlich muss das so funktionieren, aber TIA macht da mal wieder Murks.

Soll beim Verlassen des Schrittes die Lampe bereits angehen, so geht auch ein S0 S Leuchtmelder.
Kann sein das dies noch geht...

TIA verhaspelt mal wieder die Reihenfolge beim Schrittwechsel. Es gibt halt keine Fachkräfte mehr:eek:

Edit: Welche Version? Rein Interesse halber?
Hallo,
die Variante mit S0 beim Verlassen von Schritt 2 habe ich auch ausprobiert, ohne Erfolg.
Ich verwende die V17.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, dein Antwort verstehe ich ehrlich gesagt nicht.
Was meinst du damit, dass man Schritte nicht setzen bzw. Rücksetzen muss? Eventuell irritiert mit meine Variablenbezeichnung, #step_1,
#step_2 usw. Ich hätte auch genauso gut #out_1, #out_2 usw. verwenden können.
Das mit dem Leerschritt wäre als Alternative zu meinem Leerschritt mit anschließender "true"-Transistion, wie im Bild 2 dargestellt, gedacht, oder?
Das mit der #Step-Variable als Transition sehe ich nicht. Ich habe doch immer eine Variable Namens "#trans" als Weiterschaltbedingung verwendet?
Dan gib deinen Variablen doch bitte sinnhaftige Bezeichner, sodass man sie nicht verwechseln kann, Stichwort Eindeutigkeit.

Hast du denn die hier vorgeschlagenen Varianten mal allesamt ausprobiert?
 
Ja hab die Vorschläge ausprobiert. Zwei Varianten funktionieren:
- Blinken mit Interlock und speichernde Aktion ohne Ereignis S1
- Blinken ohne Interlock, dafür mit der Zuweisung #leuchtmelder := #takt und speichernde Aktion mit S1
 
Zurück
Oben