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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: WinCC 7.0 Aufruf mehrerer Bildfenster & Präfix im Hauptbild

  1. #11
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.351
    Danke
    452
    Erhielt 692 Danke für 517 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ahhh... Ich glaub jetzt hat meine Glaskugel Signal bekommen....

    Du hast ein Grundbild. (Bsp. Grundbild.pdl)...
    Im Grundbild hast du mehrere Bildfenster (Bps. Bildfenser_1 bis Bildfenster_9)
    Jedes Bildfenster hat eine Button über dass es aufgerufen werden soll...
    Die Bildfenster verwenden alle das selbe Bild (Bsp. BildFuerBildfenster.png)

    Ab hier bin ich mir unsicher mit was du mit den Präfixen bzw. der SetTextFunktionen willst.
    Das Setzen der Präfix für die einzelnen Bilder ginge so:
    Code:
    //Buttonscript
    
     SetTagPrefix(lpszPictureName, "Bildfenster_1", "Mein Präfix")
    
     //In dem Fall ist lpszPictureName der Name des Fensters wo der Button drin liegt "Grundbild.pdl"
     //Den Wert bekommst du beim Scritpaufruf mitübergeben
    Zum zweiten Problem mit dem SetText.
    Wenn ich dich richtig verstanden habe möchtest du eine Text-Eigenschaft
    eines Textfeldes im Bildfenster verändern.
    Also:
    Grundbild.pld -> Bildfenster_1 -> BildFuerBildfenster.pdl -> Textfeld_1 -> Text-Eigenschaft.

    Dann würde ich auch dein Problem verstehen das du bei 2 aufgerufenen Fenstern die Text-Eigenschaft immer im ersten Bildfenster änderst.
    Du hast dann vermutlich sowas wie geschrieben:
    Code:
    SetText("BildFuerBildfenster.pdl","Textfeld_1", "MeinText");
    Das würde dein Problem erklären, denn wenn mehrere Bildfenster mit dem selben Bildnamen gleichzeitig offen sind, man den AccessPath aber nicht genauer spezifiziert sonder nur über den Bildnamen (welcher nicht mehr eindeutig ist) arbeitet, dann wird die Aktion nach meiner Erinnerung nach im erster aufgerufenen Bildfenster ausgeführt.

    Hab ich das richtig verstanden oder muss ich meine Glaskugel wegschmeißen?

    Das erklärt aber immer noch nicht die Zeile die du uns gezeigt hast:
    Code:
    SetText(lpszObjectName,"Text_Objekt","Statischer Text");
    Das Klick-Script bekommt in lpszObjectName den Namen des Objektes (der Button), von dem aus es aufgerufen wurde, mit gegeben.
    Da müsste also der Button-Name z.B. "Button_1" drin stehen.

    Die SetText-Zeile von dir würde also eine geöffnetes Bild mit dem Namen "Button_1" suchen, darin nach einem Objekt "Text_Objekt" und dort dann versuchen die Text-Eigenschaft zu ändern. Wenn der Button nicht gleich heißt wie das Bild in deinen Bildfenstern kann ich mir nicht vorstellen dass da was raus kommt.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  2. #12
    Registriert seit
    05.06.2013
    Beiträge
    83
    Danke
    0
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zum zweiten Problem mit dem SetText.
    Wenn ich dich richtig verstanden habe möchtest du eine Text-Eigenschaft
    eines Textfeldes im Bildfenster verändern.
    Also:
    Grundbild.pld -> Bildfenster_1 -> BildFuerBildfenster.pdl -> Textfeld_1 -> Text-Eigenschaft.
    Ja, das hab ich doch schon geschrieben. So soll es sein

    Dann würde ich auch dein Problem verstehen das du bei 2 aufgerufenen Fenstern die Text-Eigenschaft immer im ersten Bildfenster änderst.
    Du hast dann vermutlich sowas wie geschrieben:
    Code:

    SetText("BildFuerBildfenster.pdl","Textfeld_1", "MeinText");
    Genau.

    Hab ich das richtig verstanden oder muss ich meine Glaskugel wegschmeißen?
    Richtig verstanden.

    Das erklärt aber immer noch nicht die Zeile die du uns gezeigt hast:
    Code:

    SetText(lpszObjectName,"Text_Objekt","Statischer Text");
    Ist evtl. nicht richtig. Hab ich nie behauptet.

  3. #13
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.351
    Danke
    452
    Erhielt 692 Danke für 517 Beiträge

    Standard

    Wow... eine Streicheleinheit für die Glaskugel...

    Jetzt bin ich mir nur nicht sicher wie die korrekte Lösung aussieht... schon wieder lang her das ich vor nem WinCC gesessen bin...

    Kurze Info zum Parameter lpszPicturName
    Zitat Zitat von WinCC V7.2 WinCC: Scripting (VBS, ANSI-C,VBA)
    2.15.1 lpszPictureName
    Overview
    "lpszPictureName" is the name of the picture.
    If you configure an action on a property or a "Mouse-click" event in WinCC, the name of the
    picture is provided as "lpszPictureName" in the action. The picture name has the following
    structure:
    <BASE PICTURE NAME>.<PICTURE WINDOW NAME>:<PICTURE NAME>. ... .<Picture
    window name>:<Picture name>.
    The "BASE PICTURE NAME" and the "PICTURE NAME" are provided without the file
    extension ".PDL".
    This enables you to identify the object's picture path. You can also address specific picture
    windows, if a process picture is opened more than once for example.

    Wenn ich's richtig im Kopf hab müsste man an deinen Pfad lpszPictureName denn du vom Button bekommst nur "<Punkt>Bildfenstername<Doppelpunkt>Bildname" dranhängen.
    Könnte also so aussehen
    Code:
    char lpszPicName_BildF[255];
    strcpy(lpszPicName_BildF,lpszPictureName);
    strcat(lpszPicName_BildF,".Bildfenster_1:BildFuerBildfenster");
    
    SetText(lpszPicName_BildF, "TextFeld_1", "MeinText")
    Hab jetzt aber keine Testumgebung hier. Bin mir auch nicht sicher ob hinten noch ein ".pdl" dran muss.

    Am einfachsten ist du vergleichst die Werte von lpszPictureName dort wo dein Aufrufbutton sitzt
    zu dem Wert innerhalb deines Bildfensters.
    Zum Beispiel einfach im Fester des Aufruf-Buttons ein TextFeld names "TestTextFeld" einfügen und dazu noch einen Button.
    Im ButtonScipt dann:
    Code:
    SetText(lpszPictureName, "TestTextFeld", lpszPictureName);
    Die Zeile schreibt dir den Wert von lpszPictureName in das Test-Textfeld rein.
    Das selbe macht du innerhalb des Bildes "BildFuerBildfenster.pdl".
    Dann kannst du die Werte mal ansehen und vergleichen.

    Ach ja, noch was. Du kannst erst auf die Objekt innerhalb der Bildfenster zugreifen nachdem das Bild ins Bildfenster geladen und das Bild auch sichtbar geschalten wurde.
    Geändert von RONIN (31.03.2015 um 21:39 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  4. #14
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    So sollte es funktionieren wenn du die festen Texte noch an deine Gegebenheiten anpasst:

    Code:
    // WINCC:PICNAME_SECTION_START
    #define POPUPPICTURE "TestPopup.pdl"
    // WINCC:PICNAME_SECTION_END
    
    #define BILDFENSTEROBJECT "Bildfenster01"
    
    char szPicturePath[512];
    
    szPicturePath[0] = '\0';
    
    /* Kompletten Pfad zum Bild im Bildfenster */
    sprintf(szPicturePath, "%s.%s:%s", lpszPictureName, BILDFENSTEROBJECT, POPUPPICTURE);
    
    /* Bildname setzen */
    SetPropChar(lpszPictureName, BILDFENSTEROBJECT, "PictureName", POPUPPICTURE);
    
    /* Sichtbar schalten */
    SetPropBOOL(lpszPictureName, BILDFENSTEROBJECT, "Visible", TRUE);
    
    /* Und statischen Text in einen Objekt setzen */
    SetPropChar(szPicturePath, "StatischerText1", "Text", "Nur ein Test");

  5. #15
    Registriert seit
    05.06.2013
    Beiträge
    83
    Danke
    0
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    So sollte es funktionieren wenn du die festen Texte noch an deine Gegebenheiten anpasst:

    Code:
    // WINCC:PICNAME_SECTION_START
    #define POPUPPICTURE "TestPopup.pdl"
    // WINCC:PICNAME_SECTION_END
    
    #define BILDFENSTEROBJECT "Bildfenster01"
    
    char szPicturePath[512];
    
    szPicturePath[0] = '\0';
    
    /* Kompletten Pfad zum Bild im Bildfenster */
    sprintf(szPicturePath, "%s.%s:%s", lpszPictureName, BILDFENSTEROBJECT, POPUPPICTURE);
    
    /* Bildname setzen */
    SetPropChar(lpszPictureName, BILDFENSTEROBJECT, "PictureName", POPUPPICTURE);
    
    /* Sichtbar schalten */
    SetPropBOOL(lpszPictureName, BILDFENSTEROBJECT, "Visible", TRUE);
    
    /* Und statischen Text in einen Objekt setzen */
    SetPropChar(szPicturePath, "StatischerText1", "Text", "Nur ein Test");

    Wunderbar, genau so funktioniert es!
    THX!

    Code:
    /* Sichtbar schalten */
    SetPropBOOL(lpszPictureName, BILDFENSTEROBJECT, "Visible", TRUE);
    Diese Zeile musste ich allerdings entfernen, sonst kann das Bildfenster nicht mehr geschlossen werden.

  6. #16
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von win2000 Beitrag anzeigen
    Code:
    /* Sichtbar schalten */
    SetPropBOOL(lpszPictureName, BILDFENSTEROBJECT, "Visible", TRUE);
    Diese Zeile musste ich allerdings entfernen, sonst kann das Bildfenster nicht mehr geschlossen werden.
    Wirklich? Welche Einstellungen hast du denn für das Bildfenster gemacht? Ich stelle das immer in Voreinstellung auf Unsichtbar, immer im Vordergrund, mit einen Rahmen und schließbar. Dann funktioniert das mit den Visible schalten, bzw. muss so gemacht werden.

  7. #17
    Registriert seit
    05.06.2013
    Beiträge
    83
    Danke
    0
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Bei Vordergrund habe ich "Nein". Rest gleich.

  8. #18
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.351
    Danke
    452
    Erhielt 692 Danke für 517 Beiträge

    Standard

    Zitat Zitat von win2000 Beitrag anzeigen
    Code:
    /* Sichtbar schalten */
    SetPropBOOL(lpszPictureName, BILDFENSTEROBJECT, "Visible", TRUE);
    Diese Zeile musste ich allerdings entfernen, sonst kann das Bildfenster nicht mehr geschlossen werden.
    SetPropBOOL(lpszPictureName, BILDFENSTEROBJECT, "Visible", TRUE)
    ist das selbe wie
    SetVisible(lpszPictureName, BILDFENSTEROBJECT, TRUE)

    kann mir nicht vorstellen dass dies Schuld ist. Sofern du dein Skritpt nicht zyklisch ausführst.

    Mit welchem Befehl öffnest du den jetzt das Bildfenster, nachdem du obige Zeile entfernt hast.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  9. #19
    Registriert seit
    05.06.2013
    Beiträge
    83
    Danke
    0
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Klick auf einen Button. "Ereignis" -> Mausklick -> Anzeige Bildfenster...

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 02.10.2014, 15:58
  2. wincc v6.0 bildfenster problem
    Von WIX im Forum HMI
    Antworten: 4
    Letzter Beitrag: 11.02.2009, 07:38
  3. Bildfenster WINCC 6.2
    Von nae im Forum HMI
    Antworten: 4
    Letzter Beitrag: 09.12.2008, 21:07
  4. Bildfenster WInCC
    Von franzlurch im Forum HMI
    Antworten: 3
    Letzter Beitrag: 10.10.2008, 08:50
  5. Antworten: 5
    Letzter Beitrag: 04.12.2007, 07:24

Lesezeichen

Berechtigungen

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