TIA Ausgänge mehrmals setzen? TIA V13

Automatio

Level-1
Beiträge
32
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Forum

Vorgeschichte:
Ich habe ein Hochregallager gebaut. In diesem gibt es 28 (4x7) Plätze, in denen ich Werkstücke ein und auslagern kann.
Die Lagerplätze werden durch einen "Lift" angefahren, dieser hat in der Höhe und Breite Sensoren die einmal bei jedem Lagerplatz ein Signal geben.
Ich habe mir also ein "Koordinatensystem" gebaut, indem ich in der Höhe und Breite mit MWs immer +1 und -1 rechne, wenn der Lift ein Signal im Links/ oder Rechtslauf gibt.
So kann ich jeden Lagerplatz relativ einfach anfahren. Sobald die Anlage eingeschaltet wird, nullt sich der Lift 1mal.
Um die Lagerplätze anzufahren habe ich also einen FB im GRAPH (FUP) programmiert, dem ich folgende Variablen gebe:
Lagerplatz (welches Lager gedrückt wurde), Höhe/Breite dieses Lagerplatzes, Höhe/Breite auf der sich der Lift befindet.
Ich brauche auch folgende Ausgänge (auch Variabeln im FB):
Lift Links/Rechtslauf, Lift Hoch/Runterfahren, Lift Aus/Einfahren.

Problem:
Bei den Eingängen gibt es keine Probleme, nur bei den Ausängen weiss ich nicht, wie ich die Ausänge "mehrmals" benutzen kann.
Insgesamt muss ich diese ja 28mal benutzen und ich mache nur ungern 28 Merker + oder nur für 1 Ausgang, da muss es doch etwas einfacheres geben?
Man kann jeden Ausgang nur 1mal benutzen, sonst funktioniert die Ansteuerung nichtmehr...
Bin für jede Hilfe dankbar!

Gruss
Automatio
 
Also ohne jetzt der TIA Profi zu sein, nutze ja nur Classic, könnte man wenn es die Anwendung usw. erlaub mit S/R arbeiten ;)

Oder Alternativ über die Befehlsmerker gehen und dann am Ende eine Zuweisung mit "=" machen ...
 
Du kannst auch mit 1 Merker arbeiten die du lest und schreibst.
Und dann am ende des Programms das VEK auf den Ausgang schreiben.

Bei uns werden mittlerweile die Programme generell so aufgesetzt das innerhalb des Programmes nur auf Merker gearbeitet wird.
E/A's werden dann einmal rangiert. Dadurch ist man bei 'Standarmaschinen' flexibler wenn die Elektriker wieder einmal alles durcheinanderwirbeln (Andere Hardware, andere Module,....)
 
Wenn Du die Ausgänge 28-mal ansteuern musst, dann ist dein Programmkonzept noch etwas sub-optimal. (vorsichtig ausgedrückt ;))
Du solltest das Anfahren der Position nicht in der Schrittkette lösen, sondern in der Schrittkette wird ein Auftrag an eine X-Fahrroutine ausgelöst, die dann von einem anderen Baustein abgearbeitet wird, dann löst die Schrittkette einen Y-Fahrbefehl aus, der dann abgearbeitet wird usw.
In den X- bzw Y- Fahrroutinen musst Du dann nur Soll- mit Ist-Position vergleichen und davon abhängig nur an einer Stelle die Antriebe ansteuern.
Gruß
Erich
 
Wenn Du die Ausgänge 28-mal ansteuern musst, dann ist dein Programmkonzept noch etwas sub-optimal. (vorsichtig ausgedrückt ;))
Du solltest das Anfahren der Position nicht in der Schrittkette lösen, sondern in der Schrittkette wird ein Auftrag an eine X-Fahrroutine ausgelöst, die dann von einem anderen Baustein abgearbeitet wird, dann löst die Schrittkette einen Y-Fahrbefehl aus, der dann abgearbeitet wird usw.
In den X- bzw Y- Fahrroutinen musst Du dann nur Soll- mit Ist-Position vergleichen und davon abhängig nur an einer Stelle die Antriebe ansteuern.
Gruß
Erich

