TIA TIA Pro V15:Objektbewegung individualisieren -> C Script, Schleifen

Lars385

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA Pro V15:Objektbewegung ->WinCC RT Professional C Script, Schleifen

Hallo Community,

Ich bin recht neu in der SPS-Welt. Ich möchte gerne ein Objekt in einem Bild individuel bewegen.

Ich nutze dazu ein C Script für die Dynamisierung der X und Y Position. Dazu haben ich mir Schrittweiten für die x- und y-Werte überlegt und diese manuel in ein Int Array geschrieben.
Die Inhalte des Array wollte ich der Position übergeben, leider findet keine Inkremetierung in den Schleifenfunktionen statt.

Code:
long position_y = GetTop("Beobachten","Kreis_21"); //Internal Tag    
int takt = GetTagWord("takt");
int i = 0;
int verlauf[36] = {424,417,410,403,396,389,382,375,368,361,368,375,424,417,410,403,396,389,382,375,368,361,368,375,424,417,410,403,396,389,382,375,368,361,368,375};
        

    while(GetTagBit("lampe_An") == 1 && i < 36)
    {      printf("position_y = %i\n, takt = %i\n" ,position_y, takt);
            position_y = verlauf[i];
            return position_y;
            i++;
    }//End while
}
funktioniert nicht, i wird nicht inkrementiert. Selbes auch in einer For-Schleifenversion.

Selbst einfache Schleifen funktionieren nicht, i wird nicht inkrementiert:
Code:
int i;
for(i=0;i<36;i++)
{
    position_y = i;
    return position_y;
}

Nur sowas wie "position = position +10" funktioniert.

Was mache ich falsch?

Danke und schöne Grüße!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke erstmal, dass du dich bemühst.

Komisch ist, dass funktionen wie folgendes funktionieren:

Code:
int i=0;
While(GetTagBit("lampe_An") == 1)
{
 position = position +20;
 return position;
}

Der Code läuft bis die lampe ausgeschaltet wird.
Ersetze ich aber 20 durch eine Variable, die inkrementiert werden soll, tut sich nichts mehr.

Was müsste ich anstelle von return eintragen?

MFG.
 
Deine While Schleife wird auch dort abgebrochen.
Die Funktion wird nur immer wieder aufgerufen. Warscheinlich an einem Objekt eingefügt?
Ein If würde an der stelle genauso funktionieren.

Man kann die spezifische Dynamisierung immer nur mit einem Return verändern. Das heisst das was du vorhast geht nicht.
Mit einem Skript von aussen üder den Taskplaner könnte man deine Funktion realisieren.

Vielleicht geht es auch mit "static int i" usw. Hab ich noch nie getestet.
 
Ich habs gelößt: Falls es jemand interessiert:

ich habe das Script selbst als Dauerschleife betrachtet und gebe den Takt über die SPS vor.

Danke für den Tip mit return! Ich werd das Ganze sicher nochmal als globales Script versuchen, wenn ich zeit habe, und dann sowas wie "SetTop" benutzen. Das müsste es ja eigentlich geben, wenn es GetTop gibt, oder?
 
Zurück
Oben