TIA WinCC flexibile Adv Projekt 1 VBS funktioniert Projekt 2 VBS funktioniert nicht

jok3r

Level-2
Beiträge
353
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein kleines VB Skript in dem ich den Aktuellen Bildnamen auslese und in einem Textfeld in einem Template das immer aufgerufen wird ausgebe.

Hintergrund ist der dass der Bildname mit der Bildüberschrift im Bild immer konsistent sein muss.
In dem ersten Projekt geht das ganze im zweiten geht es nicht mehr. Der Fehler liegt bei "activeScreenName" es steht der richtige name darin aber in der Methode .Screens() wird es nicht richtig verarbeitet

HmiRuntime.Screens(activeScreenName).ScreenItems("Screen_Name") -> funktioniert nicht
HmiRuntime.Screens("Anlage").ScreenItems("Screen_Name") -> funktioniert
In activeScreenName steht aber "Anlage"

Code:
'###############Set Screenname###################
'------------------------------------------------
'- declar lokal properties 
'------------------------------------------------
Dim activeScreenName
Dim textfield

'------------------------------------------------
'- main 
'------------------------------------------------

' get activ screenname 
'activeScreenName = HmiRuntime.ActiveScreen.ObjectName
activeScreenName = HmiRuntime.BaseScreenName


' declar textfield as object from template
Set textfield = HmiRuntime.Screens(activeScreenName).ScreenItems("Screen_Name")

' set screenname to outputfield 
textfield.ProcessValue = activeScreenName

Irgendwas stinkt hier gewaltig....

Gruß
 
TIA WinCC advanced habe ich noch nie geskriptet, doch ein paar Ansätze hätte ich:

Was ist der Unterschied zwischen den Projekten?
- verschiedene Runtime-Versionen oder ES-Versionen?
- verschiedene HMI-Geräte?
- verschiedene Objekte: mal TextField, mal IOField?
- mal Objekte im Bild, mal in Bildbaustein?
- ...?

Werden Objekte in Vorlagen über das Vorlagebild oder über das Grundbild (BaseScreen) adressiert?
Schon mal alles neu generiert?

Gibt es Runtime-Error-Meldungen? Wie lauten die genau?
Z.B. laut Dokumentation/Referenz WinCC Advanced V13.0 SP1 hat ein TextField gar keine dynamisierbare Eigenschaft "ProcessValue".

Warum skriptest Du in den Projekten so hoch-undurchsichtig? (sprich: nicht über Querverweise findbar)
Mache doch in jedes Bild oder in das Permanentbild oder in das Grundbild oder in eine Vorlage ein Ausgabefeld mit einer internen Variable 'rein und weise bei Bildaufbau der Prozessvariablen den Bildname zu:
Code:
SmartTags("intern\activeScreenName") = HmiRuntime.BaseScreenName
Ist das zu einfach? ;)

Welche WinCC-Version verwendest Du für welche HMI-Plattform?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es sind immer zwei SPS n eine in der Anlage und eine im Werkzeug. Das Grundprojekt ist gleich, die Visu ist auf beiden im Aufbau komplett identisch! Via idevice wird das Werkzeug mit der Anlage verbunden und die Runtime vom Werkzeug gestreamt. Der Frame der Visu ist immer identisch und wird via Template in jedem Bild erzeugt.
Dieses Ausgabefeld liegt in der Vorlage.
Im Werkzeug funktionierts in der Anlage nicht.
Aber wieso funktioniert es wenn Screens den richtigen Bildnamen übergeben bekommt ? Und BaseScreenName gibt auch den richtigen namen zurück.
Ich mach das so weil alles vom Screenaufbau im Skript zufinden sein soll und das nur ein kleiner ausschnitt von meinem Projekt ist
Und textfield ist eine Ausgabe .
Gruß
 
Zuletzt bearbeitet:
Im Werkzeug funktionierts in der Anlage nicht.
Kann ich dir beim besten Willen nicht glauben, sorry.

1. Du meinst wahrscheinlich "WinCC TIA Advanced" und nicht Flexible, oder?
2. Wenn du dir im folgenden Link (PDF-Downloadlink ganz unten) die Liste der per Script dynamisierbaren Objekt-Attribute ansiehst, dann wirst du feststellen dass das Attribut "ProcessValue" für Text-Felder nicht zulässig, wahrscheinlich gar nicht vorhanden ist.
https://support.industry.siemens.com/cs/ww/de/view/53752382

