TIA In Graph einen FC aufrufen

elektrika

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend,

ich bin bereits seit meiner Ausbildung zum Mechatroniker begeistert vom SPS-Programmieren. Nun mache ich in der Uni ein Projekt mit der Fischtechnik Factory Simulation.
Die Ablaufsteuerung habe ich aufgrund der Einfachheit in Graph programmiert. Die Schrittkette callt dann einzelne Funktionen, welche die Weiterschaltbedingungen über Ausgabeparameter setzen sollen. Im Anhang findet ihr einen Screenshot, der mein Problem genauer erklären.

Nur leider funktioniert das nicht so einfach wie ich mir das vorgestellt habe... Das Programm bleibt immer im ersten Schritt stehen, obwohl die Ausgabevariable, die den nächsten Schritt aktivieren soll, eigentlich im FC gesetzt wird: es scheint so als würde der Parameter nicht übergeben werden.
Muss ich die Aufrufe der FCs auch über den OB mit EN-Parameter steuern?! Dann müsste ich ja noch Sorge tragen, dass all die Merker zum Aufrufen zurückgesetzt werden, oder? :cry:

Was meint ihr dazu - gibt es eine Möglichkeit dies elegant zu lösen? (TIA Portal 15 und CPU 1512C-1 PN)
Ich würde mich wirklich sehr über euren Ratschlag freuen.

Viele Grüße
Elektrika
 

Anhänge

  • Annotation 2019-01-20 023545.jpg
    Annotation 2019-01-20 023545.jpg
    63,9 KB · Aufrufe: 142
Hi,
So habe ich noch nicht programmiert. Wenn du z.B. Ein Band einschalten willst, dann programmier ich das Band in einen eigenen FC. Im Graph setzte dann nur ein Bit was diesesBand anschaltet.



Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
So habe ich noch nicht programmiert. Wenn du z.B. Ein Band einschalten willst, dann programmier ich das Band in einen eigenen FC. Im Graph setzte dann nur ein Bit was diesesBand anschaltet.

Vielen Dank für deine rasche Antwort. :)
Das Problem welches ich bei dieser Variante habe, ist, dass ich sowohl Outputs als auch Inputs am Graph-FB habe. Es kommt also darauf an in welcher Reihenfolge ich den Aufruf im OB1 durchführe. Dieser ist in FBD programmiert. Wenn ich die Ausgabevariable als Local Temp speichere, wird sie nach jeden Zyklus zurückgesetzt, wie ich es ja auch haben möchte damit ich nicht jede einzelne Variable der Steps einzeln zurücksetzen muss. Wird der FC nach dem FB gecallt, wird der Ausgang des FCs aber auch nach jedem Zyklus zurückgesetzt und kann daher nicht mehr als Eingang für den FB genutzt werden.
Mit Merkern im globalen Speicher ginge das relativ schnell. Ich habe aber gelesen, dass man am besten globale merker vermeiden soll, sondern eher die Schnittstellen nutzen soll.
Daher meine Frage, ob ich dies nicht so lösen kann.

Ich werde irgendwie das Gefühl nicht los, dass es am mangelnden Verständnis von Gültigkeitsbereichen der Variablen scheitert.
Des Weiteren wird in der TIA-Hilfe auch nur der Aufruf von FBs per Drag & Drop explizit erklärt...
 
Zuletzt bearbeitet:
Natürlich ist die Reihenfolge im OB1 wichtig. Ich persönlich arbeite nur mit lokalen Variablen wenn ich wirklich nur in dem Baustein was abfrage oder einen Fc erstelle denn ich öfters im Programm ( nicht im Graph) aufrufe.
Aber ich denke die Vorgehensweise ist bekannt


Gesendet von iPhone mit Tapatalk
 
Wenn die variable trans_2_1 und trans_2_2 temporäre Variablen sind, funktioniert es nicht, wenn Du sie statisch machst, muß es gehen. Das mache ich auch so.
Temporäre Variable funktionieren in Graph zwar, um Werte von vorausgeschalteten permanenten Anweisungen auf Transitionen oder von diesen oder Aktionen auf nachgeschaltete permanente Anweisungen zu übertragen, innerhalb eines Schrittes funktionieren sie jedoch nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Natürlich ist die Reihenfolge im OB1 wichtig. Ich persönlich arbeite nur mit lokalen Variablen wenn ich wirklich nur in dem Baustein was abfrage oder einen Fc erstelle denn ich öfters im Programm ( nicht im Graph) aufrufe.
Aber ich denke die Vorgehensweise ist bekannt

