TIA Win CC Professional V17 - Bildfenster über Bildbaustein mit VB-Script aufrufen

Ni_co

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

wie sind momentan damit beschäftigt endlich eine richtige Bibliothek im TIA-Portal zu entwickeln. Das läuft auch ganz gut, nur an einer Stelle hängt es.

Für das Win CC Pro im TIA Portal V17 haben wir uns Bildbausteine, für die Darstellung der Aggregate (Motoren, Schnecken, Förderbänder...) angelegt. Diese enthalten eine Grafikliste (eigen erstellte Grafiken) um die einzelnen Betriebszustände der Aggregate anzuzeigen. Im Win CC Comfort übergeben wir an dieser Stelle einen UDT als Schnittstelle und realisieren mit einer darin enthalten Variable die Sichtbarkeit eines weiteren Bildbaustein auf dem Visu-Bild, dieses enthält dann den Button für "Ein/Aus". Soweit so gut!

Der Nachteil ist, dass die Bildbausteine keine Objekte sind, welche wie Bildfenster im Professional frei verschiebbar sind. Wir haben aus dem Grund jetzt den Bildbaustein mit dem Button "Ein/Aus" in ein Fenster abgelegt und rufen dieses als Bildfenster auf unserem Startbild auf.

Um nun das entsprechende Bildfenster mit "Ein/Aus" (zugehörig zu dem entsprechenden Aggregat) aufzurufen, behelfen wir uns momentan mit folgendem VB-Script:

Sub OnClick(ByVal item)
Dim Station 'Variablendeklaration
Dim StationNr
Dim WindowName 'Variablendeklaration
Dim StationText1 'Variablendeklaration
Dim StationText2 'Variablendeklaration
Dim ButtonName
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

StationNr = 25

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
StationText1 = "hmiData_ST{"
StationText2 = "}"
ButtonName = "Button_ST_"
'Station = Stationsnummer des Antriebes
Station = StationText1 & StationNr & StationText2 '"hmiData_ST{100}"
'Vorindex des Bedienfensters
WindowName = ButtonName & StationNr

'hier nichts ändern
'Präfix: Direkte zuweisung des Fensters zu Variablen in HMI
'SetPropertyByConstant AccessPath, text & nummer, "TagPrefix", nummer &"."
SetPropertyByConstant AccessPath, WindowName , "TagPrefix", Station
'CaptionText: Name der oben im Fenster steht -> hier die Positionsnummer
'SetPropertyByConstant AccessPath, text & nummer, "CaptionText", "" & nummer
SetPropertyByConstant AccessPath, WindowName, "CaptionText", "" & StationNr
'Visible: das Fenster wird sichtbar gemacht| muss als letztes ausgeführt werden,
'da bei sichtbar werden die Variablenanbindung aktualisiert wird
'SetPropertyByConstant AccessPath, text & nummer, "Visible", "1"
SetPropertyByConstant AccessPath, WindowName , "Visible", "1"
'Ende der Funktion

End Sub

Hier brauchen wir nur bei Stationsnummer die entsprechende Positionsnummer des Aggregats eintragen.
Dieses Script fügen wir bei jedem Bildbaustein (Aggregat) aktuell händisch ein.


Nun würden wir uns gerne genau diesen Schritt sparen und die gleiche Funktion bereits in dem Bildbaustein einfügen. So das das ablegen des Bildbausteins und das anbinden des UDTs an die Schnittstelle die einzigen Arbeitsschritte bleiben. Das Problem ist einfach das man im Bildbaustein ausschließlich mit Standardfunktionen arbeiten kann. Systemfunktionen und Anwenderfunktionen sind nicht möglich.

Ich hoffe das Problem ist verständlich.
Hätte jemand hier Lösungvorschläge?

Mit freundlichen Grüßen.
 
Ich habe weder WinCC Pro, noch TIA V17, sondern nur Advanced auf TIA V15.1. Aber dort kann ich Skripte selber einfügen. Ich muss sie halt extra in dem Bildbaustein definieren. Fände es seltsam, wenn diese Funktion nachträglich abgeschafft worden wäre.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin.

Natürlich ist es korrekt, dass ich in einen Bildbaustein auch eine VB-Script hinterlegen kann. Aber nach meiner obigen Beschreibung möchte ich ja einen Bildbaustein aus einen Bildbaustein heraus sichtbar machen bzw. aufrufen. Das ganze muss das über eine Nummer bzw. einen Elementnamen erfolgen.
 
Ich glaube ich verstehe dein Problem. Du willst den Bildbaustein als Ganzes ein/aus-Schalten, hast aber nicht die Möglichkeit über "Animationen" oder ähnliches zu den von außen zu beschalten?

