Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: WinCC Flex - Variable initialisieren

  1. #11
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    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
    Zitieren Zitieren Scriptausführung verriegeln  

  2. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    ssound1de (30.07.2010)

  3. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    @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

  4. #13
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard

    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.

  5. #14
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    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?

  6. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von ssound1de Beitrag anzeigen
    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

  7. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    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).
    deine Vermutung ist korrekt ...
    Bei internen Variablen werden keine Ereignisse ausgewertet.

  8. #17
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    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

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    ssound1de (02.08.2010)

  10. #18
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    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.

  11. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo Harald,
    ergehen wir uns jetzt in Spitzfindigkeiten ?

    deine Aussage war :
    Zitat Zitat von PN/DP Beitrag anzeigen
    ... 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) :
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    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

  12. #20
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Auf diese Weise solltest du keinen Stack-Overflow bekommen.
    Hattest du diese Meldung auf der visu schon mal ?
    Nö. Ich kenn das eher von VB bei rekursiven Funktionsaufrufen, die (wenn nicht entsprechend abgesichert) zu einem Stack-Overflow führen können.

Ähnliche Themen

  1. WinCC-Flex Variable
    Von IceBear im Forum HMI
    Antworten: 16
    Letzter Beitrag: 11.02.2011, 10:33
  2. Antworten: 3
    Letzter Beitrag: 06.02.2009, 14:19
  3. WinCC flex Variable statisch in DB schreiben
    Von geduldiger im Forum HMI
    Antworten: 14
    Letzter Beitrag: 05.07.2007, 13:56
  4. WinCC flex Variable, Struktur, Array
    Von xhasx im Forum HMI
    Antworten: 3
    Letzter Beitrag: 11.06.2007, 16:30
  5. Antworten: 11
    Letzter Beitrag: 17.12.2006, 13:45

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •