TIA Graph Parrallelschrittnummern lesen

meikelneit

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

ich stehe aktuell vor dem Problem, im TIA Portal (S7-1500, GRAPH) alle aktiven Schrittnummern einer Schrittkette in einem SPS-Zyklus auszulesen. In meinem Anwendungsfall kann es durch parallele oder alternative Abläufe vorkommen, dass mehrere Schritte gleichzeitig aktiv sind, und ich benötige alle aktiven Schrittnummern, nicht nur den "aktuell aktiven Schritt" (DB_Step_Active o. Ä.).

Meine Frage an die Runde:Wie löst ihr das in der Praxis? Gibt es eine saubere Möglichkeit, z. B. über die Instanzdaten des GRAPH-Bausteins, gezielt die Schrittnummern der gesetzten Schritte (z. B. in EXEC_BITS) zu ermitteln?

Ich habe gesehen, dass das Bitfeld EXEC_BITS im Instanz-DB die aktiven Schritte abbildet, allerdings habe ich bisher keine direkte Zuordnung gefunden, mit der ich sagen kann: Bit 3 entspricht Schrittnummer X.

Daher zwei Fragen:

  1. Wie liest ihr im SPS-Zyklus alle gleichzeitig aktiven Schritte (Schrittnummern) einer GRAPH-Schrittkette aus?
  2. Gibt es eine dokumentierte oder praktikable Zuordnung von Bitpositionen in EXEC_BITS zu den tatsächlichen Schrittnummern?

Bin gespannt, wie ihr das angeht – vielleicht kennt jemand sogar eine Möglichkeit, das Mapping programmatisch aufzubauen oder über symbolische Informationen heranzukommen.


Vielen Dank vorab!
Viele Grüße
 
  1. Wie liest ihr im SPS-Zyklus alle gleichzeitig aktiven Schritte (Schrittnummern) einer GRAPH-Schrittkette aus?
  2. Gibt es eine dokumentierte oder praktikable Zuordnung von Bitpositionen in EXEC_BITS zu den tatsächlichen Schrittnummern?
1. noch nie gemacht.. mir ist in meinem Umfeld keine Praxis bekannt wo es notwendig wäre das zu tun
2.


Deswegen noch mal die allgemeine Frage:

Was soll durch das auslesen der aktiven Schritte erreicht werden? Wieso ist das notwendig? Vielleicht gibts ja andere Lösungen..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir haben das mal machen und visualisieren müssen für einen Automobilisten. Der hat dann einen Ausdruck der Kette bekommen und konnte so seinen Fehler suchen, wenn was hing.

Wir haben dazu in jedem Schritt eine Variable beschrieben mit der zum Schritt gehörigen S_NO (siehe Struktur). Gibt es Parallelverschaltungen, dann gibt es entsprechend mehr Variablen. In parallelen Schritten werden verschiedene Schrittnummern angezeigt, ansonsten immer die gleichen. Gleiches gilt für weitere Ketten im gleichen Baustein. Wenn du Schritte kopierst und wieder einfügst brauchst du nicht mal etwas tippen, weil die Umbenennung in den Aktionen automatisch erfolgt.
 
@EliteGurke: Vielleicht kannst du noch etwas genauer darauf eingehen.?!

Ich kenne es eigentlich auch so dass man in den Aktionen der Schritte eine Variable vom Typ Bool oder Integer nicht speichernd beschreibt und somit außerhalb der Schrittkette weiß welcher Schritt aktiv ist falls die Schrittkette läuft.

Nun ein paar Jahre später möchte ich das eigentlich eleganter implementieren und brauche die Schrittnummer oder besser noch den Schritt Namen. Zudem soll ein weiteres Zutun beim Erweitern der Schrittkette vermieden werden, da dies öfters vergessen wird.

- Ein durchrollen des Ausgangsparameters S_NO mittels Flanke von S_NEXT (inkl. Grenzerkennung) kann die Schrittnummer liefern, macht aber Probleme oder hohen Aufwand bei der Implementierung wenn es Simultanverzweigugnen gibt und die Schritte nur für eine Zykluszeit aktiv sind.

- Die Schnittstelle von "Standard Schnittstellenparameter" auf "Maximale Schnittstellenparameter" zu stellen, bringt leider nicht die notwendigen Informationen in den Instanzdatenbaustein der Schrittkette.

- Die Verwendung eines Erweiterungsbausteins liefert lediglich die Information wie viele Schritte aktiv sind, aber nicht welche.

Es muss doch eine Lösung für so etwas geben...

Benötigt wird die Information um sie dann in eine Log Datei zu schreiben, zukünftig aber auch um sie im HMI anzuzeigen. Das ganze soll natürlich komfortabel und erweiterungsfreundlich umgesetzt werden.


Über konkrete Hinweise oder besser noch Hilfestellungen, wäre ich sehr dankbar.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
- Die Verwendung eines Erweiterungsbausteins liefert lediglich die Information wie viele Schritte aktiv sind, aber nicht welche.
Das stimmt nicht.
Du bekommst ein Array aller Schritte auf einmal.
Mit einer Schleife diese Variable abfragen:

#io_G7S[ #HierDeineINDEXvariable ].X
Die ist TRUE wenn der Schritt aktiv ist.

#io_G7S[ #HierDeineINDEXvariable ].SNO
Da Steht die Graph Schritt Nr drin.

Du musst nur die Array Größe dynamisch ermitteln. Sonst bekommst Du bei Änderungen Probleme
z.B.:
#si_MinSchritteGraph := DINT_TO_INT(LOWER_BOUND(ARR := #io_G7S, DIM := 1));
#si_MaxSchritteGraph := DINT_TO_INT(UPPER_BOUND(ARR := #io_G7S, DIM:= 1));
Also die für deine For-Schleife nutzen
 
Zurück
Oben