Das Anfahren der Positionen habe ich in der vorrausgeschalteten permanenten Anweisungen gelöst. Sobald der Schritt für das positionieren aktiv ist, wird das positionieren mit Position > SollPosition die positionierung gestartet.
Ich muss doch sowieso einmal festlegen, dass Lager 1 Höhe 1 und Breite 1 ist und das bei allen 28. Ich glaube alles in einem FB ist sogar eine recht gute Lösung.

Jetzt aber nochmals auf meine Frage zu sprechen;
Ich kann also 2mal den selben Merker schreiben? (an verschiedenen Positionen des Programmes)
Bei mir hat das bisher nie funktioniert, da muss ich wohl nochmal probieren.

Gruss
Automatio
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt aber nochmals auf meine Frage zu sprechen;
Ich kann also 2mal den selben Merker schreiben? (an verschiedenen Positionen des Programmes)

Ja, du kannst beliebig oft in deinem Programm den gleichen Merker beschreiben / lesen etc.
Natürlich kann dies schnell zur Unübersichtlichkeit führen, doch dass ist dann eher ein Frage der grundsätzlichen Architektur der Software.

Bei uns werden Beispielsweise keine Ausgänge direkt beschrieben, sondern alles über Merker und erst ganz am Schluss des Programmes wird einmal der Status der Ausgangsmerker auf die Ausgänge geschrieben.
 
Jaaaa - man kann den selben Merker (oder auch Ausgang) selbstverständlich mehrfach beschreiben - die Frage ist ob man das auch wirklich will ;)

Denn gültig ist natürlich nur die letzte Zuweisung des Merkers (oder Ausgangs) - solche Konstrukte sollten also vermieden werden!
 
...Ich muss doch sowieso einmal festlegen, dass Lager 1 Höhe 1 und Breite 1 ist und das bei allen 28.
Wieso denn das? Sind die Lagerplätze nicht der Reihe nach angeordnet?
Die X-Koordinate ist dann z. B (Nummer div Breite) und die Y-Koordinate (Nummer mod Höhe). Zwei Befehle und du kennst jede beliebige Zielposition.

Ich glaube alles in einem FB ist sogar eine recht gute Lösung.
Schrittkette und komplexe permanente Operationen in einem FB ist nie eine gute Lösung, wirst Du auch noch merken.
Gruß
Erich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
SPS Forum1.JPGSPS Forum2.JPGSPS Forum3.JPG

Momentan ist es wie auf den angehängten Bildern gelöst, was nicht funktioniert, obwohl der DB den Merker eigentlich setzten sollte.(Ausgang wird beim beobachten als aktiv angezeigt, der Merker aber nicht)
So wie ich das verstehe, aufgrund eurer Erklärungen, müsste es funktionieren. Doch der Merker setzt sich nicht, da ich ihn 2x benutze. Oder verstehe ich etwas falsch?

Vielen Dank für eure bisherige Hilfe.
Gruss Automatio
 
Ich weiss jetzt nicht wie das in FUP dargestellt wird. Aber wenn der Anschluss des Merkers am OUT (Nicht IN/OUT) des FBs ist. Dann wird das letzte Schreiben immer prior sein. Ob nun 0 oder 1. Das gilt auch wenn im Baustein auf Out nur bedingt geschrieben wird. Der Letzte Baustein der Aufgerufen wird, gewinnt (wenn nicht übersprungen oder EN = False)

Hochregal hört sich jetzt schon so an, als sollte man das wissen.

mfG René
 
Wie bereits beschrieben - es kann so nicht funktionieren.

Es zählt praktisch nur Dein letzter Aufruf des FB2 - alles was davor auf die Merker geschrieben wird hat die Steuerung somit vergessen...

Stichwort: Zyklische Arbeitsweise einer SPS (vereinfacht):