Ich würds mit "Textfeld_XY.Text = HmiRuntime.BaseScreenName" machen.

PS: Hab auch noch mal in die Liste für WinCC-Flexible geguckt. Da war die Eigenschaft "ProcessVar" gar nicht gelistet.
Dein Scriptkommentar "' set screenname to outputfield" lässt die Vermutung offen dass dort mal ein IO-Field (EA-Feld) verwendet wurde.
EA-Felder haben die Eingenschaft "ProcessVar" allerdings nur in WinCC v7 oder in WinCC-TIA-Professional (vermutlich) auch.

Kann es sein dass das ursprünglich ein v7-Skript war, welches du jetzt auf WinCC-TIA-Advanced migrieren wolltest?
Das würde den Versuch mit "ProcessVar" zumindest erklären...

PPS: Sicher dass nicht ein Projekt mit TIA-Comfort/Advanced und das anderer mit TIA-Professional ist....?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Scheint mal wieder (schon wieder) ein Fehler in TIA-Hilfe zu sein.
Es steht zwar dar dass dieser Eintrag für TIA-Advanced ist, aber dass ist mit 99,9%-tiger Wahrscheinlichkeit falsch.
Vielleicht wenn man die den Teil wertet das "ProcessVar" für das Objekt "Bar" in TIA-Advenced verfügbar ist.

Das unten gezeigte Beispiel geht nur in WinCC-v7 oder TIA-Professional. Dort haben die IO-Felder die Eigenschaft.
Ein klares Indiz dafür wäre, dass man bei TIA-Advanced auch im Editor nirgendst beim IO-Feld "den anzuzeigenden Wert voreinstellen" kann. In v7 ginge das.
Vielleicht fragst du noch mal beim Support an?

Was ich immer noch nicht verstehe...
In deinem Skript erzeugst du eine Objekt "Textfield" im Kommentar steht aber "Outputfield". Was verbirgt sich hinter ScreenItems("Screen_Name") denn nun?
Ein Textfeld kann es ja nicht sein, selbst in deinem Hilfe-Eintrag ist das TextField nicht für die Eigenschaft "ProcessVar" gelistet...

Warum wertest du nicht die Err.Description nach dem Zugriff auf "ProcessVar" aus? Dann siehst du doch wo das Problem liegt...
Entweder über die Systemmeldungen oder eben selbst...
Code:
On Error Resume Next
....
textfield.ProcessValue = activeScreenName
....
SmartTags("Eine_HMI_StringVariable") = Err.Description
Dann würdest du auch sehen warum es vielleicht bei einem HMI "geht" und beim Anderen nicht.
 
Zuletzt bearbeitet:
Wenn ich mit einer WinCC-TIA-Advanced-Runtime folgendes probiere...
Code:
On Error Resume Next

Dim IoField
Set IoField = HmiRuntime.ActiveScreen.ScreenItems("EA-Feld_1")

