Skripthilfe "if" -> "then" variable

SPSlash

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

bin auf dem Skripte gebiet ziemlicher neuling:

Do Until SmartTags("interne Variablen\viewable_e05")= True
Loop

If SmartTags("interne Variablen\viewable_e05")= True Then
ResetBit SmartTags("interne Variablen\viewable_e1")
End If

Erstens das funktioniert nicht.. ich hab das mal nach meinem Empfinden so programmiert, aber bekomm es nicht zum laufen
Zweitens weiß ich nicht wie ich "oder" da mit reinprogrammiere.

Was ich will:

Wenn Variable: viewable_e05 = 1 ist oder Variable: viewable_e06 = 1, dann soll Variable viewable_e01 zurückgesetzt werden.

Irgendwas fehlt da wohl noch -.-

Falls Interessant: WinCC flexible 08

Danke mal :)
 
Hallo,

das Skript wird aber schon aufgerufen, oder?

Ansonsten Schreibfehler viewable_e01:
Code:
If SmartTags("viewable_e05") or SmartTags("viewable_e06") Then
   ResetBit SmartTags("viewable_e01")
End If
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

also schriebfehler ist nicht drin, skript wird aufgerufen.

Brauch ich das Loop Zeug?

Hab deins einmal mit Loop Zeug probiert und einemal ohne, funktioniert beides nicht...

Das skript ruf ich bereits gleich am anfang auf, also die Variable e05 kann oder wird erst nach paar sekunden gesetzt oder vllt auch garnicht....
 
... also schriebfehler ist nicht drin, ...

Also viewable_e01 und viewable_e1 ist schon ein Unterschied.


Brauch ich das Loop Zeug?

Nein


Das skript ruf ich bereits gleich am anfang auf, also die Variable e05 kann oder wird erst nach paar sekunden gesetzt oder vllt auch garnicht....

Das Skript wird dann genau 1x abgearbeitet und das wars. Am besten Du hängst das Skript bei allen 3 Variablen an das Ereignis "bei Wertänderung". Dann wird es jedesmal bei 0/1-Wechsel aufgerufen.
 
Hallo,
Brauch ich das Loop Zeug?
Nein ... das ist sogar nicht unbedenklich, da bei nicht-erfüllen des Loop das Script angehalten wird und damit dann auch ggf. andere Scripte o.ä. erst gar nicht mehr laufen ...

Das skript ruf ich bereits gleich am anfang auf, also die Variable e05 kann oder wird erst nach paar sekunden gesetzt oder vllt auch garnicht....
Am Anfang heißt was ?
Es wäre schon sinnig, es an die Wertänderung der beteiligten Variablen zu hängen.

Aber ... woher weißt du denn so sicher, dass es 1,) aufgerufen wird und das es 2.) nicht durch eine andere Funktion gleich wieder überlagert wird (z.B. SPS-Programm) ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo vielen Dank schonmal für die Antworten.

Hab es anders gemacht, war ja so viel zu kompliziert. Ich setz einfach jedes mal wenn ich wo draufdrück alle Variablen zurück mit


ResetBit SmartTags("viewable_e1")
ResetBit SmartTags("viewable_e12")
etc.

Jetzt folgende frage:

Und zwar hab in dem VB_Script auch mal was mitner Stopzeit gemacht.
Jetzt hab ich zwei extra Scripte mit jeweils einer Stopzeit drin, wenn das eine Script aktivert wurde so lang das andere noch nicht aktiviert wurde, funktioniert es.
Allerdings wenn ich das eine Aktiviere und das andere auch Aktiv wird, funktioniert es nicht mehr..

die Zeit heißt einmal Stopzeit und das andere mal Stopzeit1

Wieso ist das so?
 
Das eine Script
Dim Stopzeit1

Stopzeit1 = DateAdd("s", 15, Time)

Do Until SmartTags("interne Variablen\viewable_eX") = True
Loop

Do Until DateDiff("s", Time, Stopzeit1) = 0
If SmartTags("interne Variablen\viewable_eX") = False Then
Exit Do
End If
Loop
ResetBit SmartTags("interne Variablen\viewable_eX")

Das andere:

Dim Stopzeit

Stopzeit = DateAdd("s", 10, Time)

Do Until SmartTags("interne Variablen\akutelle_Bildnummer") <> 3
Loop

Do Until DateDiff("s", Time, Stopzeit) = 0
If SmartTags("interne Variablen\akutelle_Bildnummer") = 0 Then
Exit Do
End If
Loop
ActivateScreen "Bereich_1", 0

Also ziemlich ähnlich nur das eine Setzt ein bit zurück und das andere aktiviert ein anderes Bild...

Wo beißen sich die beiden Skripte?

Also es ist durchaus möglich das die Skripte kurz hintereinander aufgerufen werden...
Oder das, dass was von dem Skript als Ziel gemacht werden soll, schon vor der Zeit in erfüllung geht... (-> Bedienung durch Mensch)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei WinCC flexible läuft immer nur ein Skript zur Zeit. Wenn du ein neues Skript anstößt und es ist noch ein anderes aktiv, so wird das neue in eine Art Warteschlange eingereiht und später ausgeführt.

Generell ist die vorgehensweise mit Loops in Skripten zu verharren um Zeit zu verbraten äußerst schlecht.
Vielleicht kannst du deine Aufgabe anders lösen. Der Aufgabenplaner lässt als kleinstes Intervall zwar nur 1 Minute zu, aber ich würde versuchen deine Funktionen in dieses Intervall zu legen.

Falls die eine Minute zu lang ist, könnte man zur Not ein z.B. 10-Sekündliches Skript erzeugen, indem man einen Wert in der SPS in dem Zeitintervall ändert, und auf Änderung dieser Variable ein Skript anstößt. Problem ist dann nur dass die Skripte nicht mehr laufen wenn die SPS nicht erreichbar ist.
 
Okay, das ist interessant :)

Okay das eine könnte ich echt mit einem Aufgabenplaner machen, die eine Minute würde passen. Edit: geht doch nicht, da es nicht jede minute ausgeführt werden soll, dann mach ich das mit der SPS...

Das andere da brauch ich 15sek und das wäre mir ohne SPS am liebsten.

Es ist so, das mehrere Popups (Bildbaustein) habe (aufrufbar durch Schaltfläche xyz) Wenn ein Popup geöffnet wird, schliesen sich die andern Popups, so das nur immer maximal eins geöffnet ist.
Dies eine soll aber maximal 15sek sichtbar sein und sich dann wieder schliesen ohne das ein anderes geöffnet wird.

Wenn ich ein Popup öffne startet das skript, jetzt schließ ich das Popup innerhalb 15sek oder ich öffne direkt ein anderes, dann hab ich das von dir angesprochene Problem.
Kkann ich irgendwie im Skript sagen, das die Stopzeit nur laufen soll wenn Bit gesetzt ist und wenn das Bit weg ist, ist es egal und ich hab nichts in der Warteschlange?
 
Zuletzt bearbeitet:
Ich würds ungefähr so machen (in Pseudocode):

Ein Skript was angetriggert wird wenn ein Bildfenster geöffnet werden soll:
Code:
OeffneBildfenster(Bildname)
{
  SchließeAlleBildfenster()
  Bildfenster Bildname öffnen
  Öffnungszeitpunkt = AktuelleDateTime
  BildfensterGeöffnet = true  
}

Und ein Skript das in einem Zeitintervall (10 Sekunden, minütlich o.Ä angetriggert wird). Du könntest das Skript auch parallel von SPS und Aufgabenplaner anstoßen lassen, dann wird es spätestens nach 1 Minute ausgeführt auch wenn die SPS nicht erreichbar sein sollte.
Code:
Timer()
{
  Wenn BildfensterGeöffnet = True
  {
    Wenn AktuelleDateTime >= Öffnungszeitpunkt
    {
      SchließeAlleBildfenster()
      BildfensterGeöffnet = False
    }
  }
}

Ob das für den Bediener praktisch ist wenn ein Skript ihm andauernd ein gerade geöffnetes Fenster wieder schließt, lasse ich mal dahingestellt. Mir gehen solche Automatismen immer ziemlich auf den Keks.
 
Zurück
Oben