- Einlesen der Eingänge (PAE)
- Abarbeiten des Programmcodes (OB1 und darin aufgerufene, sonstige OB`s)
- Schreiben der Ausgänge (PAA)

... und dann wieder von vorn.

Das solltest Du Dir nochmals ansehen - der Fehler steckt in Deinem Ansatz.

PS: Der Merker setzt sich schon - aber im nächsten Netzwerk (genauer beim folgenden Aufruf des FB2) wird der gleiche Merker ja wieder mit 0 beschrieben...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie bereits beschrieben - es kann so nicht funktionieren.

Es zählt praktisch nur Dein letzter Aufruf des FB2 - alles was davor auf die Merker geschrieben wird hat die Steuerung somit vergessen...

Stichwort: Zyklische Arbeitsweise einer SPS (vereinfacht):

- Einlesen der Eingänge (PAE)
- Abarbeiten des Programmcodes (OB1 und darin aufgerufene, sonstige OB`s)
- Schreiben der Ausgänge (PAA)

... und dann wieder von vorn.

Das solltest Du Dir nochmals ansehen - der Fehler steckt in Deinem Ansatz.

Soooo... Jetzt sind wir wieder bei meiner Einstiegsfrage, ich weiss wie eine SPS arbeitet und dass es nicht funktioniert, aber so wie ich das gelesen habe, wurde mir auf der letzten Seite das Gegenteil erklärt.

Jetzt wieder zur Anfangsfrage:
Wie kann ich die Ausgänge/Merker mehrmals benutzen ohne 28x Merker auf einen Ausgang zu ziehen?
Oder muss ich mein ganzes Programm überarbeiten?
Was ist dann genau der Vorteil der Schrittkettenprogrammierung/Instanzierung?

Sorry, ich bin noch relativ neu wenns um das TIA-Portal (bin auch noch in der Ausbildung) geht und fand meine Idee relativ gut, lasse mich aber gerne belehren.

Gruss
Automatio
 
Das kommt drauf an was dein FB2 tut. Was soll der 1. FB2 aufruf machen, was der 2. FB2 Aufruf? Wird darin bedingt auf Ausgänge geschrieben? Will heissen. Schreibt der erste oder zweite FB2 nicht immer auf die Ausgänge? Dann könnte man die Anschlüsse auf IN/OUT legen.
Wie wird verhindert das nicht beide FB gleichzeitig den Lift ansteuern etc.?

Dies hat nix mit TIA zu tun, sondern ist grundsätzliches Wissen das für praktisch jede art der SPS Programmierung gilt (wenn es auch nicht von jeder CPU immer strikt durchgezogen wird)

mfG René
 
Das kommt drauf an was dein FB2 tut. Was soll der 1. FB2 aufruf machen, was der 2. FB2 Aufruf? Wird darin bedingt auf Ausgänge geschrieben? Will heissen. Schreibt der erste oder zweite FB2 nicht immer auf die Ausgänge? Dann könnte man die Anschlüsse auf IN/OUT legen.
Wie wird verhindert das nicht beide FB gleichzeitig den Lift ansteuern etc.?

Dies hat nix mit TIA zu tun, sondern ist grundsätzliches Wissen das für praktisch jede art der SPS Programmierung gilt (wenn es auch nicht von jeder CPU immer strikt durchgezogen wird)

mfG René

Die FBs machen alle das selbe, den Lift positionieren, ausfahren, Werkstück ablegen und wieder einfahren. Je nach FB eine andere Position - Die FBs befinden sich alle im Initialschritt und es kann immer nur 1Db gliechzeitig laufen, die Ausgänge werden also niemals gleichzeitig benutzt.
Was bringt es mir die Ausgänge auf IN/OUT zu legen?



Gruss Automatio
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätzliches zur Programmierung speziell auch für das TIA.

Ein Ausgang soll unter allen Umständen egal welches System immer nur einmal beschrieben werden und man verwendet auch keine Merker mehr im TIA sondern löst alles über Datenbausteine.


