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.
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
un dann so zu übergeben
Objektname im aufzurufenden Bild "Unit" Attribut "Text"
Dies funktioniert leider überhaupt nicht.
Hat jemand einen Lösungsansatz für mich?
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"));
Objektname im aufzurufenden Bild "Unit" Attribut "Text"
Code:
SetPropChar(Bildfenster_x,"Unit","Text", Einheit);
Hat jemand einen Lösungsansatz für mich?