TIA Problem bei Daten kopieren in Graph7

mmm_ams

Level-2
Beiträge
119
Reaktionspunkte
11
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe in einer Anlage mehrere hintereinander liegende Neste, in denen jeweils ein Bauteil liegt. Die teile werden in Automatik weitergetaktet und ich muss die Bauteildaten (UDT) entsprechend schieben. Ich habe das Datenschieben zuerst in einer Graph-Schritt-Aktion wie folgt realisiert.

Daten_Platz_5 := Daten_Platz_4
Daten_Platz_4 := Daten_Platz_3
Daten_Platz_3 := Daten_Platz_2
.
.
Daten_Platz_1 := LeeresDatenfach

Obwohl die Aktionen in einer Schritt theoretisch nacheinander von oben nach unten abgearbeitet werden sollen, die Daten gehen durcheinander. Danach habe ich es so geändert, dass die obigen Datenschieben-Aktionen in separaten Schritten durchgeführt werden und somit funktioniert es nun richtig.

Hat jemand eine Erklärung oder Tipp dafür?

Danke und Grüße!
 
ich kann erstens nicht sagen ob das im Graph so funktioniert wie du denkst, aber wielange sind die Zuweisungen aktiv? Gemacht mit N oder S1N?
 
ich kann erstens nicht sagen ob das im Graph so funktioniert wie du denkst, aber wielange sind die Zuweisungen aktiv? Gemacht mit N oder S1N?
Alle Aktionen mit N ohne Ereignis und Weiterschaltbedingung ist das "TeilVorhanden" Bit im letzten Datenfach = False. Bedeutet das nicht, das die Aktionsreihe nur einmal durchgeführt wird?
 
Graph ist eigentlich nicht dafür gedacht irgendwelche Daten zu verschieben, dafür gibts SCL, bei so wenigen Datensätzen würde auch FUP reichen. Jedenfalls würde ich solche Datenschiebeaktionen immer ausserhalb von Graph programmieren und in Graph lediglich die Verschiebung anstoßen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Graph ist eigentlich nicht dafür gedacht irgendwelche Daten zu verschieben, dafür gibts SCL, bei so wenigen Datensätzen würde auch FUP reichen. Jedenfalls würde ich solche Datenschiebeaktionen immer ausserhalb von Graph programmieren und in Graph lediglich die Verschiebung anstoßen.

Eigentlich widerspricht du dir da sogar etwas.
Wenn FUP reicht, warum soll man es dann nicht auch in Graph machen?
Ich nutz für solch einfache Dinge schon immer Graph … Warum extra die Kette verlassen?
 
Inwiefern soll sich das widersprechen?
Die Kette wird auch nicht verlassen, sondern es wird nur parallel etwas abgearbeitet, nämlich Daten verschieben…
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe in einer Anlage mehrere hintereinander liegende Neste, in denen jeweils ein Bauteil liegt. Die teile werden in Automatik weitergetaktet und ich muss die Bauteildaten (UDT) entsprechend schieben. Ich habe das Datenschieben zuerst in einer Graph-Schritt-Aktion wie folgt realisiert.

Daten_Platz_5 := Daten_Platz_4
Daten_Platz_4 := Daten_Platz_3
Daten_Platz_3 := Daten_Platz_2
.
.
Daten_Platz_1 := LeeresDatenfach

Obwohl die Aktionen in einer Schritt theoretisch nacheinander von oben nach unten abgearbeitet werden sollen, die Daten gehen durcheinander. Danach habe ich es so geändert, dass die obigen Datenschieben-Aktionen in separaten Schritten durchgeführt werden und somit funktioniert es nun richtig.

Hat jemand eine Erklärung oder Tipp dafür?

Danke und Grüße!
was bedeutet genau "die Daten gehen durcheinander" ?
 
Eigentlich ist die Zuweisung in Graph näher an SCL als an FUP… Variable1 := Variable2
Das ist mir schon klar. In FUP ist es ein einfacher Move-Befehl, in SCL ist es eine einfache Zuweisung. Beides hat aber in Graph nix verloren, weil sonst sowas rauskommt wie hier in diesem Fall…

Ich wiederhole mich, Graph ist zur Datenver-/bearbeitung absolut ungeeignet. Graph ist eine Schrittketten-Programmiersprache, um verschiedene Schritte des Bearbeitungsprozesses zu definieren. Wenn eine Datenenverschiebung angestoßen werden soll, dann erstelle einen extrigen Schritt mit „Daten verschieben“. Dort setzt Du eine Bool-Variable (Daten verschieben starten) auf True, solange der Schritt aktiv ist. Diese Variable löst dann die Datenverschiebung in einem anderen FB aus. Ist die Datenverschiebung abgeschlossen kommt von diesem FB eine Rückmeldung (Bool-Variable - Daten verschieben abgeschlossen). Dies ist dann für Graph die Weiterschaltbedingung um in den nächsten Schritt zu springen und somit wird die Bearbeitung fortgesetzt. Im nächsten Schritt musst Du dann die Variable (Daten verschieben abgeschlossen) wieder auf False setzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist mir schon klar. In FUP ist es ein einfacher Move-Befehl, in SCL ist es eine einfache Zuweisung. Beides hat aber in Graph nix verloren, weil sonst sowas rauskommt wie hier in diesem Fall…

