WinCC Animationen bei Simulation Runtime

Prisoner

Level-1
Beiträge
12
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen,

ich befinde mich gerade bei meinem Technikerprojekt und bin gerade an WinCC am verzweifeln.
Ich nutze TIA V16 und soll zu unserer Anlage eine Visualisierung erstellen, ein Panel gibt es nicht, es läuft alles über Runtime. Mein Auftraggeber(Lehrer) hat natürlich extrawünsche und zwar, möchte er, dass ich die Animationen nutze. Habe in dem was ich bisher visualisiert habe mit sichtbar und nicht sichtbar gearbeitet, was meiner Meinung auch ganz gut aussieht. Jetzt habe ich beispielsweise einen Zylinder mit vorderer und hinterer Endlage, natürlich könnte ich jetzt mit MOVE jeweils einen Wert für hinten, Mitte und außen in ein INT schreiben und es damit animieren, aber ihm reicht das nicht... Er möchte das der Anlagenablauf für seine Schüler auch ohne die Anlage selber deutlich wird, heißt der Zylinder soll ausfahren und dabei Schrittweise bis zur Endposition fahren. Ich habe jetzt schon den ganzen Tag experimentiert, wollte am Ende mit einem Taktmerker das 1 Signal an einem Addierer nutzen um einen Int Wert langsam zu erhöhen, aber das klappt auch nicht so wie ich dachte :D Habt ihr da ein paar Vorschläge für mich, oder soll ich einfach sagen, dass es nur Endlage und Mitte gibt?
 
Welche WinCC Version in TIA denn, Advanced oder Professional?

Wenn dein Zylinder nur eine Laufzeit von 1-2 Sekunden hat, ist das mit der Animation mehr oder weniger sinnlos.
Ansonsten ist das mit der Animation über ein verschieben eines Objektes schon möglich, bei WinCC Panels benötigst du zur Animation aber eine Variable von Typ Integer.
Was für ein Objekt möchtest du denn animieren, und was funktioniert nicht: das SPS-Programm mit dem erhöhen/verringern der Position, oder die Animation?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir nutzen Advanced.
Also bei der Anlage ist der innerhalb von 1 Sekunde in Endlage :D
Also ich möchte eben diesen Ausschieber von dem Zylinder animieren, habe mir da schon eine Grafik für zusammengebastelt, muss nur irgendwie eine Integer Variable mit aufsteigenden Werten hinbekommen. Also im Prinzip funktioniert beides, nur den Integer Wert den ich mir mit Taktmerker und Addierer erzeuge ist zu ungenau, also der macht Sprünge im 100er Bereich. In der Animation ist der Zylinder auch stückweise herausgefahren, jedoch unregelmäßig und mit unterschiedlichen Abständen. Deshalb hätte ich gerne einen kleinen Bereich, aber was ich jetzt habe, ist innerhalb von paar Sekunden über 5000. Etwas schwer rüber zu bringen finde ich...
 
Mit 1 Sekunde bringt das nicht viel, schnellste Pollzeit für die Stellung sind meine ich 100 ms, und nur für eine Animation das alles auszulasten würde ich nicht machen.

Aber prinzipiell kannst du dir die Stellung z.B. so generieren, wenn du mit Taktflanken arbeiten möchtest:
Code:
FUNCTION_BLOCK FBxxx

VAR_INPUT
    ZylinderOeffnen : BOOL;     // 0=Schließen, 1=Öffnen
    EndlageZu : BOOL;           // Endlage zu
    EndlageAuf : BOOL;          // Endlage auf
    Laufzeit : REAL := 5.0;     // Zylinder Laufzeit in Sekunden
    Taktflanke : BOOL;          // Taktflanke
    TaktflankeZeit : REAL := 0.5; // Zeit Taktflanke in Sekunden
END_VAR

VAR_OUTPUT
    Pos : INT;                  // Position in %
END_VAR

VAR
    statPosR : REAL;
END_VAR

VAR_TEMP
    tempDelta : REAL;
END_VAR

BEGIN

IF EndlageAuf THEN
   // Endlage auf -> fest auf 100 setzen
   statPosR := 100.0;
ELSIF EndlageZu THEN
    // Endlage zu -> fest auf 0 setzen
    statPosR := 0.0;
ELSE
    // Zylinder fährt -> Position ändern
    IF Taktflanke THEN
        // Stellungsdifferenz in % pro Zeit zwischen zwei Taktflanken
        tempDelta := 100.0 / (Laufzeit / TaktflankeZeit);
        IF ZylinderOeffnen THEN
            statPosR := statPosR + tempDelta;
        ELSE
            statPosR := statPosR - tempDelta;
        END_IF;
        statPosR := LIMIT(IN := statPosR, MN := 0.0, MX := 100.0);
    END_IF;