IoField.ProcessVa[B][COLOR=#FF0000]r[/COLOR][COLOR=#0000CD]lue[/COLOR][/B] = "Test"
SmartTags("HMI_StringVar") = Err.Description
... dann bekomme ich das erwartete "Das Objekt unterstützt diese Eigenschaft oder Mehtode nicht." in HMI_StringVar geschrieben.

EDIT: Verdammt, das war Blödsinn. Tippfehler, danke PN/DP
 
Zuletzt bearbeitet:
Also in der Hilfe gibt es die Methode schon.
Jedoch in der Liste der erforderlichen/möglichen/unterstützten Objekte ist "TextField" nicht aufgeführt.
(Übrigens: "ProcessValue" ist laut Dokumentation keine Methode, sondern eine Eigenschaft)

Nochmal: Gibt es Runtime-Fehler-Meldungen?

Es sind immer zwei SPS n eine in der Anlage und eine im Werkzeug. Das Grundprojekt ist gleich, die Visu ist auf beiden im Aufbau komplett identisch! Via idevice wird das Werkzeug mit der Anlage verbunden und die Runtime vom Werkzeug gestreamt.
Wie soll man sich das vorstellen, daß eine Visu-Runtime von einer SPS "gestreamt" wird?
Nochmal: Was für Geräte verwendest Du, worauf läuft Deine WinCC-Runtime? Welche WinCC-Version(en) genau?
Zeigt evtl. die eine Visu per VNC-Client den Bildschirm der anderen Visu an und es geht vielleicht bei der Variante nicht, daß HmiRuntime.Screens(xxx) über eine Variable adressiert wird?

PS: zu langsam...

Nachtrag:
Dieses Ausgabefeld liegt in der Vorlage.
[...]
Und textfield ist eine Ausgabe .
Argh, nicht genau gelesen... Das Objekt ist also kein TextField sondern ein IOField (EA-Feld).

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
Set IoField = HmiRuntime.ActiveScreen.ScreenItems("EA-Feld_1")

IoField.[COLOR="#FF0000"]ProcessVar[/COLOR] = "Test"
SmartTags("HMI_StringVar") = Err.Description
... dann bekomme ich das erwartete "Das Objekt unterstützt diese Eigenschaft oder Mehtode nicht." in HMI_StringVar geschrieben.
Tippfehler: die Eigenschaft heißt nicht ProcessVar, sondern ProcessValue.

So funktioniert der Code in der Runtime WinCC flexible 2008 SP2 und höchstwahrscheinlich auch in der Runtime TIA Advanced:
Code:
Set IoField = HmiRuntime.Screens("Bild_1").ScreenItems("EA-Feld_1")
IoField.ProcessValue = "Test"

Harald
 
HmiRuntime.Screens(activeScreenName).ScreenItems("Screen_Name") -> funktioniert nicht
HmiRuntime.Screens("Anlage").ScreenItems("Screen_Name") -> funktioniert
Das Problem kann ich mit WinCC flexible 2008 SP2 nachvollziehen. Die Screens-Auflistung liefert wohl nur dann das korrekte Screen-Objekt, wenn der Bildname als String-Konstante angegeben wird. Mit variabel oder als Zahl übergebenen Bildnamen funktioniert die Screens-Auflistung nicht bzw. nicht richtig.
Code:
Dim variable, IoField

variable = HmiRuntime.ActiveScreen.ObjectName
[COLOR="#008000"]'oder[/COLOR]
variable = HmiRuntime.BaseScreenName
[COLOR="#008000"]'oder[/COLOR]
variable = "Bild_1"

Set IoField = HmiRuntime.Screens(variable).ScreenItems("EA-Feld_1")
[COLOR="#008000"]'--> Runtime-Error: "no screen item 'EA-Feld_1'; please check transfer of names ..."[/COLOR]

Set IoField = HmiRuntime.Screens("Bild_1").ScreenItems("EA-Feld_1")
[COLOR="#008000"]'--> das funktioniert korrekt[/COLOR]
Da das Problem schon sehr lange über viele WinCC flexible/Advanced Versionen besteht, vermute ich, daß Siemens das Problem als Systemeigenschaft erklärt (hat) und es nicht ändern wird. Du kannst ja mal den Siemens Support fragen und uns hier berichten.


Ein Folgeproblem:
Wenn dem Ausgabefeld.ProcessValue etwas zugewiesen wurde, dann kann man die Anzeige nicht löschen durch leer-löschen der Prozessvariable, sondern muß der Prozessvariable erstmal irgendwas (mind. 1 Zeichen) zuweisen:
Code:
Set IoField = HmiRuntime.Screens("Bild_1").ScreenItems("EA-Feld_1")
IoField.ProcessValue = "Test"
[COLOR="#008000"]'--> das EA-Feld zeigt nun "Test"[/COLOR]

SmartTags("EA-Feld_1_Prozessvariable") = ""
[COLOR="#008000"]'--> bewirkt nichts, das EA-Feld zeigt immer noch "Test"![/COLOR]

SmartTags("EA-Feld_1_Prozessvariable") = "x"
[COLOR="#008000"]'--> das EA-Feld zeigt nun "x"[/COLOR]

SmartTags("EA-Feld_1_Prozessvariable") = ""
[COLOR="#008000"]'--> das EA-Feld ist nun leer[/COLOR]


Zurück zum Bildname anzeigen:
Mache es so wie ich gleich in #2 vorgeschlagen hatte, und weise den Bildname nicht an das Ausgabefeld sondern an die am Ausgabefeld angeschlossene Prozessvariable zu. Das ist einfach, sauber, über Querverweise findbar und funktioniert zuverlässig:
Code:
SmartTags("intern\activeScreenName") = HmiRuntime.BaseScreenName
Falls Du den Bildname außer für die Anzeige im Bild auch noch anderweitig verwenden willst (z.B. für Multiplex-Geschichten), dann vereinfacht sich das Handling, wenn der Bildname in einer globalen Variable gespeichert ist statt in einer Objekt-Eigenschaft.


In dem ersten Projekt geht das ganze im zweiten geht es nicht mehr.
Das Grundprojekt ist gleich, die Visu ist auf beiden im Aufbau komplett identisch!
Das unterschiedlich funktionieren bei "identischen" Visu kann ich mir allerdings kaum vorstellen. Also, was ist der Unterschied zwischen den beiden Projekten? Hast Du auch mal die Visu/HMI alles neu übersetzt?

Es wäre schön, wenn Du die Fragen beantwortest:
Was für Geräte verwendest Du, worauf läuft Deine WinCC-Runtime? Welche WinCC-Version(en) genau?

Harald
 
Danke PN/DP. Da hab ich ja ganz schönen Blödsinn geschrieben. Sorry @jok3r :oops:

Ich habs jetzt auch mit ProcessValue probiert und es geht, auch wenn mich wundert dass es in der Liste der verfügbaren Dynamiken nicht aufgelistet ist.
Deshalb war ich mir eigentlich ziemlich sicher dass es nicht geht, gegeben wie vertrauenswürdig die TIA-F1-Hilfe ist...
Ich werd mal den Support befragen warum so ist.

Den Rest hat PN/DP eh schon geschrieben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo es nicht geht:

Ist die Anlage
S7 1515 V1.8
Panel 1500 Comfort 13.0.1.0

Wo es geht:
S7 1515SP PC mit Runtime
WinCC RT Advanced 13.0.1.0


Die SPS n kommunizieren via I-device. Bei gewissen Bildnamen werden Elemente also Button und Ausgabetexte ausgeblendet, somit bräuchte ich dafür eine Lösung.

Gruß
 
Wo es nicht geht: Panel 1500 Comfort 13.0.1.0

somit bräuchte ich dafür eine Lösung.
Naja, das sind aber nicht deine "zwei identischen Visus". Zwischen Windows-PC-Runtime und Windows-CE-Panel sind doch Unterschiede, teilweise in Funktionalität und Kompatibilität.

Nochmal. Was hindert dich jetzt daran herauszufinden was genau das Problem ist warum es am Panel nicht geht? Stichwort Err.Description...
Mit der Info kann man nach einer Lösung suchen. Mich würde aber nach wie vor nicht wundern wenn diese Eigenschaft am Panel nicht zulässig wäre.

PS: Eine Lösung (HMI-Variable) hat dir PN/DP schon zweimal genannt...
 
Panel 1500 Comfort

PC mit Runtime
WinCC RT Advanced
Ach, da ist ja der Unterschied der "identischen" Visus. Bei einer Runtime auf einem TP1500 Comfort Panel und einer PC-Runtime würde ich nicht den Eindruck erwecken wollen, daß die Visus "identisch" sind ... Warte mal ab, bis Du anfängst, Dateien lesen/schreiben zu skripten - da brauchst Du dann auf den beiden HMI-Geräten völlig verschiedene Skripte, weil die Laufzeitumgebungen da total verschieden sind.


Bei gewissen Bildnamen werden Elemente also Button und Ausgabetexte ausgeblendet, somit bräuchte ich dafür eine Lösung.
Möglichkeiten:
- diese Elemente nicht in der Vorlage projektieren, sondern nur in jedem Bild wo sie drauf sein sollen
- für die verschiedenen Bilder verschiedene Vorlagen benutzen
- bei den Bildern, wo ausgeblendet werden soll, bei Bildaufbau eine Variable (SmartTag) setzen und bei Bildabbau wieder rücksetzen und diese Variable zur Sichtbarkeitssteuerung verwenden
- oder generell bei jedem Bild bei Bildaufbau eine/die Bildnummer einer Variable (SmartTag) zuweisen (bei "Bild Aufgebaut": SetzeWert activeScreenNumber, 123) und diese Variable zur Sichtbarkeitssteuerung verwenden, die Bildnummer kann auch für Multiplexvariablen benutzt werden.

Wie machst Du das Ausblenden denn bis jetzt? Hast Du Dir ...zig Stringvergleiche auf den Bildname geskriptet oder hast Du an jedem Bildaufbau ein Skript, was direkt den auszublendenden Objekten die Eigenschaft "unsichtbar" zuweist? Oder ...? Um wieviele Bilder und wieviele auszublendenden Objekte geht es bei Dir?


Die SPS n kommunizieren via I-device.
Das ist für die Visus/WinCC Runtimes völlig ohne Belang.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nach dem Motto wollen Sie Siemens oder wollen sie dass es funktioniert ^^. Irgendwie traurig das ganze.

Damit hab ich es glöse ->
'############### fade out #######################
'------------------------------------------------
'- declar lokal properties
'------------------------------------------------
Dim button
Dim meldeanzeige

'------------------------------------------------
'- main
'------------------------------------------------

Set button = HmiRuntime.Screens(activeScreenName).ScreenItems("Button_Melden")
Set meldeanzeige = HmiRuntime.Screens(activeScreenName).ScreenItems("Meldeanzeige")

If activeScreenName = "Meldepuffer" Or activeScreenName = "Stör und Betriebsmeldungen" Then
button.Visible = False
meldeanzeige.Visible = False
Else
button.Visible = True
meldeanzeige.Visible = True
End If

Im Werkzeug (Runtime) gehts in der Anlage nicht. Noch trauriger ist dass wenn ich die Methode "HmiRuntime.Screens(activeScreenName).ScreenItems("Meldeanzeige")" habe sie aber nicht Dynamisch nutzen kann. Wofür soll sie dann gut sein, ich setze ja ein Skript ein weil ich mir Arbeit sparen will. Aber naja Siemens ....

Wemm ich dieses Problem ins Siemens Forum setze lesen da die Entwickler mit ,der sollte ich direkt an den Support gehen ?
Gruß
 
Zuletzt bearbeitet:
Das hat nix mit Siemens zu tun sondern mit Windows.
Windows CE hat nun mal einen anderen Funktionsumfang wie ein "richtiges" Windows.

Dafür habe ich in der Maschinenkonfiguration ein bit für CE und dann wird im Skript unterschieden.

Gruß

Jens
 
Das hat nix mit Siemens zu tun sondern mit Windows.
Windows CE hat nun mal einen anderen Funktionsumfang wie ein "richtiges" Windows.

Dafür habe ich in der Maschinenkonfiguration ein bit für CE und dann wird im Skript unterschieden.

Gruß

Jens

VBs ist in der TIA Software implementiert und nicht im System. Daher ist naheliegend dass das Problem bei Siemens liegt.

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

VBs ist in der TIA Software implementiert und nicht im System. Daher ist naheliegend dass das Problem bei Siemens liegt.

dies ist so nicht ganz richtig, auf einem CE System werden nicht alle VB Befehle / Möglichkeiten unterstützt, welche auf einem
normalen Windows zur Verfügung stehen. Daher ist es gut möglich, dass man eine WinCC flexible auf einem PC zum testen ohne
Hardware als Runtime startet und alle Skripte funktionieren und dann, wenn man es auf ein z.B. MP370 lädt, nichts mehr funktioniert.

Dies ist durchaus bekannt und kein Fehler von Siemens. Das einzige was verbesserungswürdig wäre, ist natürlich, dass Flexible oder
TiaWincc keine Warnung ausgibt, dass die Funktion auf dem gewählten Zielsystem nicht möglich ist.

Mit Grüßen
 
Sry aber ich kann mir nicht vorstellen das VB auf dem Host system ausgeführt wird, ich bin dem auch gerade nachgegangen es läuft im Tastmanager nur die Runtime und kein zusätzliche aktion die sich um VB kümmern würde. Wir reden hier ja von VBs und es macht doch keinen Sinn die extern zu implementieren zumal VBs auch referenz object von der Visu erstellen kann bzw ich das ja gemacht habe in dem ich VBs sage wo das Object liegt.
Hat dazu Siemens ein statmant geliefert oder wie kommst darauf ?
 
Was 3 erfahrene Forum Mitglieder dich versucht zu erklären: VBS ist ein Skripting Sprache für Windows. Es ist völlig von MS hantiert. Was du in TIA siehst ist nur ein Editor für VBS.

Es ist für diesen Grund das es ist ein guten Stil wenn man in ersten Eintrag sein System ins Detail spezifiziert wenn man ein Thema startet. Das kann viel hin-und-her posten sparen.
 
Zurück
Oben