Aktueller Bildname mit VBScript

mkd

Level-2
Beiträge
197
Reaktionspunkte
30
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte in einer Statusleiste in einem WinnCC flex Projekt (MP277) einen Text passend zum aktuellen Bild Schreiben.
In der Vorlage habe ich ein EA Feld angelegt und als Anzeigevariable eine interne String Variable zugewiesen.

Jetzt geht es mir darum in einem Script den aktuellen Bildnamen auszulesen und mit einem Switch oder if Konstrukt einen Text der internen Variablen zuzuweisen.
Die Switch / if the... Geschichte werde ich als VBScript Neuling ohne Probleme hinbekommen. Was mir Sorgen macht ist die Abfrage woher ich komme, das heißt welche Taste ich gedrückt habe.
Ich möchte nicht für jede Taste ein Script hinterlegen sondern alles über eins Organisieren.


Über konstruktive Tips und Hilfestellungen würde ich mich sehr freuen!


Gruß
mkd
 
Wenn ich mich nicht täusche sollte man mit
HmiRuntime.BaseScreenName
den aktuellen Bildanamen heraus bekommen
[EDIT]
Ich habe wohl deine Frage nicht zu Ende gelesen
:oops:
Du wolltest ja was anderes wissen, muss ich also noch mal gucken
[\EDIT]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte in einer Statusleiste in einem WinnCC flex Projekt (MP277) einen Text passend zum aktuellen Bild Schreiben.
In der Vorlage habe ich ein EA Feld angelegt und als Anzeigevariable eine interne String Variable zugewiesen.

Jetzt geht es mir darum in einem Script den aktuellen Bildnamen auszulesen und mit einem Switch oder if Konstrukt einen Text der internen Variablen zuzuweisen.
Die Switch / if the... Geschichte werde ich als VBScript Neuling ohne Probleme hinbekommen. Was mir Sorgen macht ist die Abfrage woher ich komme, das heißt welche Taste ich gedrückt habe.
Ich möchte nicht für jede Taste ein Script hinterlegen sondern alles über eins Organisieren.


Über konstruktive Tips und Hilfestellungen würde ich mich sehr freuen!


Gruß
mkd


Ein Skript in dem Fall wäre nicht nötig........
Du kannst in der Vorlage mehrere Textfelder (übereinander) projektieren
Mit der Scihtbarkeit kannst du mit einer Variable (Var_Sps) aus der SPS
den Text des akt. Bildes einblenden.
Die Var_Sps (Wort) sollst du in Verbindungen-->Bereichzeiger-->Bildnummer projektieren
Dadurch wird die aktuellle aufgeschlagene Bildnummer in die Steuerung übertragen.

Die Hilfe zum Bereichzeiger kannst Du der Hotline-Doku entnehmen...
 
Ein Skript in dem Fall wäre nicht nötig........
Du kannst in der Vorlage mehrere Textfelder (übereinander) projektieren
Mit der Scihtbarkeit kannst du mit einer Variable (Var_Sps) aus der SPS
den Text des akt. Bildes einblenden.
Die Var_Sps (Wort) sollst du in Verbindungen-->Bereichzeiger-->Bildnummer projektieren
Dadurch wird die aktuellle aufgeschlagene Bildnummer in die Steuerung übertragen.

Die Hilfe zum Bereichzeiger kannst Du der Hotline-Doku entnehmen...


Hallo,

das ist schon richtig, ich könnte ja auch mit Textlisten arbeiten.
Ich möchte die Kommunikation mit der SPS Vermeiden, da ich das dann zusätzlich im S7 Programm integrieren muss.
Ein Script könnte ich auch schneller in neue Projekte einbinden.
Zusätzlich möchte ich mal was mit Scripten machen :ROFLMAO:
 
So, habe ein wenig herumgespielt.

Mit:
Code:
'If    (HmiRuntime.ActiveScreen.ObjectName = "Bild_3") Then
    Bildname = "Behälter"
End If

Klappt es soweit. Wenn ich mit einer Taste Bild_3 aufrufe und mit der gleichen Taste im Loslassen Event das Script ausführe erscheint schonmal der Text.
Leider muss ich aber dann zweimal drücken bis der richtige Text erscheint.

Gibt es da so eine Art Verzögerung die ich am Anfang in das Script einbauen kann?

Was mich auch noch stört: Bei allen Tasten (Bildaufruf) klappt es, nur bei einer Taste bekomme ich im Simulator immer folgende Meldung.

"Objekt erforderlich HMI.Runtime.ActiveScreen wurde nicht behandelt." :confused::confused:
Warum nur bei der einen Taste?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.
Du kannst auch eine Var_intern projektieren.

Beim Bild-Aufbau (Allegemein-->Ereignisse-->Aufgebaut) soll Var_Intern=Akt. Bildnummer
Anschließend kannst Du Var_Intern im Skript einsetzen.........
 
...es gebe auch noch die möglichkeit die Variablen übern den Aufgabenplaner zu bearbeiten. Da gibt es ein Ereignis "Bildwechsel",
dieses Ereignis kann dann eine Funktion aufrufen die dann dein Script bearbeitet.
So mußt du das nicht bei jedem Bild projektieren...

gruss Helmut
 
@Helmut:
Danke für den Tip! Genau so mache ich es jetzt. Ich lege eine Aufgabe Bildwechsel an und führe hier mein Script aus.

Code:
Select Case HmiRuntime.ActiveScreen.ObjectName
    Case "Bild_01"
        Bildname = "Übersicht"    
    Case "Bild_02"
        Bildname = "Entladung"
    Case "Bild_03"
        Bildname = "Behälter"
    Case "Bild_04"
        Bildname = "Entnahme"          
