Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: WinCC flexibile Adv Projekt 1 VBS funktioniert Projekt 2 VBS funktioniert nicht

  1. #1
    Registriert seit
    08.09.2016
    Beiträge
    32
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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ß
    Zitieren Zitieren WinCC flexibile Adv Projekt 1 VBS funktioniert Projekt 2 VBS funktioniert nicht  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.556
    Danke
    825
    Erhielt 2.826 Danke für 2.275 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    jok3r ist offline Benutzer
    Themenstarter
    Registriert seit
    08.09.2016
    Beiträge
    32
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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ß
    Geändert von jok3r (15.09.2016 um 16:35 Uhr)

  4. #4
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.070
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    Zitat Zitat von jok3r Beitrag anzeigen
    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.../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....?
    Geändert von RONIN (15.09.2016 um 16:59 Uhr) Grund: PS angehängt
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  5. #5
    jok3r ist offline Benutzer
    Themenstarter
    Registriert seit
    08.09.2016
    Beiträge
    32
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Unbenannt.jpg

    Also in der Hilfe gibt es die Methode schon.

  6. #6
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.070
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    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.
    Geändert von RONIN (15.09.2016 um 17:23 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  7. #7
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.070
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    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.ProcessVarlue = "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
    Geändert von RONIN (16.09.2016 um 10:29 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.556
    Danke
    825
    Erhielt 2.826 Danke für 2.275 Beiträge

    Standard

    Zitat Zitat von jok3r Beitrag anzeigen
    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?

    Zitat Zitat von jok3r Beitrag anzeigen
    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:
    Zitat Zitat von jok3r Beitrag anzeigen
    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
    Geändert von PN/DP (15.09.2016 um 17:50 Uhr) Grund: Erkenntnis: das Textfield ist ein IOField
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.556
    Danke
    825
    Erhielt 2.826 Danke für 2.275 Beiträge

    Standard

    Zitat Zitat von RONIN Beitrag anzeigen
    Code:
    Set IoField = HmiRuntime.ActiveScreen.ScreenItems("EA-Feld_1")
    
    IoField.ProcessVar = "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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    RONIN (16.09.2016)

  11. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.556
    Danke
    825
    Erhielt 2.826 Danke für 2.275 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von jok3r Beitrag anzeigen
    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
    'oder
    variable = HmiRuntime.BaseScreenName
    'oder
    variable = "Bild_1"
    
    Set IoField = HmiRuntime.Screens(variable).ScreenItems("EA-Feld_1")
    '--> Runtime-Error: "no screen item 'EA-Feld_1'; please check transfer of names ..."
    
    Set IoField = HmiRuntime.Screens("Bild_1").ScreenItems("EA-Feld_1")
    '--> das funktioniert korrekt
    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"
    '--> das EA-Feld zeigt nun "Test"
    
    SmartTags("EA-Feld_1_Prozessvariable") = ""
    '--> bewirkt nichts, das EA-Feld zeigt immer noch "Test"!
    
    SmartTags("EA-Feld_1_Prozessvariable") = "x"
    '--> das EA-Feld zeigt nun "x"
    
    SmartTags("EA-Feld_1_Prozessvariable") = ""
    '--> das EA-Feld ist nun leer

    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.


    Zitat Zitat von jok3r Beitrag anzeigen
    In dem ersten Projekt geht das ganze im zweiten geht es nicht mehr.
    Zitat Zitat von jok3r Beitrag anzeigen
    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 19.02.2016, 13:55
  2. WinCC V13 VBS Skript funktioniert nicht
    Von Bobbybau91 im Forum HMI
    Antworten: 8
    Letzter Beitrag: 18.09.2015, 11:44
  3. WINCC 2008 Adv. VBS-Script
    Von Flash1506 im Forum HMI
    Antworten: 5
    Letzter Beitrag: 01.09.2015, 09:36
  4. Antworten: 8
    Letzter Beitrag: 01.10.2011, 21:17
  5. VBA - Wie funktioniert das in VBS - Win CC?!
    Von Anonymous im Forum Programmierstrategien
    Antworten: 1
    Letzter Beitrag: 04.10.2005, 16:13

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •