WinCC Flex - Variable initialisieren

ssound1de

Level-2
Beiträge
351
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

WinCC Flex 2007 PC-RT.
Gibt es irgendein Startereignis oder eine Startroutine, die beim Runtime-Start aufgerufen wird (ähnlich wie OB100-102 bei S7)?

Hintergrund ...
Ich möchte beim Start der RT eine Flexinterne Stringvariable mit einem festen String belegen (also Startwert).
Startwert geht aber leider nur mit nummerischen Variablen.

Danke für Eure Hilfe.
Gruß
 
hallo ssound1de,
mach das doch in einen Script, das du einmalig aufrufst. Ich habe z.b. eine
Initalisierungscript. Ich habe auf den Startbildschirm eine unsichtbare
Schaltfläche, drücke ich diese Schaltfläche verzweige ich in die Bearbeitung
und komme nicht zurück zum Startbildschirm. Gleichzeitig rufe ich beim
Tastendruck das Ini-Script auf wo ich die Voreinstellung für die HMI
mache. Hier kannst schnell Variabeln einen bestimmten Wert zuweisen,
auch Stringvariabeln.
Das starten des Scriptes lässt sich bestimmt auch auf andere weise, nur
einmal aufrufen.

gruß helmut
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Würde dies auch über ein Script machen, entweder so Helmut_von_der_Reparatur sagt oder über den Aufgabenplaner und bei der Aktion Start Runtime das Script ausführen.
 
Sorry, aber irgendwie kann ich dir da nicht folgen.
IniScript ist klar.

Ich habe auf den Startbildschirm eine unsichtbare
Schaltfläche, drücke ich diese Schaltfläche verzweige ich in die Bearbeitung
und komme nicht zurück zum Startbildschirm.

Wie soll ich eine unsichtbare Schaltfläche drücken? :confused:
Und machst du einen Bildwechsel? -> Du schreibst: 'Komme nicht zurück zum Startbildschirm'

Gleichzeitig rufe ich beim
Tastendruck das Ini-Script auf wo ich die Voreinstellung für die HMI
mache.

Bei welchem Tastendruck? :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, aber irgendwie kann ich dir da nicht folgen.
IniScript ist klar.



Wie soll ich eine unsichtbare Schaltfläche drücken? :confused:
Und machst du einen Bildwechsel? -> Du schreibst: 'Komme nicht zurück zum Startbildschirm'



Bei welchem Tastendruck? :confused:

also, auf meine Startseite, das ist die Seite die Flexibel nach dem
Hochlauf als erstes aufruft, ist nur unser Firmenlogo mit Adresse und
Telefon Nr, so als Werbung. Diese brauche ich dann auch nicht mehr.
Auf diesen Bild Bildschirm habe ich eine Schaltfläche gelegt und deren
Eigenschaften als "Unsichbar" gemacht. Das heißt in der Runtime sehe
ich später das Firmenlogo aber nicht die Schaltfläche. Wenn der Bediener
jetzt auf den Bildschirm diese unsichtbare Schaltfläche drückt, wird das
Ini-Skript aufgerufen und ich verzweige auf meine "Home" seite.
In der Bildnavigation gibt es dann kein zurück mehr, zu diesen Start-
bildschirm.

Mit den Aufgabenplaner das Skript aufrufen mache ich mit Absicht nicht,
wenn jetzt die SPS noch nicht hochgelaufen ist, bei uns oft eine Soft-
SPS, können die Variabeln nicht in der Steuerung Aktualisiert werden.
 
... und wenn du nicht auf die Schaltfläche drücken möchtest sondern willst, dass es von selber weiter geht, dann könntest du z.B. irgendein Objekt (z.B. ein Rechteck) dort einbauen, dass von einem Blinkmerker der SPS (Takt 0.5 Hz) animiert wird. Diese Variable darf aber dann nur auf diesem Bild verwendet werden - an diese hängst du dann dein Startscript an die Wertänderung und machst dann alles Weitere inklusive des Aufrufs der eigentlichen Haupt-Bildschirmseite.

Gruß
Larry
 
... und wenn du nicht auf die Schaltfläche drücken möchtest sondern willst, dass es von selber weiter geht, dann könntest du z.B. irgendein Objekt (z.B. ein Rechteck) dort einbauen, dass von einem Blinkmerker der SPS (Takt 0.5 Hz) animiert wird.
Oder ein Bildwechsel durch die SPS ansteuern über den Steuerungsauftrag.
Das Skript wird dann mit dem Ereignis > Bild abbauen ausgeführt.
 
Ich habe es über Startbild->Ereignisse-> Aufgebaut und dann das Script ausführen lassen gelöst.

Hierbei sollte dann nur beachtet werden, dass das Script bei jedem Aufruf des Startbildes aufgerufen wird. Das ist (zumindestens bei mir) nicht gewünscht.
In meinem (und ganz sicher auf im Fall von Helmut) ist es so, dass dieses "Startbild" (also die erste Seite) nur ein einziges Mal - nämlich beim Start der Visu - aufgerufen wird und danach dann nicht wieder (bis zum nächsten Start der Visu).

Gruß
Larry
 
Scriptausführung verriegeln

Hierbei sollte dann nur beachtet werden, dass das Script bei jedem Aufruf des Startbildes aufgerufen wird. Das ist (zumindestens bei mir) nicht gewünscht.
Das Initialisierungsscript kann sich ja selbst verriegeln und am Ende eine panel-interne Variable "Init_complete"
auf 1 setzen, deren Startwert 0 ist. Das Script fragt am Anfang ab, ob diese Variable = 0 ist und führt den Code
nur dann aus. Das Script wird zwar bei jedem Startbild-Aufruf aufgerufen, der Initialisierungscode wird dann aber
nur einmal ausgeführt.

Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@PN/DP:
Im Grundsatz hast du Recht - ich scheue mich aber ein bißchen Scripte unnötig aufzurufen - ist aber hier vielleicht nicht so das Thema ...

Gruß
Larry
 
damit das script nur einmalig ausgeführt wird, habe ich eine interne bit-variable ("gestartet") verwendet, die im script als verriegelung dient:

if gestartet = 0 then
gestartet = 1
... (hier den einmailg auszuführende code eintragen)
end if

das "gestartet" bleibt eins bis die hmi beendet wird. damit wird das script nur einmalig ausgeführt.

um einen scriptlauf beim hochfahren der hmi zu erreichen hab ich den bereichszeiger "koordinierung" verwendet. darin ist ein bit (.0) das den start der runtime anzeigt. dieses bit hab ich als variable eingefügt und das script an die wertänderung geknüpft. funktioniert tadellos. sobald die hmi (und die sps) hochlaufen wird das script einmalig ausgeführt.
 
Hab jetzt auch noch ne Idee.

Mein Startbild ist bei mir auch mein Grundbild (es wird also über die 'Home' Schaltfläche immer wieder aufgerufen).

Ich erstelle also eine flexinterne BoolVar mit Namen z.B. 'Init'.
Mit dem Ereignis Grundbild 'Aufgebau' setze ich 'Init' auf True.
Mit Wertänderung von 'Init' rufe ich mein Initialisierungsscript auf.

'Init' ändert sich also nur beim allerersten Grundbild-Aufruf nach Runtime-Start. Das Initialisierungsscript wird also nur 1x aufgerufen.

Sollte eigentlich funzen, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit dem Ereignis Grundbild 'Aufgebau' setze ich 'Init' auf True.
Mit Wertänderung von 'Init' rufe ich mein Initialisierungsscript auf.
[...]
Sollte eigentlich funzen, oder?
Probiere es doch einfach aus...

Ich meine aber, das wird NICHT funktionieren, da bei einer Panel-internen Zuweisung eines
Wertes an eine Variable das Ereignis "Wertänderung" nicht ausgelöst wird (loop breaker).

Gruß
Harald
 
Bei internen Variablen werden keine Ereignisse ausgewertet.
Das stimmt so allerdings nicht.

Ob das Ereignis "Wertänderung" ausgelöst wird oder nicht hat mit der Art und Weise der Wertänderung zu tun
und nicht damit, ob es eine interne oder eine SPS-Variable ist.

Wird der Wert der internen Variable oder SPS-Variable durch eine Eingabe in einem E/A-Feld verändert
(oder ändert sich der Wert einer SPS-Variable in der SPS), dann wird das Ereignis "Wertänderung" ausgelöst.
Ganz sicher: auch wenn es eine Panel-interne Variable ist, die per E/A-Feld verändert wird.