Ich wiederhole mich, Graph ist zur Datenver-/bearbeitung absolut ungeeignet. Graph ist eine Schrittketten-Programmiersprache, um verschiedene Schritte des Bearbeitungsprozesses zu definieren. Wenn eine Datenenverschiebung angestoßen werden soll, dann erstelle einen extrigen Schritt mit „Daten verschieben“. Dort setzt Du eine Bool-Variable (Daten verschieben starten) auf True, solange der Schritt aktiv ist. Diese Variable löst dann die Datenverschiebung in einem anderen FB aus. Ist die Datenverschiebung abgeschlossen kommt von diesem FB eine Rückmeldung (Bool-Variable - Daten verschieben abgeschlossen). Dies ist dann für Graph die Weiterschaltbedingung um in den nächsten Schritt zu springen und somit wird die Bearbeitung fortgesetzt. Im nächsten Schritt musst Du dann die Variable (Daten verschieben abgeschlossen) wieder auf False setzen.
Ich arbeite auch eben gerne mit Handshakes nach außen (um auch bei einem Fehler nicht den Graphen neu übertragen zu müssen). Aber so ganz verstehe ich auch nicht weswegen die Aktion nicht richtig abläuft, die Frage ist natürlich auch ob in der Transition gecheckt wird, ob die Daten korrekt verschoben worden sind.

Also als Trans:
Daten_Platz_5 == Daten_Platz_4 AND Daten_Platz_4 == Daten_Platz_3
AND Daten_Platz_3 == Daten_Platz_2 AND Daten_Platz_1 == LeeresDatenfach

Dann würde man nämlich das ganze abfangen, kann auch sein dass die Aktionen simultan getriggert werden und du natürlich so den Datensalat bekommst, da nicht alles sauber nacheinander verschoben wird. Mache sowas gerne mit MOVE befehlen die hintereinander geschaltet sind
 
Nach meiner Erfahrung werden die Aktionen bei Graph immer von oben nach unten abgearbeitet. Ich arbeite oft mit Aktionsfolgen, die andernfalls überhaupt nicht funktionieren würden. Ist denn der leere Datensatz die einzige Weiterschaltbedingung? Dann einfach weglassen, in den Standardeinstellungen wird der Schritt trotzdem ausgeführt. Ansonsten eben mit S1!
Es gibt aber Einstellungen, die das ändern!
 
Zuletzt bearbeitet:
Gerade eingefallen: Variablen, die in Aktionen gesetzt und in Transitionen gelesen werden, dürfen auch wenn das im selben Schritt geschieht, keine temporären sein. Ist zwar meiner Meinung nach unlogisch, ist aber aus der Erfahrung bewiesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gerade eingefallen: Variablen, die in Aktionen gesetzt und in Transitionen gelesen werden, dürfen auch wenn das im selben Schritt geschieht, keine temporären sein. Ist zwar meiner Meinung nach unlogisch, ist aber aus der Erfahrung bewiesen.
Auch ein Grund weswegen ich immer Arrays bei 0 anfange, für den fall dass es eben leer bleibt und man es einfach als leeres fach zum vergleichen/schreiben nutzen kann
 
Nach meiner Erfahrung werden die Aktionen bei Graph immer von oben nach unten abgearbeitet. Ich arbeite oft mit Aktionsfolgen, die andernfalls überhaupt nicht funktionieren würden. Ist denn der leere Datensatz die einzige Weiterschaltbedingung? Dann einfach weglassen, in den Standardeinstellungen wird der Schritt trotzdem ausgeführt. Ansonsten eben mit S1!
Es gibt aber Einstellungen, die das ändern!
Nun habe ich die Vermutung, dass es doch nicht an der Reihenfolge der Ausführung liegt. Ich muss es nochmals untersuchen
 
Gerade eingefallen: Variablen, die in Aktionen gesetzt und in Transitionen gelesen werden, dürfen auch wenn das im selben Schritt geschieht, keine temporären sein. Ist zwar meiner Meinung nach unlogisch, ist aber aus der Erfahrung bewiesen.
Das ist mir auch aufgefallen, konnte in der Doku nix dazu finden. Weiß jemand warum das so ist?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist mir auch aufgefallen, konnte in der Doku nix dazu finden. Weiß jemand warum das so ist?

Ohne Garantie …
Werden die Transitionen nicht vor den Schritten im Programm abgearbeitet?
Damit wären die Temp-Variablen ungültig
 
Bei Graph in S7-Classic steht in der Doku explizit, das die Transitionen vor den Schritten ausgewertet werden.
Ich vermute mal, da es ja die Option "Schritte überspringen" gibt. Mit dieser wird ein Schritt gar nicht mehr ausgeführt, wenn die Transition sofort erfüllt ist.
Bei TIA habe ich dazu nichts mehr in der Doku gefunden. Man kann also nur vermuten, das die Logik gleich geblieben ist...
 
Zurück
Oben