END_IF;

Pos := REAL_TO_INT(statPosR);

END_FUNCTION_BLOCK

Bei 1 Sekunde Fahrzeit musst du dir dann schon eine andere Taktflanke bilden, z.B. 0,2 Sekunden.
Bei 1 Sekunde Laufzeit ändert sich "Pos" dann eben in Sprüngen von 20%.
Wenn das nur zur Simulation ist, dann kannst du auch die Laufzeit künstlich verlängern damit man überhaupt etwas sieht.
 
Puhhh, was ist das denn :D Gibts das auch irgendwo in FUB? Bin aufgeschmissen, wenn ich dazu was gefragt werde :D
Ja der Knackpunkt an dem ganzen ist, dass es als Simulation UND auch mit der Anlage funktionieren soll.... Mit Hardware wäre mein Zylinder in der Anlage ausgefahren, bei Runtime jedoch noch lange nicht :/
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst ja die Laufzeiten an den Zylindern umschalten, speicherst dir im Programm die realen Zeiten und die für die Simulation, und schaltest du Werte dann um. Wenn Anlage live dann werden die echten gemessenen / angenommenen Laufzeiten angenommen, für die Simulation setzt du dann andere Laufzeiten. Die Schrittweite wird in dem FB ja passend berechnet.

Den Code kannst du problemlos auch in FUP umsetzen, sind auch nur 3 oder 4 Netzwerke. Aber SCL kann ich so runtertippen ohne weiteren Editor ;-)
 
Vielen Dank erstmal, ich werde es morgen mal ausprobieren und evtl. nochmal melden :D Gerade erst nach bestimmt 4h gemerkt, dass der Erfassungszyklus daran schuld war, dass alles an Leuchten welche an einem Taktmerker waren nicht funktioniert hat :D Eine noch abschweifende Frage, kann man Objekte in WinCC drehen? Also die 90° habe ich gefunden, aber 45° wären was feines :D
 
Vielen Dank erstmal, ich werde es morgen mal ausprobieren und evtl. nochmal melden :D Gerade erst nach bestimmt 4h gemerkt, dass der Erfassungszyklus daran schuld war, dass alles an Leuchten welche an einem Taktmerker waren nicht funktioniert hat :D Eine noch abschweifende Frage, kann man Objekte in WinCC drehen? Also die 90° habe ich gefunden, aber 45° wären was feines :D

Drehen geht nicht.
Wenn du das willst, dann musst du dir mit einem externen Programm Bilder für z.B. 0, 30, 60, 90 Grad machen.
Die Einzelbilder packst du dann in eine Grafikliste.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst du mal bitte drüber schauen, ob ich den SCL Code in etwa richtig verstanden habe? Was danach kommt mit dem Limit, bin ich absolut ratlos :(Zylinder 1.PNGZylinder 2.PNGZylinder 3.PNG
Du kannst ja die Laufzeiten an den Zylindern umschalten, speicherst dir im Programm die realen Zeiten und die für die Simulation, und schaltest du Werte dann um. Wenn Anlage live dann werden die echten gemessenen / angenommenen Laufzeiten angenommen, für die Simulation setzt du dann andere Laufzeiten. Die Schrittweite wird in dem FB ja passend berechnet.

Den Code kannst du problemlos auch in FUP umsetzen, sind auch nur 3 oder 4 Netzwerke. Aber SCL kann ich so runtertippen ohne weiteren Editor ;-)
 
Die Stellungsänderung beim Auf- und Zufahren musst du noch mit der Taktflanke ver-und-en.
Limit sollte es als Funktion in der Bibliothek geben, neue Box einfügen und in die Fragezeichen "LIMIT" eingeben sollte bei TIA funktionieren.
Du kannst dir den Limit aber auch mit zwei Vergleichern >100.0 und <0.0 und danach jeweils eine Move-Box selber zusammenstellen.
 
Wenn du mehr als einen Zylinder hast, dann ist es auch sinnvoll diese Funktionalität in einen eigenen FB zu packen den du öfters verwenden kannst. Oder wenn du schon einen FB für einen Zylinder zur Ansteuerung und ggf. Laufzeitüberwachung hast, kannst du es auch dort integrieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Stellungsänderung beim Auf- und Zufahren musst du noch mit der Taktflanke ver-und-en.
Limit sollte es als Funktion in der Bibliothek geben, neue Box einfügen und in die Fragezeichen "LIMIT" eingeben sollte bei TIA funktionieren.
Du kannst dir den Limit aber auch mit zwei Vergleichern >100.0 und <0.0 und danach jeweils eine Move-Box selber zusammenstellen.

