TIA Objektname über Skript auslesen

zimmermann

Level-2
Beiträge
27
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich kämpfe neuerdings mit dem TIA V13....

Ich suche eine Möglichkeit, über ein VB Skript den Objektname des gedrückten Buttons in eine Stringvariable zu übergeben.

Funktion: Über eine Schaltfläche (Objektname = M0001) wird ein Motor angewählt, und über den Objektname will ich den Motor eindeutig zuweisen!!

Ich hoffe das war irgendwie verständlich...

Vorab schon mal Danke für die Hilfe!!

Grüsse

Jochen
 
Das Bediengerät ist ein TP1900!!
Ich möchte einfach den Objektnamen der Schaltfläche die ich betätige in eine Variable schreiben, über ein Skript!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die rasche Antwort...
Habe Dein Skript gerade ausprobiert.
Beim betätigen des Buttons kommt die Meldung "Fehler 'Objekt erforderlich' in Skript....Zeile 9

Aber Danke für den Ansatz, ich probiere mal ein wenig "rum"

Grüsse

Jochen
 
Möglicherweise mußt du das noch "ein bißchen" aufsplitten.
Eventuell auch nicht mit 'ActiveScreen" arbeiten sondern mit 'Screen("der Name deines Screens")'

Beachte bitte, das myObj das Objekt in dem Fall ist. Du kannst hier nicht direkt den Tag an Stelle dessen einsetzen ...

Gruß
Larry
 
Funktioniert leider immer noch nicht... werde mich am Wochenende mal genauer mit dem Thema befassen und mich dann wieder melden!!

Grüße und Danke

Jochen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So geht's direkt:
Code:
SmartTags("panelinterne_WString_Variable") = HmiRuntime.ActiveScreen.ActiveScreenItem.ObjectName
und so geht's auch:
Code:
Dim myObj
Set myObj = HmiRuntime.ActiveScreen.ActiveScreenItem
SmartTags("panelinterne_WString_Variable") = myObj.ObjectName

Harald
 
Hallo zusammen,

das ganze Spiel mit dem Auslesen des Objektnamens muss ich in einem Bildbaustein abwickeln.
Leider funzt die Befehlszeile (HmiRuntime.ActiveScreen.ActiveScreenItem) im internen Script nicht, bzw. kann nicht verwendet werden.
Gibt es für Bildbausteine einen alternativen Befehl??

Ich hoffe ich strapaziere nicht zu sehr Eure Geduld...:cool:
 
... du brauchst das genannte HMIRuntime-Objekt um überhaupt irgendwelche Bildobjekte ansprechen zu können. Lies dir am Besten speziell dazu mal die Siemens-Hilfe durch ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
und wenn es kein HMI-Objekt, sondern ein Objekt innerhalb des BB ist??
Überlege mal: Falls es denn ginge - welchen Objektname hätte wohl ein Objekt das in einem Bildbaustein liegt? Und nun lege mehrere Bildbausteine in ein Bild und versuche die Objektnamen zu unterscheiden ;)

Gibt es für Bildbausteine einen alternativen Befehl??
Ich kann mir vage vorstellen, daß man bei der Projektierung irgendwie von außen einen unique Zahlenwert oder String an den Bildbaustein anschaltet und der Tastendruck gibt diesen Wert zurück bzw. speichert in eine Variable. (habe ich aber noch nie versucht)

Harald
 
... welchen Objektname hätte wohl ein Objekt das in einem Bildbaustein liegt? Und nun lege mehrere Bildbausteine in ein Bild und versuche die Objektnamen zu unterscheiden ;)

@Harald:
Das ist leider nur deshalb ein Problem weil sich Siemens hier selbst Restriktionen auferlegt hat.
Das Objekt könnte ja z.B. so heißen : "Bildbaustein_1.Schaltfläche_3" und damit wäre es adressierbar. In der .Net-Welt wäre das nun überhaupt kein Problem ... 8)

Gruß
Larry
 
Mittlerweile klappt das mit dem Objektzugriff ganz gut...learning by doing+SPS forum!!

An einer Sache beiß ich mir gerade die Zähne aus:

Ich möchte in einem VBscript eine Eingangsvariable (E26.3 aus der S7-300) lesen und an eine interne Variable übergeben.

hier meine (nicht funktionierender) Code:

SmartTags("interne_Variable") = HmiRuntime.SmartTags("LAx0701_" & bmk & "_HR01")

bmk ist ein Index. Dies wäre der "echte" Name der Variablen: ("LAx0701_Y0001_HR01") = E26.3 in der Steuerung

Das Problem ist, ohne Index tut die Sache...

SmartTags("interne_Variable") = HmiRuntime.SmartTags("LAx0701_Y0001_HR01")


Überseh ich da irgendwas???

Grüsse Jochen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich unterstelle dir jetzt mal, dass bmk als Inhalt "Y0001" hat ...
Um dies nutzen zu können müss "Namensinformationen transferieren" (oder sinngemäß ähnlich) aktiviert sein. Dies findest du in den Einstellungen der Visu.

Gruß
Larry
 
Wenn der Name einer Variable erst im Skript zusammengebastelt wird, dann weiß die Runtime nichts von der Verwendung der Variable und liest die Variable erst nach dem (versuchten) Zugriff im Skript - das Skript wartet aber nicht. Es sei denn, die Variable wird in dem Bild verwendet wo das Skript aufgerufen wird oder die Variable steht auf Aktualisierung "zyklisch fortlaufend", dann wird die Variable schon vor dem Skript gelesen.

Möglicherweise mag SmartTags() es nicht, wenn der Variablenname in der Klammer zusammengebastelt wird. Versuche mal:
Code:
varname = "LAx0701_" & bmk & "_HR01"
SmartTags("interne_Variable") = SmartTags(varname)

Nachtrag 1:
hier meine (nicht funktionierender) Code:
Bekommst Du einen Runtime-Error oder ist einfach nur das Ergebnis 0?

Nachtrag 2:
An dem Variablen-Aktualisierungsproblem kannst Du sehen, daß Dein Konzept mit dem Lesen eines Objektname und daraus Variablenzugriffe zusammenbasteln untauglich ist. Du kannst unmöglich alle verwendeten Variablen auf Aktualisierung "zyklisch fortlaufend" setzen. Außerdem ist die WinCC-Adv-RT nicht dafür gemacht, für jeden Pups ein Skript aufzurufen.
Für das was Du vorhast nimmt man üblicherweise "Variablen-Multiplexen" und muß sich um all die Aktualisierungs- und Performance-Probleme nicht kümmern. Das macht allerdings ein klein wenig mehr Aufwand bei der Projektierung...

Harald
 
Zuletzt bearbeitet:
Hallo Harald,

Danke für den Ansatz!! Habs jetzt mit Multiplexvariablen gelöst! Funktioniert bestens!
Manchmal verstellt man sich den Blick auf den einfachsten Weg!! ;)
 
Zurück
Oben