Wird der Wert der Variable durch eine Panel-interne Zuweisung geändert (in einem Script oder durch eine
Funktion in der Funktionsliste), dann wird das Ereignis "Wertänderung" nicht ausgelöst.

Dieses Verhalten hat Siemens als sogenannter loop breaker in WinCC flexible eingebaut, damit die dummen
Programmierer keine geschlossenen Wertänderungs-Ereignis-Kreise erzeugen können (so wie die verbotenen
Zirkelbezüge in Excel).
Z.B. Variable A ändert sich -> Ereignis: ändere Variable B -> Ereignis: ändere Variable A -> Ereignis: ...

Über externe SPS-Variablen können aber unter Mithilfe der SPS solche Ereigniskreise erzeugt werden.
Das kann man z.B. nutzen um die Kommunikationsgeschwindigkeit Panel-SPS zu messen.

Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das stimmt so allerdings nicht.

Ob das Ereignis "Wertänderung" ausgelöst wird oder nicht hat mit der Art und Weise der Wertänderung zu tun
und nicht damit, ob es eine interne oder eine SPS-Variable ist.

Wird der Wert der internen Variable oder SPS-Variable durch eine Eingabe in einem E/A-Feld verändert
(oder ändert sich der Wert einer SPS-Variable in der SPS), dann wird das Ereignis "Wertänderung" ausgelöst.
Ganz sicher: auch wenn es eine Panel-interne Variable ist, die per E/A-Feld verändert wird.

Wird der Wert der Variable durch eine Panel-interne Zuweisung geändert (in einem Script oder durch eine
Funktion in der Funktionsliste), dann wird das Ereignis "Wertänderung" nicht ausgelöst.

Dieses Verhalten hat Siemens als sogenannter loop breaker in WinCC flexible eingebaut, damit die dummen
Programmierer keine geschlossenen Wertänderungs-Ereignis-Kreise erzeugen können (so wie die verbotenen
Zirkelbezüge in Excel).
Z.B. Variable A ändert sich -> Ereignis: ändere Variable B -> Ereignis: ändere Variable A -> Ereignis: ...

Über externe SPS-Variablen können aber unter Mithilfe der SPS solche Ereigniskreise erzeugt werden.
Das kann man z.B. nutzen um die Kommunikationsgeschwindigkeit Panel-SPS zu messen.

Gruß
Harald
Tatsache.
Wird die interne Var über E/A-Feld geändert, wird 'Wertänderung' ausgelöst.
Wird die interne Var über Script geändert, wird 'Wertänderung' nicht ausgelöst. Könnte (wie du beschrieben hast) je nach Verwendung zum Stack Overflow führen.
 
Hallo Harald,
ergehen wir uns jetzt in Spitzfindigkeiten ?

deine Aussage war :
... Ich meine aber, das wird NICHT funktionieren, da bei einer Panel-internen Zuweisung eines
Wertes an eine Variable das Ereignis "Wertänderung" nicht ausgelöst wird (loop breaker).

darauf hin schrieb ich (um deine Aussage zu bestätigen) :
deine Vermutung ist korrekt ...
Bei internen Variablen werden keine Ereignisse ausgewertet.

Dumm war natürlich, dass ich da etwas ungenau war bezüglich des Ereignisses - allerdings war das mit der Tastatureingabe hier nicht gefragt gewesen und auch nicht Bestandteil des bisherigen Kontextes.
Die Begründung des warum es geht bei einer Tastatur-Eingabe und warum nicht bei einer Wert-Änderung über Script halte ich aber für etwas dürftig. Professionelle Programme (so wie z.B. Visual-Studio) können so einen "Zirkel-Bezug" auch sofort erkennen. Abgesehen davon würde es ja nur zu einem Script-Überlauf führen, der sich ja auch mit einem "Loop-until-forever"-Script machen liesse und das wird auch nicht abgefangen ...


@SSound:
Auf diese Weise solltest du keinen Stack-Overflow bekommen.
Hattest du diese Meldung auf der visu schon mal ?

Gruß
Larry
 
Zurück
Oben