WinCC flexible Skript beim Bildabbau beenden

philippD

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe folgendes Problem:
Wir wollen ein Skript realisieren, dass nach X Minuten auf das Hauptbild zurückwechselt. Die Minuten sind dabei einstellbar, ebenso ob das Skript überhaupt aktiv sein soll oder nicht. Das funktioniert soweit auch alles. Es ist allerdings so, dass das Skript beim Bildabbau scheinbar nicht beendet wird. Das zieht das Problem nach sich, dass die Umschaltezeit im HIntergrund weiter läuft. Kommt der Bediener also wieder zurück auf das Bild, dann lief der Counter bereits schon und es bleiben nicht die eingestellten Minuten bis zum nächsten Bildwechsel. Das ganze Problem würde sich beheben lassen, wenn das Skript bei jedem Bildabbau beendet werden würde und/oder bei jedem Bildaufbau neugestartet werden würde. Leider finde ich keine Lösung dazu. Weiß jemand Rat?

Code:
If ZZ_UMSCHALT_STATUS = True Then
 
'Lokale Variable
Dim Umschaltzeit

'Variable zur aktuellen Zeit addieren
Umschaltzeit = DateAdd ("s",ZZ_UMSCHALTZEIT,Time) 

'Vergleich der beiden Zeiten bis die aktuelle Zeit > der Umschaltzeit ist
Do Until DateDiff ("s",Time,Umschaltzeit) <= 0

 ZZ_UMSCHALTZEIT_AUSGABE = DateDiff("s",Time,Umschaltzeit)
 
Loop

'Aktiveren des Hauptbildes
ActivateScreen "ST_0001_OVERVIEW_TOTAL_GENERATOR",0
'Ende des Scripts

Else
 Exit Sub
End If
 
Hallo,
einen Loop in einem Script auszuführen halte ich für mehr als bedenklich.
Mein Vorschlag :
Du baust dir mit dem Aufgabenplaner eine Aufgabe, die jede Minute aufgerufen wird. Hier zählst du deine Flex-interne Variable, die du mit dem Aufrufen der Bildschirmseite setzt herunter. Ist sie <= 0 dann führst du die gewünschte Aktion aus.
Also nicht mit einer im Script dimensionierten Variablen arbeiten sondern mit einer von Flex (allerdings einer internen, die keine Anbindung zur SPS hat).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mit dem aufgabenplaner ginge es sicherlich auch.
ich würde beim bildaufbau eine variable in der steuerung setzen. dort die zeit ablaufen lassen.
wenn zeit abgelaufen das gewünschte bild anspringen.
wird das bild vor ablauf der zeit verlassen bei bildabbau dir var die bei bildaufbau gesetzt wurde zurücksetzen.
das ganze funtz ohne script
 
Hallo,

danke für die Antworten.

Hier zählst du deine Flex-interne Variableherunter

Wie genau zähle ich die Variable herunter? Mit "VerringereWert" ?


die du mit dem Aufrufen der Bildschirmseite setzt

Wie kann ich die Variable denn setzen? Ich will die Minutenanzahl vorher schon global festlegen und auch wieder ändern können (im Eisntellungsmenü).

Ist sie <= 0 dann führst du die gewünschte Aktion aus.

Das geht dann aber wieder über ein Skript oder?

VIele Fragen, vermutlich auch Anfängerfragen. Hatte bisher aber sehr wenig mit der Materie zu tun ;)
 
Wie genau zähle ich die Variable herunter? Mit "VerringereWert" ?
Das geht auch als "myZeitwert = myZeitwert -1", da wir ja insgesamt von einem Script im Aufgabenplaner reden - also etwa so :
Code:
if (myZeitwert > 1) then myZeitwert = myZeitwert -1

Wie kann ich die Variable denn setzen? Ich will die Minutenanzahl vorher schon global festlegen und auch wieder ändern können (im Eisntellungsmenü).
Entweder in enem Script, wie du es schon gemacht hast mit "myZeitwert = 7" (für 7 Minuten) oder mit der Einzel-Funktion (die könnte SetzeWert heissen).

Das geht dann aber wieder über ein Skript oder?
Ja ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

danke für deine Tipps. Hier mal so wie ich das jetzt umgesetzt habe:

---
* Aufgabenplaner ruft das Skript jede Minute auf

* bei "Bildufbau" habe ich diese Funktion gesetzt:
SetzteWert
Variable: Umschaltzeit_Skript
Wert: Umschaltzeit

Die Variable "Umschaltzeit" kann in einem anderen Bild vom Bediener beliebig gesetzt werden
Die Variable "Umschaltzeit_Skript" übernimmt diesen Wert und reicht ihn an das Skript weiter

Durch die Funktion "SetzeWert" bei jedem Bildaufruf, läuft der Timer bei jedem Bildaufruf von neuem los.

Das Skript schaut so aus:

Code:
If (ZZ_UMSCHALTZEIT_STATUS) = True Then

    If (ZZ_UMSCHALTZEIT_SKRIPT >= 1) Then ZZ_UMSCHALTZEIT_SKRIPT = ZZ_UMSCHALTZEIT_SKRIPT -1


    If (ZZ_UMSCHALTZEIT_SKRIPT = 0) Then ActivateScreen "ST_0001_OVERVIEW_TOTAL_GENERATOR",0

Else
End If

Die Variable "Umschaltzeit_Status" kann vom Bediener ebenfalls gesetzt werden. Damit lässt sich die Funktion aktivieren bzw. deaktivieren.
---

Es funktioniert :) Aber, kann man das so machen oder ist daran noch irgendwas ungünstig?
 
Hallo,

ich hatte es dir vorgeschlagen, weil ich das für eine ähnliche Funktion so mache.
Bei dir wird allerdings das Bild "ST_0001_OVERVIEW_TOTAL_GENERATOR" nun im Minutentakt immer wieder aufgerufen wenn die Zeit abgelaufen ist. Das würde ich ggf. noch so abändern, dass das nur einmal geschieht. Z.B. mit einer Hilfsvariable, die TRUE ist, wenn die Zielseite sowieso schon aktiv ist und die mit dem Bildaufbau der Seite gesetzt und mit dem Bildabbau zurück-gesetzt wird.

Also vielleicht so :
Code:
If (ZZ_UMSCHALTZEIT_SKRIPT >= 1) Then 
   ZZ_UMSCHALTZEIT_SKRIPT = ZZ_UMSCHALTZEIT_SKRIPT -1
elseif not Aktiv_ST_0001_OVERVIEW_TOTAL_GENERATOR then
   ActivateScreen "ST_0001_OVERVIEW_TOTAL_GENERATOR",0
end if
Gruß
Larry
 
Hi,

vielen Dank für den Hinweis. Hatte ich übersehen bzw. gar nicht mehr drangedacht. Da die Funktion nicht auf allen 60 Bildern aktiv sein soll, ist das sogar zwingend notwendig!

Viele Grüße,
Philipp
 
Zurück
Oben