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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: WinCC flexible 2008 SP2: Skriptausführung Problem

  1. #1
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    374
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe ein Phänomen bei der Ausführung eines Skriptes und komme nun absolut nicht mehr weiter.
    Über das Skript kopiere ich mir externe Variablen auf interne Variablen um. Das Skript funktioniert prima, es sind auch nur 8 einfache Anweisungen.
    Nun möchte ich das Skript ausführen lassen, wenn die Auswahl eines symbolischen E/A-Feldes (drop-down) geändert wurde. Ich habe die Ausführung daher an das Ereignis "Ändern" angebunden. Zur Laufzeit tritt das Phänomen auf, dass die ausgelesenen Variablen nicht beim 1. Ändern, sondern erst beim 2.Ändern aktualisiert werden. Ändere ich die Auswahl des E/A-Feldes und führe das Skript anschließend über eine separate Taste, funktioniert es auch prima.

    Hat jemand eine Idee, was ich da noch falsch mache???

    Danke für Eure Hilfe!
    Step7 V5.5 SP4 HF11
    TIA Portal V14
    WinCC flexible 2008 SP3
    WinCC 7.2 Update 10
    =======================
    Zitieren Zitieren WinCC flexible 2008 SP2: Skriptausführung Problem  

  2. #2
    Registriert seit
    13.10.2007
    Beiträge
    12.033
    Danke
    2.788
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Das ganze ist nicht ganz umproblematisch, wie
    hast du die Aktualisierung und leseart der Variabel
    eingestellt.
    Vlt. ist es besser das du die Variabeln oder die
    Adressen Multiplext. Ich glaube es geht dir um das
    PT sparen, da musst du deinen Variabel Haushalt
    schon geschickt anlegen.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  3. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Grimsey (09.05.2011)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    ich könnte mir das, was du schreibst auch problematisch vorstellen.
    Warum machst du es denn nicht über die Wertänderung der an das EA_Feld angebundenen Variablen ? Das geht dann natürlich nur, wenn es eine Steuerungs-Variable ist - aber das wäre m.E. ein geringer Preis für die Funktion.
    ((( so mache ich das und da funktioniert das dann auch )))

    Gruß
    Larry

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Grimsey (09.05.2011)

  6. #4
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    374
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Hallo zusammen,

    danke für Eure Hinweise.
    Es ist schon richtig das ich diese Funktion zum Einsparen von PT nutze. Die Variablen, die ich auf interne Variablen umkopiere, sind bereits Multiplexvariablen. Ich benötige diese aber aus anderen Gründen als interne Variablen. Das tut im Grunde ja auch nichts zur Sache. Das Problem ist ja, dass das Skript scheinbar nicht zu den von mir festgelegten Zeitpunkten ausgeführt wird. (Auswahl im E/A-Feld ändern und Skript über Button ausführen => prima, hänge ich das Skript gleich ans Ereignis "Ändern" des E/A-Feldes geht es nicht).

    @Larry: genau das habe ich auch schon probiert. Leider bleibt da das Phänomen bestehen...ich wähle einen anderen Eintrag aus dem E/A-Feld, die Variable ändert sich, das Skript wird ausgeführt und ich hab aber die Werte vom vorangegangenen Eintrag in der Anzeige und nicht die des aktuellen.
    Betätige ich anschließend meinen Button zum händischen Ausführen des Skriptes werden mir die korrekten Werte angezeigt.

    Anmerkung: hab gerade in Deinem Beitrag gelesen das es eine Steuerungsvariable sein muss...das ist bei mir "noch" nicht der Fall...werde es gleich mal testen. Danke!

    P.S.: warum geht das nicht mit einer internen Variablen?
    Step7 V5.5 SP4 HF11
    TIA Portal V14
    WinCC flexible 2008 SP3
    WinCC 7.2 Update 10
    =======================

  7. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Zitat Zitat von Grimsey Beitrag anzeigen
    warum geht das nicht mit einer internen Variablen?
    ... weil Siemens das so festgelegt hat um dadurch zu verhindern, das man sich durch Unachtsamkeit ein Zirkel-Aufrufen von Scripten zusammenbaut aus dem man dann nicht mehr herauskommt (der Fachausdruck wäre dann hier "Loop-Breaker").

    Mit einer Steuerungs-Variablen sollte es dann funktionieren ...

    Gruß
    Larry

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Grimsey (09.05.2011)

  9. #6
    Registriert seit
    13.10.2007
    Beiträge
    12.033
    Danke
    2.788
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Die haben das mit den internen Variabeln gesperrt, weil
    du dadurch ein Scriptfeuerwerk auslösen könntest
    was nie endet. Durch die externen hast du da immer
    nich den aktualiesierungstakt von 100ms drin.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  10. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Grimsey (09.05.2011)

  11. #7
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    374
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Ah ok danke! Werds mir mal merken für die Zukunft
    Step7 V5.5 SP4 HF11
    TIA Portal V14
    WinCC flexible 2008 SP3
    WinCC 7.2 Update 10
    =======================

  12. #8
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    374
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard

    kleiner Nachtrag:
    nach dem ich die Variable von intern auf Steuerungsvariable umgestellt habe, hat es leider Gottes immer noch nicht funktioniert. Zur Kontrolle habe ich mir im Skript noch ein Bit gesetzt, welches eine Schaltfläche animiert. Das hat soweit funktioniert. Nach Änderung der Auswahl im symbolischen E/A-Feld wurde die Schaltfläche korrekt animiert, ergo wurde das Skript korrekt ausgeführt.

    Meine eigentlichen Variablen wurden jedoch nach wie vor nicht korrekt aktualisiert. Auch ein experimentieren mit den Aktualisierungsmethoden der Variablen brachte keinen Erfolg.

    Ich habe dann nach etwas überlegen noch folgendes ausprobiert:
    im Skript habe ich mir ganz zu Beginn eine Do...While-Schleife gebaut die bis 100.000 hochzählt. Erst danach kopiere ich die externen Variablen auf die internen um. Ausprobiert und siehe da: es funktioniert!

    Dann bin ich jetzt noch einen Schritt weiter gegangen und habe die Steuerungsvariable, die an die symbolische E/A-Liste gebunden war, wieder auf die interne Variable umgestellt...und auch das funktioniert! Das Skript wird bei Wertänderung der internen Variable auch korrekt ausgeführt. Schlussendlich habe ich die Ausführung des Skriptes nun noch wieder an das Ereignis "Änderung" des symbolischen E/A-Feldes gebunden und auch hier zeigt sich nun ein korrektes Verhalten.

    Für mich stellt sich die Ursache dieses "Phänomen" nun so dar, dass zwar die Adressen meiner Multiplexvariablen geändert wurden, dies wohl aber nicht so schnell ablief wie das Ausführen des Skriptes, welches genau diese Variablen auf interne Variablen umkopiert. Ergo wurden mir immer die falschen alten Werte angezeigt und nicht die aktuellen. Durch die Einbindung der Do...While-Schleife vergeht bis zum Umkopieren mehr Zeit und die Variablen können dann korrekt ausgelesen werden.
    Step7 V5.5 SP4 HF11
    TIA Portal V14
    WinCC flexible 2008 SP3
    WinCC 7.2 Update 10
    =======================

  13. #9
    Registriert seit
    13.10.2007
    Beiträge
    12.033
    Danke
    2.788
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Es kann gut sein (was ich aber nicht belegen kann) das die Variabeln, bei
    Einen relativ kurzen oder schnellen Script nicht zur Steuerung aktuallisiert
    werden und außerhalb des schipptes eine andere Instanz, die im Script
    geänderten Werten mit Steuerungswerten wieder platt macht.

    Ich mache es zb so das ich im Script einen multiplexzeiger Stelle, dann eine
    Zeit warte (bis die Werte aktualisiert werden) und dann den Zeiger auf den
    nächsten wert Stelle, wieder warte usw.

    Für die Zeit Funktion würde ich die systemzeit nutzen, so hast du eine defenierte
    Zeit und musst nicht mit den schleifen schätzen.

    Code:
    'Timer 100 endspricht 1sec.
    Dim StartTime, StopTime, i
    StartTime = Now
    StopTime = StartTime + DelayTime / 24 / 360000
    Do
    Loop Until Now >= StopTime
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  14. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Grimsey (09.05.2011)

  15. #10
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    374
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja das ist gut möglich. Danke für den Tipp mit dem Timer. Werde es die Tage mal ausprobieren.

    Ich hab auch noch ein anderes Problem beim Ausführen eines Skriptes. Damit kopiere ich Array-Variablen hin und her...und da kommt beinahe regelmäßig vor, das ein Teil sauber und schnell abgearbeitet wird, der andere aber nur sehr sehr langsam. Das kann ich mir auch nicht so wirklich erklären.
    Code:
    Dim i,j
    i=0
    j=0
    If SmartTags("FMC\intern\trigger") = True Then
    'Stationswahl-Variablen umkopieren
    For i = 0 To 11 Step 1
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 1")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 1")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 2")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 2")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 3")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 3")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 4")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 4")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 5")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 5")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 6")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 6")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 7")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 7")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 8")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 8")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 9")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 9")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 10")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 10")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 11")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 11")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 12")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 12")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 13")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 13")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 14")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 14")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 15")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 15")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 16")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 16")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 17")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 17")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 18")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 18")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 19")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 19")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 20")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 20")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 21")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 21")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 22")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 22")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 23")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 23")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 24")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 24")(i)
    SmartTags("FMC\extern\Rezepte\multi Array Stationswahl Schritt 25")(i)=SmartTags("FMC\intern\Rezepte\multi Array Stationswahl Schritt 25")(i)
    Next
    
    'Freigabe umkopieren
    For j=0 To 46 Step 1
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 1")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 1")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 2")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 2")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 3")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 3")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 4")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 4")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 5")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 5")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 6")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 6")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 7")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 7")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 8")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 8")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 9")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 9")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 10")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 10")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 11")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 11")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 12")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 12")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 13")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 13")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 14")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 14")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 15")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 15")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 16")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 16")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 17")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 17")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 18")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 18")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 19")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 19")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 20")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 20")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 21")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 21")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 22")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 22")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 23")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 23")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 24")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 24")(j)
    SmartTags("FMC\extern\Rezepte\multi Array Freigaben Schritt 25")(j)=SmartTags("FMC\intern\Rezepte\multi Array Freigaben Schritt 25")(j)
    Next
    
    SmartTags("FMC\intern\trigger") = False
    End If
    Step7 V5.5 SP4 HF11
    TIA Portal V14
    WinCC flexible 2008 SP3
    WinCC 7.2 Update 10
    =======================

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 31.10.2011, 15:07
  2. Antworten: 3
    Letzter Beitrag: 09.09.2011, 14:16
  3. Wincc 2008 flexible 2008 -> mp377
    Von Kanuni1972 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 29.06.2010, 18:53
  4. WinCC flexible 2008
    Von Buffi im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 13.01.2010, 10:59
  5. Antworten: 11
    Letzter Beitrag: 23.01.2009, 21:29

Lesezeichen

Berechtigungen

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