Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 46422

WinCC Variable/Wert/Text in Bildfenster übergeben (Faceplate)

$
0
0
Guten Morgen Zusammen,

ich möchte gerne einen Wert eines Attributes meines Anwenderobjektes an ein Objekt eines Bildfenster übergeben, welches sich bei klicken mit der Maustaste öffnet.

Bisweilen habe ich dies mit Strukturentypen relalisiert, indem ich dem zu öffnenden Bildfester den Tag-Präfix übergeben haben.
Bei den Objekten in dem Bildfenster habe ich den die Variablen zugewiesen.

Dies klappt auch ohne Probleme

Zum besseren Verständnis im Anhang die entsprechenden Bilder der Attribute meines Anwenderobjektes und anbei der Code

Es können max 10 Bilder geöffnet werden. Die Bildfenster liegen nicht sichtbar im jeweiliegen Hauptbild und werden nach Bedarf durch das Script sichtbar geschaltet.
Namen der 10 Bildfenster: Bildfenster_1...Bildfenster_2...usw.

Code:

#include "apdefap.h"
void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{


// WINCC:TAGNAME_SECTION_START
char KKS[50];           
char Praefix[50];
char Titel[50];           
char Struktur[50];       
char Faceplate_Instanz[50];
char Bildfenster[50];
char Bildfenster_x[30];   
int i;



// WINCC:TAGNAME_SECTION_END


// Variablen Präfix zuweisen
sprintf(Struktur , "%s" , GetPropChar(lpszPictureName,lpszObjectName,"Praefix"));

// Überschrift für Bildfenster
sprintf(Titel, "%s" , GetPropChar(lpszPictureName,lpszObjectName,"KKS"));

// Vorbelegung Name des zu öffnenden Bildfensters Bildfenster
sprintf(Bildfenster , "%s.pdl" , GetPropChar(lpszPictureName,lpszObjectName,"Faceplate_Instanz"));



for (i=1 ; i<=11; i++)    // Schleifenzähler - Aufruf Bildfenster 1-10

    {   
                  sprintf(Bildfenster_x, "Bildfenster_%i", i);                                    // Nummer für das nächste Bildfenster zuweisen -> von 1-10

                if (GetPropBOOL(lpszPictureName,Bildfenster_x, "Visible") == FALSE)                    // Falls Bildfenster geöffnet -> schliessen
                {   

                                          SetPropChar(lpszPictureName, Bildfenster_x, "CaptionText", Titel);        // Überschrift vorbelegen
                  SetPropChar(lpszPictureName, Bildfenster_x, "TagPrefix", Struktur);                // Präfix für Bildfenster vorbelegen
                                          SetPropChar(lpszPictureName,Bildfenster_x,"PictureName", Bildfenster);    // Gewünschtes Bildfenster über Attribut Bildname (Picture Name) zuweisen
                                          SetPropChar(lpszPictureName,"Dennis","Text", pszProp);
                                          SetVisible(lpszPictureName,Bildfenster_x,TRUE);                              // Anzeige Bildfenster
                                          break;
                                          }                                 
                              else

              {
            if (i == 10)                                                                        // Bildfenster 10 errecht -> ab hier wird immer das Bildfenster 1 geschlossen und neu verwendet
            {
            sprintf(Bildfenster_x, "Bildfenster_1");                        // Bildfenster 1 fest auswählen
                                                SetVisible(lpszPictureName,Bildfenster_x,FALSE);              // Bildfenster 1 schliessen


            SetPropChar(lpszPictureName, Bildfenster_x, "CaptionText", Titel);        // Überschrift vorbelegen
            SetPropChar(lpszPictureName, Bildfenster_x, "TagPrefix", Struktur);        // Präfix für Bildfenster vorbelegen
            SetPropChar(lpszPictureName,Bildfenster_x,"PictureName", Bildfenster);        // Gewünschtes Bildfenster über Attribut Bildname (Picture Name) zuweisen
                        SetPropChar(lpszPictureName,"Dennis","Text", pszProp);
            SetVisible(lpszPictureName,Bildfenster_x,TRUE);                      // Anzeige Bildfenster
            break;
                                                }
                                      }
    }


Nun zu meinem eigentlichen Problem

Aufgrund der vorgegebenen Programmstruktur ist es mir nicht möglich mittels Strukturentypen in WinCC zu arbeiten. Ein DB für ALLES. Da ich doch recht faul bin und nicht 50 Faceplates händisch erstellen und jeweils verknüpfen möchte,
möchte ich mittels Mausklick dafür sorgen, das jeweils die passenden Werte übergeben werden.
Ich muss also z.B. das Attribut meines Anwenderobjektes "PV" (Variable: Test_Anbindung [FLOAT]) an ein Objekt bspw. Balken, Name "Test" Attribut "Prozessanschluss" übergeben.
Dieses befindet sich in dem Bild, welches über das Bildfenster Aufgerufen wird. Name des Bilder bspw. @FP_Analog
Dieses würde ich ganz normal im Anwenderobjekt im Attribute "Faceplate_Instanz" eintragen.

Anderes Beispiel wäre das Attribute Unit "Text" zu übergeben

Mein Ansatz war mir die Unit folgendermaßen einzulesen
Code:

sprintf(Einheit , "%s" , GetPropChar(lpszPictureName,lpszObjectName,"Unit"));
un dann so zu übergeben

Objektname im aufzurufenden Bild "Unit" Attribut "Text"

Code:

SetPropChar(Bildfenster_x,"Unit","Text", Einheit);
Dies funktioniert leider überhaupt nicht.

Hat jemand einen Lösungsansatz für mich?
Angehängte Grafiken

Viewing all articles
Browse latest Browse all 46422


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>