WinCC 7.2 OnlineTrendControl mit Präfix aus Prozesswertarchiv befüllen

SchnitzelMatzi

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

ich bin derzeit am kämpfen mit einem C-Skript das mir meine OnlineTrendControl befüllt.
Da das ganze mit Variablen zusammenbauen aus "GetParentPicture" und Prozesswertarchiv auch nicht klappte, wollte ich klein anfangen und mit dem Skript nur eine Variable (nicht aus dem Archiv sondern direkt aus dem Variablenhaushalt) an das TrendControl übergeben.
Code:
	SetPropWord(lpszPictureName,"Control1","TrendIndex", 0);				
	SetPropChar(lpszPictureName,"Control1","TrendTagName","DB_TEMP_MWK_T010.Analogwert_IST_Ana_8_Temp");
auch probiert(da ich einen Variablen-Präfix mit "DB_TEMP_MWK_T010." reinbekomme):
Code:
	SetPropWord(lpszPictureName,"Control1","TrendIndex", 0);				
	SetPropChar(lpszPictureName,"Control1","TrendTagName","Analogwert_IST_Ana_8_Temp");
Die Datenversorgung für diese Kurve hab ich auf 0 gestellt damit ich sie über das Skript beschreiben kann.
Die C-Aktion habe ich bei OnLoaded des OTC reingestellt und mit einem extra-Button hatte ich es auch schon probiert.
Die Datenversorgung über Archiv- und Onlinevariablen funktioniert aber einwandfrei.

Vielleicht kann mir jemand sagen was ich falsch mache oder vergessen habe.

Danke im voraus
Matthias
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das funktioniert meines Wissens nicht. Was spricht dagegen eine Archivvariable anzulegen?

Eigentlich will ich ja eine Archivvariable anlegen, nur wollte ich mit einer einfachen Variable probieren da es mit einer aus dem Archiv nicht funktionierte.
Wenn ich die Datenversorgung auf Archivvariable stelle funktioniert es ja wunderbar, nur leider wenn ich die Datenversorgung auf 0-Keine stelle um über das C-Skript zu arbeiten funktioniert das nicht. Quasi funktioniert mein Skript nicht!

Wenn das Wörtchen wenn nicht wär ;)
 
Auch wenn du mit einem C-Skript bestückst, musst du die Datenversorgung auf die von dir gewünschte Art einstellen ... also entweder "Archiv" oder wenn du zum Testen eine direkte Variable anzeigen willst auf "Online". Und dann einfach dynamisch über das Skript die Variable ändern bzw. einen leeren String reinschreiben, um keine Kurve anzuzeigen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Um flexibel zu sein und nur ein Skript zu haben bekomme ich von lpszObjectName quasi einen Präfix der gleich ist wie der Strukturname und habe darin 5 Variablen.
Dann bastle ich mir mit dem Prozessarchiv, dem Präfix und einem der 5 Variablen den Namen der anzuzeigenden Archivvariable zusammen.

Code:
void diagrammTUT(char* lpszPictureName, char* lpszObjectName)//, char* lpszPropertyName{
	#define apc_temp1 "Analogwert_IST_Ana_8_Temp"


	static char Trend1_tag[120];


	char *pParentPicture;


	SetPropWord(lpszObjectName,"Control1", "TrendIndex", 0);				// Auswählen der Kurve die Dargestellt werden soll
	pParentPicture = GetParentPicture(lpszPictureName);					// Aufrufendes Objekt


	sprintf(Trend1_tag,"Prozesswertarchiv\\",pParentPicture,apc_temp1);


	SetPropChar(lpszPictureName,"Control1","TrendTagName",Trend1_tag);
}

Ich bin konnte es nicht überprüfen ob dieser Code auch funktioniert. Darum wollte ich es vorerst mit einer einfachen Variable bzw. direkt mit einer Archivvariable testen.
Das wäre das dieser Code:
Code:
	SetPropWord(lpszPictureName,"Control1","TrendIndex", 0);
	SetPropChar(lpszPictureName,"Control1","TrendTagName","Prozesswertarchiv\DB_TEMP_MWK_T010.Alarm_MIN_Ana_8_Temp");