Sollte das dein Problem sein, dann folgender Vorschlag:
Was ist, wenn du alle Elemente des Bildbausteins mit einer Status-Variablen versiehst und dort alle Elemente in Abhängigkeit dieser Variable als sichtbar/unsichtbar schaltest?
 
Soweit hast du mich glaube ich richtig verstanden. Alleine einen Bildbaustein aus einem Bildbaustein heraus sichtbar zu machen führen wir bereits erfolgreich in Win CC Comfort und Advanced durch.

Wie ich oben bereits erwähnt habe, sind diese Elemente aber zur Laufzeit nicht mit der Maus verschiebbar. Deshalb rufen wir den Bildbaustein in einem Bildfenster auf. Ich muss aber, um möglichst geringen Aufwand bei der Entwicklung zu haben, die entsprechenden Parameter der Antriebe zur Laufzeit übergeben. Das löst halbwegs schön das obige Script.

Ich suche jetzt nach einer Lösung um dieses Script nicht mehr kopieren zu müssen, sondern irgendwie in den Bildbaustein bzw. Bildfenster zu bekommen. Natürlich auch gerne eine komplett andere Lösung die das gleiche macht.

Es ist wirklich schwierig zu erklären. Ich hoffe es ist halbwegs verständlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube du hast das sehr gut erklärt. Ich habe es nur nicht auf Anhieb verstanden, aber nach deinen weiteren Erläuterungen, habe ich es hoffentlich kapiert. Wenn nicht, sag noch einmal Bescheid.
Wenn ich das richtig verstanden habe, dann sind alle Dinge von Bildbausteinen "privat" und werden automatisch instanziert, sobald du sie irgendwo einfügst. D.h. du kommst nicht "aus deinem Bildbaustein" heraus, außer über die Schnittstelle. Das ist vermutlich der Grund, warum du nicht auf Systemfunktionen zurückgreifen kannst.
Du müsstest vermutlich den Umweg über eine Variable gehen, die der Bildbaustein an der Schnittstelle ausgibt und deren Wertänderung das von dir besagte Skript auslöst. An das Skript kannst du ja die UDT, die entsprechende Variable (oder du tust sie ins udt) und die Stationsnummer als Variablen überreichen - dann müsst ihr zumindest das Skript nicht mehr kopieren. Dafür musst du halt immer jeden Bildbaustein, den du einfügst mit den entsprechenden Variablen versorgen und an jedes UDT oder die besagte Auslöse-Variable das Skript per Wertänderung anbinden und auch dieses mit den entsprechenden Variablen versorgen. Eine kleinere Lösung fällt mir nicht ein. Die erscheint mir aber nicht weniger aufwendig, als das, was ihr gerade macht.
 
Ich kann deinem Lösungsvorschlag nur schwer folgen muss ich gestehen.

Ich versuche es nochmal ausführlicher mit anderen Worten zu beschreiben.

Das oben von mir aufgeführte Script hat im Grunde folgenden Funktion: Wird das Script durch eine Mausklick ausgeführt, so setzt sich aus den verschiedenen Befehlen der sogenannte Variablenvorindex zusammen. Dieser lautet genauso wie unsere Variablenstruktur für die Schnittestelle, was ich an den Bildbaustein übergeben möchte.

Der Vorindex bietet mir ja die Möglichkeit mit nur einem angelegten Bildfenster und dem darin enthaltenden Bildbaustein, das Bildfenster beliebig oft in meiner Visu aufzurufen bzw. zu instanziieren. Lediglich durch das Ändern der oben im Script aufgeführten (StationNr = 25), weis die Runtime konkret zur Laufzeit welche Daten übergeben werden sollen (Diese Daten sind ein Arrayelement mit dem Index 25 wie auch die Station Nr.). Gleichzeit wird in dem Script oben, mit Hilfe dieser Stationsnummer auch ein Name für eine Element in der Visu zusammengestellt (Dieser Name ist gleich dem eigentlichen Namen des Bildfensterelement, welches ich sichtbar machen möchte). - Soll bedeuten, ich gebe der Runtime durch das Script einen Namen von einem Element, welches wirklich existiert und bearbeite anschließend im Script die Eigenschaften dieses Elements.

Das funktioniert auch alles super und die Zeitersparnis ist super gut. Nur birgt das ständige manuelle Anpassen und Ändern von Nummer und kopieren des Scriptes auf jedes Elemente gewisses Fehlerpotentital. Aus diesem Grund würde ich gerne die erklärte Funktion in den Bildbaustein selber bekommen.
 
Zurück
Oben