# Brauche dringend Hilfe bei SmartTags



## cdieden (1 Juli 2008)

Hallo,

ich möchte in einer Schleife Werte abfragen. Allerdings kann ich dies nicht wie folgt machen:

For c = 0 to 15
Messwert(c) = SmartTags("Analogwerte/Wert_" & c)
Next

Auch diese Variante habe ich schon ausbrobiert, hier kommen auch keine Fehler beim Generieren, jedoch funktioniert es trotzdem nicht:

For c = 0 to 15
Set Analogwert = SmartTags("Analogwerte/Wert_" & c)
Messwert(c) = Analogwert 
Next

So funktioniert es, ist aber bei 16 Werten ein enormer Aufwand:

Messwert(0) = SmartTags(Analogwerte/Wert_0)
Messwert(1) = SmartTags(Analogwerte/Wert_1)
Messwert(2) = SmartTags(Analogwerte/Wert_2)
Messwert(3) = SmartTags(Analogwerte/Wert_3)


----------



## Larry Laffer (1 Juli 2008)

Das liegt daran, dass du deine Analogwert als Einzelwert deklariert hast.
Du könntest eine zweite Deklaration machen, wo du nur den ersten Wert deklarierst und bei Anzahl dann 15 einträgst. Das setzt allerdings vorraus, dass die Werte im Speicher aufeinander folgen.

Ist das so, dann könntest du im Script schreiben :
	
	



```
For c = 0 to 15
Messwert(c) = Analogwerte(c)
Next
```
... oder so ähnlich


----------



## cdieden (1 Juli 2008)

Danke erst mal für deine Antwort.

For c = 0 to 15
Messwert(c) = Analogwerte(c)
Next

Aber in Analogwerte(c) steht ja noch nichts drin. Ich muss ja Irgendwie über die SmartTags zugreifen. Das sind ja interne Variablen.


----------



## csharpxx (1 Juli 2008)

cdieden schrieb:


> Danke erst mal für deine Antwort.
> 
> For c = 0 to 15
> Messwert(c) = Analogwerte(c)
> ...


 

Hey,
es stört mich, dass du nicht viel über deine Variable gesagt hast (ob sie intern/extern oder nur im skript  sind).

Wenn die Var intern oder extern sind denn musst du SmartTags("blabka")
verwenden.


Gruß csharpxx


----------



## cdieden (1 Juli 2008)

SmartTag("blablabla") ist klar. 
Ich möchte aber den String in der klammer durch eine Variable erstezen. 
Z. B.: 
meinTag = "blablabla"
SmartTag(meinTag) 

Irgendwie Funktioniert das auf jeden Fall. Das habe ich auch schon mal gemacht. Ist aber schon sehr lang her.


----------



## csharpxx (1 Juli 2008)

cdieden schrieb:


> SmartTag("blablabla") ist klar.
> Ich möchte aber den String in der klammer durch eine Variable erstezen.
> Z. B.:
> meinTag = "blablabla"
> ...


 
Versuch mal,

Dim i

For i = 0 to 15
SmartTags("Messwert")(i) = SmartTags("Analogwerte")(i)
Next


Vergiss bitte nicht dein Skript aufzurufen


----------



## cdieden (1 Juli 2008)

Geht auch nicht.

Ich bin echt am verzweifeln.


----------



## csharpxx (1 Juli 2008)

Bei mir funkt. es einwandfrei
Wenn du magst, kannst du mir dein Projekt hier anhängen.


----------



## cdieden (1 Juli 2008)

Das ist nicht das was ich brauche.

meinTag = "Anlagenteil_2"
SetBit SmartTag(meinTag & "Wert_1")
SetBit SmartTag(meinTag & "Wert_2")
SetBit SmartTag(meinTag & "Wert_3")
SetBit SmartTag(meinTag & "Wert_4")
SetBit SmartTag(meinTag & "Wert_5")
SetBit SmartTag(meinTag & "Wert_6")

Sprich, wenn ich den Sting 'meinTag' ändere, ist er im Ganzen Programm geändert. Das ganze ist auch vorteilhaft für die verarbeitung in einer Schleife (wieder eine andere Baustelle). Da könnt ich anstelle von meinTag auch den Zähler der Schleife nehmen.