So wie ich es bei deinen Bausteinen aktuell sehe ist es wohl die beste Lösung wenn du es über Oder auf den Ausgang verknüpfst oder du überlegst dir eine andere Lösung für deine Bausteine.
 
Was bringt es mir die Ausgänge auf IN/OUT zu legen?

Dann werden deine Ausgänge in die Instanz eingelesen. Wenn du im Baustein damit nichts machst. also keine SR Bedingung erfüllt ist und auch kein = drauf zeigt werden sie unverändert wieder ausgegeben wenn der Baustein beendet wird.

Ich persönlich mache das aber mit Strukturen für die Liftanforderung. Jeder Stellplatz kann den Lift mit seiner ID anfordern. Dadurch kann der Liftsteuerbaustein auch mehrere gleichzeitigen Anforderungen bearbeiten (FIFO) und auch komplettieren. Und die Liftsteuerung ganz alleine steuert die Motoren. Dazu Muss man halt alles etwas Strukturieren (Auf Merker kann man sowieso verzichten, die meisten hier nennen merker nur weils kürzer ist als Datenbaustein).

Geht dann aber etwas tiefer.

mfG René
 
Aber so wie ich das gelesen habe, wurde mir auf der letzten Seite das Gegenteil erklärt.
Das hast du aber leider falsch interpretiert. Alles, ob Ausgang oder Merker, lässt sich doppelt beschreiben.
Doppeltes beschreiben führt aber dazu dass, logischerweise, der beschriebene Operand den Wert der letzten Zuweisung bekommt.

Das ist genau das was dein Programm im Moment macht. Vereinfacht ist es das hier...
Code:
U    Q_FB1
=    Ausgang

U    Q_FB2
=    Ausgang

U    Q_FB28
=    Ausgang
Kann nicht gehen. Er hält dich aber niemand davon ab die Zuweisung bedingt durchzuführen oder mit bedingten Operationen (Setze/Rücksetze) zu arbeiten.
Code:
       U    Log_1
       R    Ausgang

//Bedingte Zuweisung
       U    Q_FB1
       SPBN Ma02
       =    Ausgang

 Ma02:  U    Q_FB2
       SPBN Ma28
       =    Ausgang

 Ma28:  U    Q_FB28
       SPBN Ma99
       =    Ausgang

 //Bedingte Operation 
       U    Q_FB1
       S    Ausgang
       U    Q_FB2
       S    Ausgang
       U    Q_FB3
       S    Ausgang
       U    Q_FB28
       S    Ausgang
Das ist das was gemeint war mit: "Ein Ausgang kann mehrmals beschrieben werden".

Sowas lässt sich aber nicht mit dem OUT eines FB umsetzen da dieser eine "unbedingte Zuweisung" darstellt und dir damit das Ergebnis meines ersten Beispiels liefert.
Mit einem INOUT kann man aber bedingte Zuweisungen oder bedingte Operationen verwenden.

Jetzt wieder zur Anfangsfrage:
Wie kann ich die Ausgänge/Merker mehrmals benutzen ohne 28x Merker auf einen Ausgang zu ziehen?
Oder muss ich mein ganzes Programm überarbeiten?
Zu 1: Siehe oben.
Obwohl die 28 Merker wahrscheinlich besser sind, weil sich damit leichter diagnostizieren lässt welcher der 28 Bausteine den gerade dafür verantwortlich ist dass ein Ausgang angesteuert wird.​
Zu 2: Zwingen kann dich keiner, du hast dir aber einen unorthodoxen Weg ausgesucht.
Wie von LargoD und Vollmi schon angesprochen wäre es eher logischer nur eine Liftansteuerung zu programmieren, es gibt ja mechanisch auch nur einen Lift.​
Was ist dann genau der Vorteil der Schrittkettenprogrammierung/Instanzierung?
Du kannst deine 28 Regale mit dem selben Stück Code machen.
 
Zuletzt bearbeitet:
Zurück
Oben