TIA Skript für zyklische Abarbeitung einer Grafikliste

TIAISM

Level-1
Beiträge
100
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hello Forum,

mein Ziel ist eine Grafikliste "Sanduhr" mit insgesamt 8 Grafiken zyklisch durchlaufen zulassen.
Das erzeugt den Effekt des Sandflusses.

Ich habe also ein grafisches EA-Feld angelegt und die Grafikliste hinterlegt.

Ich versuche gerade ein Skript zu schreiben, mit dem ich eine interne HMI-Variable (int) hochzähle. Diese
interne Variable läuft dann durch meine Grafikliste und blendet die entsprechenden Bilder ein.

Dieses Skript soll solange laufen wie eine Bool Variable von der SPS aktiv ist. Sobald sie nicht mehr aktiv ist,
soll das Skript beendet werden.

Hat da jemand eine Idee?

mein aktuelles Skript (beim ausführen hängt sich der Skriptserver auf):

BOOL bTAG_GET;
bTAG_GET = GetTagBit("tag_4");

printf("VOR WHILE\r\n");

while (bTAG_GET == 1)
{
SetTagSWord("INTERN_SANDUHR",1);
printf("SANDUHR = 1\r\n");
WaitMS(1000);
SetTagSWord("INTERN_SANDUHR",2);
printf("SANDUHR = 2\r\n");
WaitMS(1000);
SetTagSWord("INTERN_SANDUHR",3);
printf("SANDUHR = 3\r\n");
WaitMS(1000);
SetTagSWord("INTERN_SANDUHR",4);
printf("SANDUHR = 4\r\n");
WaitMS(1000);
SetTagSWord("INTERN_SANDUHR",5);
printf("SANDUHR = 5\r\n");
WaitMS(1000);
SetTagSWord("INTERN_SANDUHR",6);
printf("SANDUHR = 6\r\n");
WaitMS(1000);
SetTagSWord("INTERN_SANDUHR",7);
printf("SANDUHR = 7\r\n");
WaitMS(1000);
SetTagSWord("INTERN_SANDUHR",0);
printf("SANDUHR = 0\r\n");
WaitMS(1000);
}
printf("NACH WHILE\r\n");
SetTagByte("INTERN_SANDUHR",0);

return(bTAG_GET);
 
Das sieht mir nach WinCC 7.x oder TIA WinCC Prof. aus.
Du hast da eine Endlosschleife gebaut. bTAG_GET wird nur einmal gelesen, und wenn es den Wert 1 hat dann steckt dein Skript in deiner Endlosschleife, weil bTAG_GET sich innerhalb der while-Schleife nie mehr ändern wird.

Ich würde es anders machen. Und zwar eine globale Variable wie "Animation_1s_0bis7", die über ein globales Skript eben über einen Sekundentrigger von 0 bis 7 zählt.
Diese kannst du dann überall verwenden wo du diese benötigst, z.B. an deiner Sanduhr.
Als Zusatz musst du deine Sanduhr dann nur noch mit deiner weiteren Bedingung ein- und ausblenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jepp: TIA V14 SP1 WinCC Prof

Ey klingt voll gut! Hab noch nicht so viel mit C-Skripten gemacht.. Sry für den groben Fehler :ROFLMAO:
Ich bin davon ausgegangen, wenn sich bTAG_GET auf 0 ändert verlässt er die While-Schleife lol

Meinst du mit "globale Variable" eine interne Variable?

hm.. Dann würde mein Skript ja nur einmal durchlaufen.. Es sei denn ich trigger es erneut an.
Ich möchte das Skript unte
 
Meinst du mit "globale Variable" eine interne Variable?

hm.. Dann würde mein Skript ja nur einmal durchlaufen.. Es sei denn ich trigger es erneut an.

Ja, interne Variable, z.B. 16 Bit mit Vorzeichen.
An deinem Grafikobjekt brauchst du dann kein Skript mehr. Die Variable zählt im Hintergrund (d.h. das Global-Script was du noch schreiben musst) automatisch von 0 bis 7, und sorgt so dafür, dass sich das Bild kontinuierlich ändert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, im TIA-Portal finde ich leider kein Trigger für C-Skripte..
Also ich weiß nicht wie es möglich ist ein Skript dauerhaft im hintergrund laufen zu lassen..
Was bedeutet, dass ich das C-Skript irgendwo hinterlegen muss..
 
Ich habe das mal getestet.

ich habe das Skript jetzt im Aufgabenplaner angelegt.
Als Trigger habe ich 2s eingestellt. Das Skript läuft also global im Hintergrund meines Projektes.
Es funktioniert auch wunderbar, die Sanduhr dreht sich und das sieht schon ziemlich knusprig aus *vde*

Allerdings verwende ich Skripte die über Objekte ausgeführt werden z.B Home Funktion, Menüaufschaltung Funktion, Meldetexte bei Betätigen
von Objekten zum loggen etc. Die Performance leidet also extrem, sobald ich das neue Skript im Aufgabenplaner ausführe. Es fühlt sich so an, als
könnte der Skript Server des WinCC nur ein Skript ausführen.

Leider ist es für mich so nicht realisierbar, weil das ganze System höchst unperformant ist.

Danke
 
Am besten Wert gleich in der SPS hochzählen und damit Grafikliste steuern.
Das geht dann auch bei WinCC flexible und verursacht keine Performanceverluste.
 
Zurück
Oben