End Select
Klappt soweit wunderbar.
Komischerweise kommt es bei Wechsel auf Bild_03 im Script zu dem Fehler:

"Objekt erforderlich HMI.Runtime.ActiveScreen wurde nicht behandelt."

Kann jemand mir da weiterhelfen?

Gruß
mkd
 
Ja, habe ich richtig bezeichnet. Das Problem habe ich bei mehreren Bildern.

Stelle ich jetzt vor den Code
Code:
Dim objActiveScreen
Set objActiveScreen = HmiRuntime.ActiveScreen

'wenn ein Bild gefunden wurde
If Not objActiveScreen Is Nothing Then
...
End If

Dann kommt es schon einmal nicht mehr zur VB Script Fehlermeldung.

In der Hilfe steht dazu:
"Wenn Sie in einem Skript die Eigenschaft "ActiveScreen" abfragen, so kann es z.B. aufgrund eines ScreenSavers vorkommen, dass die Eigenschaft kein gültiges "Screen"-Objekt sondern "Nothing" zurückliefert und eine Systemmeldung angezeigt wird."




Toll, warum ist das dann bei manchen Bildern und bei anderen nicht?


Es handelt sich um ein neues Projekt, also alles neue Bilder...
 
...ich denke die Hilfe bezieht sich darauf wenn der Bildschirmschoner gestartet wird dieses natürlich bei deiner Anwendung zu fehlern führen könnte.
Schalte doch erst einaml den Bildschirmschoner ab....!
 
Der Fehler tritt beim dritten, sechsten,siebten ... Bild auf.
Die Bildnummern sind aber nicht in der Reihenfolge vergeben.

Wäre ja zu schön wenn es klappen würde....

EDIT: Habe ich eigentlich erwähnt das ich im Momen tnur mit dem Simulator arbeite?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...du hast doch schon eine Fehlerauswertung geschrieben. Las dir doch Anzeigen was in deiner Variablen steht. Mit ShowSystemAlarm objActiveScreen, ich weiß jetzt nicht ob das mit der Variablen direkt geht aber ein versuch ist es wert...
 
ich möchte in einer Statusleiste in einem WinnCC flex Projekt (MP277) einen Text passend zum aktuellen Bild Schreiben.
In der Vorlage habe ich ein EA Feld angelegt und als Anzeigevariable eine interne String Variable zugewiesen.

Jetzt geht es mir darum in einem Script den aktuellen Bildnamen auszulesen und mit einem Switch oder if Konstrukt einen Text der internen Variablen zuzuweisen.

Mit dem folgendem VBScript wird der aktuelle Bildname ausgelesen und je nach Bildname ein unterschiedlicher Text in eine interne Variable vom Datentyp String geschrieben.

Die interne Variable vom Datentyp String wird in der Vorlage einem EA-Feld zugewiesen.

Das VBScript wird beim Aufbau des Startbildes sowie im Aufgabenplaner bei einem Bildwechsel ausgeführt.

Code:
' BaseScreenName-Eigenschaft
'
' Legt das aktuelle Grundbild fest oder gibt es zurück
 
Dim Bildname
 
Bildname = HmiRuntime.BaseScreenName
 
If Bildname = "Startbild" Then
   SmartTags("Bildtext") = "Text für Startbild"
End If
 
If Bildname = "Systembild" Then
    SmartTags("Bildtext") = "Text für Systembild"
End If

Gruß Kai
 

Anhänge

  • MP277_Vorlage.jpg
    MP277_Vorlage.jpg
    582,7 KB · Aufrufe: 104
  • MP277_Startbild.jpg
    MP277_Startbild.jpg
    577,3 KB · Aufrufe: 88
  • MP277_Variablen.jpg
    MP277_Variablen.jpg
    359,6 KB · Aufrufe: 82
  • MP277_Skripte.jpg
    MP277_Skripte.jpg
    442,5 KB · Aufrufe: 85
  • MP277_Aufgabenplaner.jpg
    MP277_Aufgabenplaner.jpg
    379 KB · Aufrufe: 77
Hallo Kai,

jupp, genauso habe ich es jetzt auch gelöst. Zusätzlich lasse ich die entsprechenden LED´s auch noch leuchten :ROFLMAO:, indem ich eine interne Variable mit Werten versehe.

Mein Fehler lag im Detail, ich hatte programmiert:
Code:
HmiRuntime.ActiveScreen.ObjectName
Richtig ist ja:
Code:
HmiRuntime.BaseScreenName
Trotzdem ein großes Danke für deine Ausführliche Erklärung!

Gruß
mkd
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nur mal noch so als Dreingabe:

Wenn man ein Projekt mit dem Projektassistent erstellt kann man auch u.A. diese Funktion automatisch integrieren lassen -> das hierbei generierte Script "DisplayCurrentScreenName" lässt sich dann in jedes Blanko-Projekt einbinden und wird ebenfalls per Aufgabenplaner "bei Bildwechsel" ausgeführt...

Das habe ich mal beim ersten Experimentieren mit Flexible per Zufall entdeckt und es immer wieder verwendet. :s4:

EDIT: Ich muss gestehen nachdem ich mir die Aufgabe das zweite mal durchgelesen habe daß das nur mit dem Script vom Kai geht - weil das von mir genannte ja wirklich NUR den tatsächlichen Bildnamen übernimmt... Na ja, ist halt schon spät gewesen...
 
Zuletzt bearbeitet:
Zurück
Oben