----------



## csharpxx (1 Juli 2008)

cdieden schrieb:


> Das ist nicht das was ich brauche.
> 
> meinTag = "Anlagenteil_2"
> SetBit SmartTag(meinTag & "Wert_1")
> ...


----------



## cdieden (1 Juli 2008)

Ich habe an einer Anlage 200 Ventile. Ich habe eine variable in der die Nummer des Ventils steht, das angesteuert werden soll (1-200).

SetBit SmartTag("Hauptventile.V_1")
^Dann geht Ventil 1 auf

Ich habe aber eine Variable in der die Nummer drin steht.

Ventilnummer => hier steht eine nummer drin

SetBit SmartTag("Hauptventile.V_" & Ventilnummer)
^Hier wird aber die Zeile rot unterstrichen.


----------



## vierlagig (1 Juli 2008)

ich würde folgendes probieren:


```
*
For c = 0 to 15
   string_temp = "Analogwerte/Wert_" & c
   Set Analogwert = SmartTags(string_temp)
   Messwert(c) = Analogwert 
Next
```

weiß aber jetzt aber nicht, ob das so einfach übersetzt wird  ...aber die grundidee sollte erkannt werden...


----------



## cdieden (1 Juli 2008)

Das habe ich schon. Wird zwar ohne Fehler Generiert, aber wenn man dan das Script aufruft passiert nichts.


----------



## vierlagig (1 Juli 2008)

ich geh davon aus, dass du unter "Geräteeinstellungen" die option "Namen transferieren" angewählt hast um die indirekte adressierung zu ermöglichen?!


----------



## JesperMP (1 Juli 2008)

Ich _glaube_ nicht das man Smarttags "dynamisch" generieren kann. Ich habe selber etwas damit gebastelt und komischer weise krieg ich es zuerst zum funktionieren, aber beim nächsten versuch nicht.

Du hast tags wie so definiert:
Analogwerte/Wert_0
Analogwerte/Wert_1
Analogwerte/Wert_2
usw.

Warum machst du nicht ein ARRAY of tags, in S7 programm UND WinCC Flexible ?

Tip: WinCC Flex Arrays starten immer mit "1". Dafür muss dein ARRAY in S7 auch von "1" starten. Damit wird es einfacher. ARRAY[1..20] OF REAL z.b. und nicht ARRAY[0..19] of REAL.


----------



## cdieden (1 Juli 2008)

Ja, habe ich. Geht aber trotzdem nicht.


----------



## cdieden (1 Juli 2008)

```
meinTag = "Anlagenteil_2"
SetBit SmartTag(meinTag & "Wert_1")
SetBit SmartTag(meinTag & "Wert_2")
SetBit SmartTag(meinTag & "Wert_3")
SetBit SmartTag(meinTag & "Wert_4")
SetBit SmartTag(meinTag & "Wert_5")
SetBit SmartTag(meinTag & "Wert_6")
```
 
Das möchte ich ja auch noch machen. Damit ich nicht 25.000 mal im Programm den Anlagenteil ersetzen muss sondern einfach was anderes in meinTag reinschreiben kann, möchte ich das so machen.


----------



## JesperMP (1 Juli 2008)

Vielleich hilft es mit ein "CStr".

```
For c = 0 to 15
   string_temp = "Analogwerte/Wert_" & [B]CStr(c)[/B]
   Set Analogwert = SmartTags(string_temp)
   Messwert(c) = Analogwert 
Next
```


----------



## cdieden (1 Juli 2008)

Leider hilft das CStr auch nicht.


----------



## Larry Laffer (1 Juli 2008)

cdieden schrieb:


> SetBit SmartTag("Hauptventile.V_" & Ventilnummer)
> ^Hier wird aber die Zeile rot unterstrichen.


 
Ist ja auch kein Wunder ... hier wird kein String sondern die wirkliche Variable erwartet ...

Wie sehen denn die Adressen der Ventile aus ...?
Es geht (wenn überhaupt) nur so wie schon von mir in Beitrag #2 beschrieben ...

Gruß
LL


----------

