# WinCC Flex Variable in VB setzen und in SPS übertragen



## Krumnix (13 Dezember 2006)

Hallo.

Möchte gerne eine Variable vom Typ Bool in einem VB-Script auf
True oder False setzen und dann an die SPS übertragen.

Jedoch kommt der Wert in der SPS nicht an.

Laut Siemens sollte die Version:
Set xyz = SmartTags("hhdjh")

xyz = false

funktionieren.

Jedoch passiert da nix.

Das Bit, wird in der SPS im Moment nirgends gesetzt oder rückgesetzt, 
deswegen kann ich das erstmal ausklammern.

Muss ich da noch einen Befehl dabei setzen, wie bei WinCC?
Und welcher ist das?

Danke


----------



## Unregistrierter gast (13 Dezember 2006)

Krumnix schrieb:


> Jedoch passiert da nix.


Du must das Script natürlich auch aufrufen !


----------



## Krumnix (13 Dezember 2006)

Ich sag jetzt mal nix dazu, aber ich denke, das sollte man schon
voraussetzen, das ich das Script auch ausführe.....

Schließlich werden alle Berechnung in dem Script abgearbeitet,
nur das ich der SPS dann sagen will, ich bin fertig mit der Berechung,
das geht NICHT.....


----------



## Unregistrierter gast (13 Dezember 2006)

Krumnix schrieb:


> Ich sag jetzt mal nix dazu, aber ich denke, das sollte man schon
> voraussetzen, das ich das Script auch ausführe.....


Na gut.
Ist die SPS - Variable Global definiert ?

In deinem Beispiel wird das Bit ja auch immer RÜCKgesetzt und nicht gesetzt...

Vielleicht bring ich dir gleich noch ein Beispiel, was definitiv Funktioniert..


----------



## Unregistrierter gast (13 Dezember 2006)

Krumnix schrieb:


> Hallo.
> 
> Set xyz = SmartTags("hhdjh")
> 
> ...


Probier das mal:


```
ResetBit SmartTags("hhdjh")
```

wobei "hhdjh" deine SPS-Variable ist.


----------



## Krumnix (13 Dezember 2006)

Das ResetBit muss ich morgen mal testen, danke. 
Kannte ich noch nicht.

Aber mal eine kleine Info zu dem ganzen Ablauf, damit es ggf. 
einfacher zu verstehn ist oder ich woanders einen Denkfehler hab.

In der SPS wird nach einer bestimmten Bedingung ein Bit gesetzt (S).
Das setzen erfolgt über eine positive Flanke (P).

|--U e1.0---U m3.1----(P)----(S M5.7)

Im WinCC Flex hab ich ein Scirpt laufen, das per do loop until läuft und
mit einer Taste gestartet wird.

Wenn der M5.7 eins hat, wird in der Schleife eine Berechnung gemacht.
Ist die Berechnung beendet, soll der Merker auf Null gesetzt werden,
damit eine neue Berechnung bei den nächsten Bedingungen gestartet
werden kann.

Das Berechnen läuft super, das sie erst mit dem Merker auf eins startet
auch, nur das am Ende der nicht auf Null gesetzt wird, das ist Ungünstig,
weil ja dann die Berechung im Zyklus der do loop Schleife erfolgt, was nicht
sein sollte.

Aber ggf. ist es mit dem einem Befehl schon gelöst.

Danke für die Info

Gruß


----------



## KalEl (14 Dezember 2006)

Krumnix schrieb:


> Set xyz = SmartTags("hhdjh")
> xyz = false


 
wie soll das funktionieren?
du weist der temporären variablen xyz den false zu obwohl du hhdjh auf false setzen willst

Set xyz = SmartTags("hhdjh")
xyz = false
Set SmartTags("hhdjh") = xyz

kürzer wäre es natürlich so  
hhdjh = false


----------



## Krumnix (14 Dezember 2006)

```
Set xyz = SmartTags("hhdjh")
xyz = false
Set SmartTags("hhdjh") = xyz
```
 
Funktioniert nicht.
Merkert er ganz böse.

Aber für alle, die auch mal das Problem haben oder ein sogenanntes
Globales Script für WinCC Flex haben wollen:

1. Das Script muss beim ersten Aufruf gestartet werden.
Global laufende Scripte gibt es ja nicht.

2. In dem Script sollte eine do loop until Schleife programmiert werden,
die endweder immer auf True steht oder durch eine Bedingung beendet
werden kann. Das ist egal. Jedoch muss nach dem Beenden das Script
wieder angestoßen werden.

3. Das Script muss eine Sub sein.

4. Um im Script Varibalen in der SPS zu setzen oder was auch immer
in "Echtzeit" in der SPS verändern, muss die Bedingung in eine 
FUNCTION.
Bedeutet, das wenn man einen Merker rücksetzen möchte, geht das
nur in einer Funktion.

5. Die Funktion dann im "Globalen Script" aufrufen. Da nur beim Beenden 
eines Scriptes alle Veränderungen auch an die SPS "weitergereicht" werden.

6. Die Zuweisung in der Funktion für eine Variable, die in die SPS
übertragen werden soll MUSS folgenderweise lauten:

SmartTags("Variablen_Name") = Neuer Wert

Damit konnte ich dann mein Problem lösen.

Hat mich die ganze Nacht wach gehalten ^^

Alle anderen Vorschläge haben leider NICHT funktioniert


----------



## volker (14 Dezember 2006)

doch das muss gehen.
ist evtl von der syntax her nicht ganz korrekt.
habe jetzt kein wccf zur hand nur protool.

unter protool klappt folgendes

```
[SIZE=2][COLOR=#0000ff]
Dim[/COLOR][/SIZE][SIZE=2] temp_var
[/SIZE][SIZE=2][COLOR=#ff0000]steuerung_var[/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#0000ff]false
[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#008000]'oder
[/COLOR][/SIZE][SIZE=2]temp_var = [/SIZE][SIZE=2][COLOR=#ff0000]steuerung_var
[/COLOR][/SIZE][SIZE=2]temp_var = [/SIZE][SIZE=2][COLOR=#0000ff]false
[/COLOR][/SIZE][SIZE=2][COLOR=#ff0000]steuerung_var[/COLOR][/SIZE][SIZE=2] = temp_var
[/SIZE]
```


----------



## volker (14 Dezember 2006)

habs doch zur hand. dachte ich hätte das hier nicht installiert. 

so siehts in wccf aus.

```
Dim temp_var
SmartTags("steuerug_var") = False
'oder
temp_var = SmartTags("steuerug_var")
temp_var = False
SmartTags("steuerug_var") = temp_var
```


----------



## Krumnix (14 Dezember 2006)

Ja, hab ich ja oben geschrieben 

Der 2. Vorschlag hieß aber "Set SmartTags("xy") = VarBB"

Und das Set funktioniert so nicht.


----------



## Jochen Kühner (17 Dezember 2006)

*Richtig...*



KalEl schrieb:


> wie soll das funktionieren?
> du weist der temporären variablen xyz den false zu obwohl du hhdjh auf false setzen willst
> 
> Set xyz = SmartTags("hhdjh")
> ...





Nei, das wäre da schon richtig.
mit Set weist man xyz einen verweis auf die variable zu.
also von der syntax wäre was er machen will schon richtig!

und 
Set SmartTags("hhdjh") = xyz
wäre von der syntax her falsch, deshalb mekert er auch.

also normalerweise sollte bei einer änderung von xyz auch der wert von hhdjh geändert werden, da es aber nicht funktioniert, scheint das von siemens nicht implementiert zu sein!!


----------

