Step 7 In FUP Schleife erzeugen

Andi08

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

ich programmiere zum ersten Mal in SPS und nutze dazu FUP. Mein Aufgabe ist es in TIA (V17.5) eine Programm zu schreiben, um Produkt von Tank 1 in 2 zu pumpen. Das ganze simuliere ich dann über WinCC und PLCSIM. Folgendes habe ich mir ausgedacht:

Der Tank 1 hat schon einen Anfangswert von Tank 1-Ini 10.000L und sobald die Anlage sich im Automatikbetrieb befindet (siehe Baustein FC1) wird dieser Wert auf den Wert Tank 1-Ist überschrieben. Dann wird das SR-Glied in Baustein FC2 angestoßen. Und mit dem Taktmerker Clock 1Hz soll dann jede Sekunde diese "Schleife" angestoßen werden.​
Beim dem ersten Zweig, ist dann der Füllstand zu Beginn Tank 1-Ist= 10.000 und es sollen dann mit der Subtraktion 100L abgezogen und die Differenz (hier 9900L) soll dann wieder in Tank 1-Ist reingespeichert werden. Dann sollen wieder von den 9900, 100L abgezogen werden. Bei dem zweiten Zweig soll genau das Gegenteil geschehen. Der Füllstand Tank2-Ist, ist zu Beginn 0 und soll immer 100 draufaddiert bekommen. In der Simulation sieht es dann so aus, als würden jede Sekunde 100L von Tank 1 in 2 fließen.​
FC 1
FC1.png
FC2
FC2.png
Jedoch funktioniert diese Schleife nicht. Die Werte springen willkürlich. Die Ist-Werte der Tanks wird nicht mit dem neuen Differenzwert überschrieben.
Es wäre super wenn ihr mir da helfen könntet, da ich diese Aufgabe bald vorstellen muss :(

Vielen Dank:)
 
BTw
Eine Schleife musst Du nicht explizit programmieren. Der OB1-Zyklus ist eine Schleife.

Das wilde springen der Werte kann passieren, wenn Dein Takt länger als einen Zyklus True ist und Dein Baustein im OB1 Zyklus addiert.
 
Zuletzt bearbeitet von einem Moderator:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mach mal einen Online Screenshot

Der Move Wert scheint mir überflüssig.. da kann direkt der sich zu ändernde Wert dran. Der Move danach kann dann auch weg.

Das ENO kommt nur wenn der Baustein fehlerfrei abgearbeitet wurde, btw
Hab schon ewig nicht mehr in FUP was gemacht.. ist der ENO Standard immer noch, auch unter FUP?
Meine mich zu erinnern dass er in KOP explizit generiert werden muss.

Schönheitsfehler falls du es ändern möchtest:
In Programmiersprachen werden Leerzeichen bei Variablen und Deklarierungen vermieden.. da kannst du dir eine Casing Variante deiner Wahl aussuchen und diese auch überall umsetzen.

Wie sieht der Aufruf von deinem Baustein aus? Ist das im OB1 oder ein FC/FB?

Der R1 vom SR Gatter in FC2 setzt nur das Förderung Signal zurück, der Start muss dann aber auch abfallen. Start nur wenn alle Bedingungen erfüllt und nicht Stop. Genauso muss es aber wieder möglich sein erneut Starten zu können.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
BTw
Eine Schleife musst Du nicht explizit programmieren. Der OB1-Zyklus ist eine Schleife.

Das wilde springen der Werte kann passieren, wenn Dein Takt länger als einen Zyklus True ist und Dein Baustein im OB1 Zyklus addiert.
Also ich habe mal den Taktmerker rausgenommen, da springen die Werte von Tank 2-Ist auf 0 auf 3... und dann auf den Max-Wert 4500 und das SR-Glied wird rückgesetzt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mach mal einen Online Screenshot

Der Move Wert scheint mir überflüssig.. da kann direkt der sich zu ändernde Wert dran. Der Move danach kann dann auch weg.

Das ENO kommt nur wenn der Baustein fehlerfrei abgearbeitet wurde, btw
Hab schon ewig nicht mehr in FUP was gemacht.. ist der ENO Standard immer noch, auch unter FUP?
Meine mich zu erinnern dass er in KOP explizit generiert werden muss.

Schönheitsfehler falls du es ändern möchtest:
In Programmiersprachen werden Leerzeichen bei Variablen und Deklarierungen vermieden.. da kannst du dir eine Casing Variante deiner Wahl aussuchen und diese auch überall umsetzen.

Wie sieht der Aufruf von deinem Baustein aus? Ist das im OB1 oder ein FC/FB?