Was versteht man unter ver-en? Die Taktflanke als eingansbedingung in den ersten beiden Netzwerken? Zylinder 4.PNG müsste der richtige sein? Lese mich da gleich mal von der Funktion ein. Was versteht man in der Regel unter "statPosR" und "tempDelta" ? Hört sich wie 2 gängige Begriffe an. In meine Taktflanke muss ich doch jetzt noch einen Taktmerker schrieben, nicht? Also z.B.
M100.5 = Taktflanke ?
 
ver-und-en war umgangssprachlich für logisch UND verknüpfen. Das ist kein fester Begriff, kannst du gleich wieder vergessen ;-)

Variablen in dem Stat-Bereich eines FBs mit "stat" und im Temp-Bereich mit "temp" beginnen zu lassen stand in einer Coding-Richtlinie für das TIA Portal. Kann man sich dran halten, muss man aber nicht. So wie du das in einem Global-DB mit der Bezeichnung verwendet hast, ergibt das logisch keinen Sinn. Ich verwende das gerade hier im Forum für kurze Codeschnippsel gerne, wenn man nicht den Deklarationsbereich mit dazu schreibt. Dann kann man daraus schließen, in welchem Speicherbereich die Variable liegen sollte.

Du kannst die Taktflanke verwendet du du so wie ich das verstanden habe schon hattest. An die Taktflankenzeit musst du dann die Zeit parametrieren in der deine Taktflanke kommt. Hast du überhaupt verstanden wie das funktioniert?
 
Also was ich wie gesagt vorher mit Taktmerkern versucht hatte, ging komplett nach hinten los. Naja, also ich versuche mir da aktuell eher etwas zusammen zu reimen, wenn ich ehrlich bin. Teilweise habe ich es verstanden, aber wiedergeben könnte ich es noch lange nicht. Bisher kenne ich Takte nur ausschließlich mit Taktmerkern. Hatte auch zuvor noch nie mit DBs gearbeitet, nur soll wohl die Zukunft sein. Groß weiter als heute morgen bin ich in dem Thema noch nicht, habe das was ich an Screenshots gemacht habe und den statPosR von Real in Int Convertiert und in Pos. geschrieben. Das mit der Taktflanke ist die aktuelle Baustelle. In meinem DB hatte ich das wie folgt angelegt, falls es überhaupt richtig ist.DB Animation.PNG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe ich das dann so richtig verstanden? Aus und einfahren.PNG
Die Stellungsänderung beim Auf- und Zufahren musst du noch mit der Taktflanke ver-und-en.
Limit sollte es als Funktion in der Bibliothek geben, neue Box einfügen und in die Fragezeichen "LIMIT" eingeben sollte bei TIA funktionieren.
Du kannst dir den Limit aber auch mit zwei Vergleichern >100.0 und <0.0 und danach jeweils eine Move-Box selber zusammenstellen.
 
Ja, das sollte so funktionieren, wenn das wirklich eine Flanke ist die nur für einen Zyklus ansteht.

Noch zur Funktion:
Wenn dein Zylinder 10 Sekunden für 0 auf 100 % benötigt, und du eine Taktflanke von z.B. 0,5 Sekunden hat, dann ändert sich die Stellung je 0,5 Sekunden um 100.0 % / (10 s / 0,5 s) = 5 %.
 
Habe jetzt aktuell an meiner Taktflanke einen Taktmerker von 1Hz anliegen. Mein Wert in Pos. ändert sich Schlagartig :/ Anfangs ist er bei 10, warum auch immer und sobald eine Endlage verlassen wird, ist er direkt auf 100.... Würde es dir was ausmachen, wenn ich dir das Programm mal schicke? Meine Projektteam sagt mir schon die ganze Zeit, ich solle diese Animation einfach weg lassen....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe kein TIA V16. Sind deine Endlagen denn Schließer oder Öffner? Du kannst die Auswertung mit den Endlagen auch erst mal weglassen, Zylinderlaufzeit auf z.B. 100 Sekunden setzen, dann sollte bei 1 Sekunde Taktflanke in 1% Schritten gezählt werden wenn der Ansteuerausgang gesetzt oder nicht gesetzt ist. Das solltest du auch selber hinbekommen.
 
Es sind Schließer, die Laufzeit lege ich ganz am Anfang mit dem MOVE Baustein feste, oder? Also da habe ich aktuell ja 100. Seitdem ich den FB geladen habe, wird auch mein Zylinder die ganze Zeit angesteuert, auch wenn ich eine 0 in das komplette Byte schreibe. Animation zylinder.jpgPosition.PNG Ich denke, dass es der Taktmerker ist der die Probleme macht.
 
Zurück
Oben