Mit VB-Script habe ich es heute auch schon probiert jedoch funktioniert dieser auch nicht.
Code:
Dim objCon1
Set objCon1 = HMIRuntime.ActiveScreen.ScreenItems("Control1")
objCon1.TrendIndex=0
objCon1.TrendTagName="Prozesswertarchiv\DB_TEMP_MWK_T010.Analogwert_IST_Ana_8_Temp"

Die Idee das ich datasetObject deaktiviert ist, ist mir auch schon gekommen, aber andere Skripte funktionieren und die HMRT ist auch aktiviert.
 
Erweitere mal das hinzufügen noch um ein paar Anweisungen. Kurvenfenster und Achsen vorher bitte im Konfigurationsdialog anlegen.

SetPropChar(lpszPictureName,"Control1","TrendAdd","Ana_8");
SetPropChar(lpszPictureName,"Control1","TrendTrendWindow","Kurvenfenster 1");
SetPropChar(lpszPictureName,"Control1","TrendTimeAxis","Zeitachse 1");
SetPropChar(lpszPictureName,"Control1","TrendValueAxis","Wertachse 1");
SetPropWord(lpszPictureName,"Control1","TrendIndex",0);
SetPropChar(lpszPictureName,"Control1","TrendTagName","Archivvariable");
 
Code:
	sprintf(Trend1_tag,"Prozesswertarchiv\\",pParentPicture,apc_temp1);
Du musst in den Formatstring auch die Formatspezifizierer angeben, an der Stelle die Werte eingesetzt werden sollen.

Wenn du zwei Parameter hast, brauchst du auch zwei Spezifizierer, bei dir wahrscheinlich:
Code:
sprintf(Trend1_tag,"Prozesswertarchiv\\%s%s",pParentPicture,apc_temp1);

Was du mit dem Namen vom Parentpicture machen willst musst du selbst wissen.
Meiner Meinung nach ist das überflüssig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

hatte jetzt länger keine Zeit um mich mit diesem Problem zu beschäftigen.
Vielleicht hat ja noch jemand zeit sich diesen Fehler anzusehen und Vorschläge abzugeben :D

Es funktioniert mittlerweile fast richtig danke eurer Hilfe ;)
Code:
	static char Trend1_tag[120];
	static char Trend3_tag[50];

// Hier liegt noch das letzte Problem
char*Trend2_tag;
Trend2_tag = GetTagChar("Tempwitchobjekt");


		
	strcpy(Trend3_tag,"Warnung_MAX_Ana_8_Temp");


	sprintf(Trend1_tag,"Prozesswertarchiv\\%s%s",Trend2_tag,Trend3_tag);
	SetPropWord(lpszPictureName,"Control1","TrendIndex",0);
	SetPropChar(lpszPictureName,"Control1","TrendTimeAxis","Zeitachse 1");
	SetPropChar(lpszPictureName,"Control1","TrendValueAxis","Wertachse 1");      
	SetPropBOOL(lpszPictureName,"Control1","Online",FALSE);       
	SetPropBOOL(lpszPictureName,"Control1","TimeRange",FALSE);     
	SetPropBOOL(lpszPictureName,"Control1","Activate",FALSE);     


	SetPropChar(lpszPictureName,"Control1","TrendTagName",Trend1_tag);

Ich habe jetzt noch in einer Internen Variable "Tempwitchobjekt" (Textvariable 8-Bit Zeichensatz) einen Text stehen
den ich noch als Trend2_tag einfügen muss.

Da die Interne Variable in einem übergeordneten, bzw. einem früher aufgerufenen Skript beschrieben wird
habe ich es auch mit einer Globalen Variable versucht, jedoch ohne Erfolg.

Danke im Voraus! :grin:

lg Matzi
 
Zurück
Oben