Der R1 vom SR Gatter in FC2 setzt nur das Förderung Signal zurück, der Start muss dann aber auch abfallen. Start nur wenn alle Bedingungen erfüllt und nicht Stop. Genauso muss es aber wieder möglich sein erneut Starten zu können.
ja der Move Wert ist wirklich überflüssig, aber habe es drin gelassen.
Danke für den Tipp mit der Variablen Deklarierung!
 
Der Zählwert ensteht am Ausgang.Gibt Vor und Rückwärtszähler.
Übernommen wird der SollWert mit einer Flanke am Eingang.Wegen mir aus mit dem Einschalten.
Maxwert minus Aktualwert gibt den Befülltank.
Am Ausgang kannst du ja nehmen was du willst, solange das Format stimmt.
 
Das scheint mir aber nicht so zu sein. Du möchtest doch erreichen, dass 1x pro Sekunde dem Tank 1 100L entnommen werden und Tank 2 100L hinzugefügt.
Dann musst du dafür sorgen, dass dieser Befehl exakt 1x pro Sekunde ausgeführt wird.

Wenn du nun den Standard Taktmerker aus der SPS nimmst, steht dieser für 0,5 Sek an, und hat dann 0,5 Sek Pause.
In diesen 0,5 Sek durchläuft die SPS z.B. 50 Zyklen (bei angenommenen 10ms Taktzyklus). Also würdest du in 0,5 Sek 5000L umfüllen

Daher die Frage von @renno, ob du den Taktmerker als Flanke auswertest? Eine Flanke ist exakt für 1 Zyklus True. Dazu kannst du den Taktmerker der SPS verwenden, der muss aber noch über eine Flankenauswertung geführt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das scheint mir aber nicht so zu sein. Du möchtest doch erreichen, dass 1x pro Sekunde dem Tank 1 100L entnommen werden und Tank 2 100L hinzugefügt.
Dann musst du dafür sorgen, dass dieser Befehl exakt 1x pro Sekunde ausgeführt wird.

Wenn du nun den Standard Taktmerker aus der SPS nimmst, steht dieser für 0,5 Sek an, und hat dann 0,5 Sek Pause.
In diesen 0,5 Sek durchläuft die SPS z.B. 50 Zyklen (bei angenommenen 10ms Taktzyklus). Also würdest du in 0,5 Sek 5000L umfüllen

Daher die Frage von @renno, ob du den Taktmerker als Flanke auswertest? Eine Flanke ist exakt für 1 Zyklus True. Dazu kannst du den Taktmerker der SPS verwenden, der muss aber noch über eine Flankenauswertung geführt werden.
Danke dir für den Hinweis! Durch die Flankenauswertung des Taktmerkers zieht der pro Sekunde nur 100 ab.

Ich habe leider ein anderes Problem...Bei Anlage-EIN steigt nur Tank2-Ist und erst bei Anlage-AUS sinkt Tank 1-Ist und Tank2-Ist steigt trotzdem weiter. Ich finde den Fehler einfach nicht...
 
Das hat wohlmöglich was mit deinem Selektionsbaustein zu tun.. der kann bestimmt gegen etwas passenderes ersetzt werden

Mit der Anweisung "Selektieren" wählen Sie abhängig von einem Schalter (Eingang G) einen der Eingänge IN0 oder IN1 aus und kopieren dessen Inhalt in den Ausgang OUT. Wenn der Eingang G den Signalzustand "0" hat, wird der Wert am Eingang IN0 kopiert. Wenn der Eingang G den Signalzustand "1" hat, wird der Wert am Eingang IN1 in den Ausgang OUT kopiert.
 
Und was meinst du mit "Anlage-AUS"? Ich finde in deinem Programmausschnitt in Beitrag 1 keine Variable, die so heißt.
Wahrscheinlich AutobetriebAus.. in der ersten Funktion.

Ja anders kann ich mir das nicht erklären.
Was soll der Selektierer machen? Den kannste bestimmt austauschen wenn du dir aufschreibst was mit dem Signal vom SR passieren soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke dir für den Hinweis! Durch die Flankenauswertung des Taktmerkers zieht der pro Sekunde nur 100 ab.

Ich habe leider ein anderes Problem...Bei Anlage-EIN steigt nur Tank2-Ist und erst bei Anlage-AUS sinkt Tank 1-Ist und Tank2-Ist steigt trotzdem weiter. Ich finde den Fehler einfach nicht...
Ich konnte das Problem beheben. Siehe Bild.

Vielen Dank an Alle!
FC2_neu.png
 
Zurück
Oben