skript kopieren und smarttags

Hocheck

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

Wenn man ein erstelltes Skript kopiert und ins nächste Flex Projekt einfügt, dann werden alle intern deklarierten Variablen (die nicht mit der SPS verlinkt wurden) in smarttags umgewandelt. Also von Gelb nach smarttags...

Warum passiert das?

Und eine Frage noch- Habe mir zwar einige male die Definition von smarttags in der Flex Hilfe durchgelesen, aber um ehrlich zu sein, ich versteh da keinen Unterschied zu normalen Variablen, die im Flex Projekt deklariert und mit einem DB der SPS verlinkt wurden... Wie ist die genaue Definition von Smarttags und wo liegen die Unterschiede?!


Mir sind noch einige andere Besonderheiten aufgefallen was das verwenden von Schleifen betrifft- da wird komischerweise wenn man zum Beispiel so etwas deklariert:

e = 10
For i = 1 to 100
Daten(e) = smarttags("DB....Programm_"& i &"...")
e = e + 1
Next

x = 10
For k = 1 to 100
f.LinePrint("Programm_"& k &" &Daten(x) )
x = x + 1
Next

egal was passiert eine 0 ausgegeben.

Dieser code soll aus dem DB über das Panel in eine txt datei schreiben von einem PC.

Wenn ich zum Beispiel die 100 Variablen alle manuel dem Daten (feld) zuweise und jede der 100 Variablen manuell ohne For schleife über f.LinePrint in die Datei schreiben würde, dann kämen auch die Daten an!

Habe es mehrmals getestet und es funktioniert nur so wie gerade beschrieben- keine Ahnung warum und ob ich was falsch mache...
 
smarttags() mag keine zusammengesetzten Strings als Argument

Hallo Hocheck,

soweit ich mich erinnere, mag smarttags() keine zusammengesetzten Strings als direktes Argument.
So sollte es funktionieren:
Code:
dim tagname

For i = 1 to 100
    tagname = "DB....Programm_"& i &"..."
    Daten(e) = smarttags(tagname)
    e = e + 1
Next

Warum WCCflex beim Kopieren von Skripten in andere Projekte die im Skript benutzten Panel-internen
Variablen in smarttags umwandelt, kann ich nicht sagen. Sowas ist mir noch nicht passiert.

Vielleicht liegt das daran, daß WCCflex beim Kopieren zwischen Projekten "freundlicherweise" alle
referenzierten Objekte mitkopiert. Und Panel-Variablen werden immer als SPS-Variablen auf der Verbindung
"Verbindung_1" angelegt, wenn sie da noch nicht existieren.

Eventuell hast Du nun doppelte Variablen und ggf. eine zusätzliche Verbindung, falls Du die Standard-
Verbindung umbenannt hast.

Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

Genau das ist es =)

Habe es auch noch mal mit dem kopieren der Variablen ausprobieren können.. Auch wenn ich die standardverbindung "Verbindung_1" in beiden Projekten projektiert habe passiert dies komischerweise..
Naja da weis ich mir nun wirklich keine Antwort drauf...

Aber es ist doch nicht "schlechter", wenn man die smarttags anstelle normaler variablen nimmt, oder?!
 
SmartTags()

Genau das ist es =)
Ich nehme mal an, Du meinst mein Codebeispiel. Daß Dein Skript so nun korrekt funktioniert?
Wenn man ein erstelltes Skript kopiert und ins nächste Flex Projekt einfügt, dann werden alle intern deklarierten
Variablen (die nicht mit der SPS verlinkt wurden) in smarttags umgewandelt. Also von Gelb nach smarttags...

Warum passiert das?
Ich glaube, jetzt habe ich erst verstanden, was Du meinst:
Beim Kopieren der Skripte werden nicht die referenzierten (und mitkopierten) Variablen "umgewandelt", sondern im
Skript-Text werden die "nackt dastehenden" Variablennamen von global deklarierten RT-Variablen (Panel-interne
UND SPS-verlinkte) in SmartTags() eingeschlossen.
Code:
[COLOR="Green"]Aus :[/COLOR]
    skriptvar = [COLOR="DarkOrange"]Var_1[/COLOR]
[COLOR="green"]wird :[/COLOR]
    skriptvar = SmartTags([COLOR="DarkRed"]"Var_1"[/COLOR])
Ja, das ist eigentlich in Skripten der Normalfall, daß auf die im Flex-Projekt global deklarierten RT-Variablen
mit SmartTags("...") zugegriffen wird (kein Unterschied, ob als Panel-interne oder SPS-verlinkt deklariert).

Zulässige Ausnahme (aus der WinCC flexible Onlinehilfe):
Wenn der Variablenname den VBS-Namenskonventionen entspricht, brauchen Sie die SmartTags-Auflistung nicht zu
verwenden. Sie können die Variable direkt über ihren Namen ansprechen, ...

Zwingend erforderlich ist SmartTags("Varname"), wenn die RT-Variable in einem Ordner unterhalb "Variablen"
deklariert wurde, wenn also der Variablenname einen Pfad enthält, z.B. SmartTags("_System\Hostname") oder
SmartTags("_Intern\ActiveGroupNumber").

Beim Einfügen eines kopierten Skriptes (sogar im selben Projekt), wird das Skript offensichtlich durch einen
Konverter/Syntaxprüfer gejagt, der grundsätzlich alle Zugriffe auf globale RT-Variablen mit SmartTags() umgibt.
Im Ziel-Projekt könnte ja ein Skript mit dem gleichen Namen wie eine RT-Variable des Quell-Projektes existieren.

Und ich glaube mich zu erinnern, daß die automatische Anpassung der Variablennamen in Skripten manchmal nicht
korrekt funktioniert, wenn die Variable nachträglich in einen anderen Variablen-Ordner verschoben wird und
SmartTags() nicht verwendet wurde. Das soll vielleicht verhindert werden.

Aber es ist doch nicht "schlechter", wenn man die smarttags anstelle normaler variablen nimmt, oder?!
Alle im Flex-Projekt global deklarierten RT-Variablen sind Smarttags. Egal, ob als Panel-intern oder SPS-verlinkt
deklariert. Es gibt keinen Unterschied "Smarttags" und "normale Variablen".

Ich schreibe das SmartTags() grundsätzlich immer mit. Ich finde die Skripte dadurch besser lesbar.

Gruß
Harald
 
Dim AutoUmschalten
Dim Auftrag_Produktnummer_Datensatz

AutoUmschalten = SmartTags(CopyLVL3_Sollwerte) ' Für die Automatische Umschaltung
Auftrag_Produktnummer_Datensatz = SmartTags(@Auftrag_Produktnummer_Datensatz)

If AutoUmschalten Then
SmartTags(@Auftrag_Produktnummer_SW) = SmartTags(Auftrag_Produktnummer_Datensatz)
End If

Hallo Zusammen und ein Frohes Neues,

ich sitze gerade an meinem ersten HMI VBScript code, der eigentlich absolut primitiv ist.
@Auftrag_Produktnummer_Datensatz := Beinhaltet Daten die einfach nur in diese @Auftrag_Produktnummer_SW HMI Variable kopiert werden soll, wenn das Bit AutoUmschalten = SmartTags(CopyLVL3_Sollwerte) ebenfalls eine HMI Variable "True" ist.

nur leider bekomme ich beim Übersetzen immer ein Fehler. Habe leider kein Script Editor.
Kann mir jemand sagen warum das so nicht funktioniert, bzw. hat jemand eine andere Lösung?
Danke euch
 
Zurück
Oben