Ich habe es nun tatsächlich so gelöst, dass ich im OB1 die Funktionen nacheinaner nach Ebenen strukturiert und mit vorgeschalteten IF-Bedngungen aufrufe (OB1 in SCL). Die Variablen für die Aufrufe habe ich mir jetzt in einen DB gelegt, die ich dann im FB setze. So ist es denke ich ganz okay...
Vielen Dank für deine Hilfe.

Wenn die variable trans_2_1 und trans_2_2 temporäre Variablen sind, funktioniert es nicht, wenn Du sie statisch machst, muß es gehen. Das mache ich auch so.
Temporäre Variable funktionieren in Graph zwar, um Werte von vorausgeschalteten permanenten Anweisungen auf Transitionen oder von diesen oder Aktionen auf nachgeschaltete permanente Anweisungen zu übertragen, innerhalb eines Schrittes funktionieren sie jedoch nicht.

Wie oben erwähnt, habe ich es jetzt über den Aufruf aus em OB mit einer Variable gelöst. Wenn ich die Transitionsvariablen als static bestimme, muss ich diese aber nach jedem Durchlauf zurücksetzen oder? Für den Fall, dass es eine Schrittkette mit Ende ist, muss ich diese ja eh bei jedem Aufruf aus einem Step vorher initialisieren. Setzt das dann auh die static Variablen zurück - müsste es doch, oder?
Das Initialisieren erfolgt jetzt über einen Delay im selben Step. ( Screenshot)
Gibt es dafür eine bessere Lösung bzw. wie handhabt ihr denn das Initialisieren? Denn das Initialisieren geht ja nur soobald meine IF Bedingung erfüllt ist, bzw. erst wenn der FB aktiv ist, oder? Das bedeutet ja, dass ich nicht mit der selben Variable initialisiern und aufrufen kann, oder?
:rolleyes:

Ich hoffe ich habe mich nicht allzu wirr ausgedrückt.
 

Anhänge

  • SharedScreenshot.jpg
    SharedScreenshot.jpg
    322,7 KB · Aufrufe: 49
  • SharedScreenshot1.jpg
    SharedScreenshot1.jpg
    298,5 KB · Aufrufe: 50
Zuletzt bearbeitet:
Der Init_Q-Eingang wartet auf eine pos. Flanke, wenn der Baustein nicht aufgerufen wird, kann keine Flanke erkannt werden!

Ich weiß nicht so recht, was Du eigentlich machen willst, von der Programmlogik her.
Bei mir hat das Rücksetzen der Schrittkette meist nichts mit dem Programmablauf zu tun, sondern das erfolgt in einer Extra-Betriebsart, da so die Kundenvorgabe ist.
Ansonsten verkopple ich Schrittketten mit Koppelmerkern, die auf der einen Seite gesetzt und auf der anderen als Quittierung rückgesetzt werden.

Einen Graph-Baustein in einer Schrittketten-Aktion aufzurufen, würde ich wegen mangelnder Übersichtlichkeit nicht machen. FB/FC in Aktionen sind bei mir dazu da, genau zu diesem Zeitpunkt irgendwas zu machen, was ansonsten eben nie gemacht wird, wie Berechnungen oder bestimmte Prüfungen. D.h. das meine Variable trans_1_1 z.B. in der Aktion als Ausgangswert der Funktion beschrieben wird und eben auch in der zugehörigen Transition ausgewertet wird. Da standardmäßig die Aktionen vor der Prüfung der Weiterschaltbedingung ausgeführt werden, funktioniert das auch. Da braucht deshalb nichts rückgesetzt werden. (Natürlich bleibt eine statische Variable erhalten, aber da wie gesagt die Neuberechnung unmittelbar vor der lesenden Verwendung erfolgt, ist das egal.)
 
Ich verstehe auch nicht so recht welche Funktion(en) du umsetzen musst/willst, bzw. kenne ich auch die Schnittstellen zu Fischertechnik nicht etc.. aber es sieht mir danach aus dass du versuchst zu viele Aktionen in eine Operation zu stecken(?) auch dass du alles im OB1 aufrufst anstatt FBs zu erstellen in denen die einzelnen Funktionen gecalled werden zwecks der Übersicht etc..

Wäre gut zu wissen was du versuchst umzusetzen. Ich habe zB auch noch nie solchen Umfang an Aufrufen in einem Graphen gesehen.. eigentlich wird in einer Schrittkette der Prozess an sich geschrieben und die Aufrufe und alles andere an Funktionen passiert ausserhalb des Graphen..

Ich weiß auch nicht in wie weit die zyklische Abarbeitung für dich ein Problem darstellt. Und anstatt globalen Merkern kannst du dir einfach einen DB anlegen mit genügend Arrays von Bits die du wiederverwenden kannst, ist sauberer.
 
Zurück
Oben