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

Ergebnis 1 bis 10 von 10

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

  1. #1
    Registriert seit
    11.02.2014
    Beiträge
    25
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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
    Zitieren Zitieren WinCC 7.2 OnlineTrendControl mit Präfix aus Prozesswertarchiv befüllen  

  2. #2
    Registriert seit
    12.04.2006
    Ort
    Bayern/Oberpfalz
    Beiträge
    135
    Danke
    3
    Erhielt 15 Danke für 11 Beiträge

    Standard

    Zitat Zitat von SchnitzelMatzi Beitrag anzeigen
    Hallo,
    (nicht aus dem Archiv sondern direkt aus dem Variablenhaushalt) an das TrendControl übergeben.
    Das funktioniert meines Wissens nicht. Was spricht dagegen eine Archivvariable anzulegen?
    Geändert von adiemus84 (09.07.2014 um 18:19 Uhr)

  3. #3
    SchnitzelMatzi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.02.2014
    Beiträge
    25
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

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

  4. #4
    Registriert seit
    12.04.2006
    Ort
    Bayern/Oberpfalz
    Beiträge
    135
    Danke
    3
    Erhielt 15 Danke für 11 Beiträge

    Standard

    Was willst du mit dem C-Script überhaupt erreichen?

  5. #5
    Registriert seit
    29.10.2010
    Beiträge
    32
    Danke
    1
    Erhielt 5 Danke für 5 Beiträge

    Standard

    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.

  6. #6
    SchnitzelMatzi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.02.2014
    Beiträge
    25
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.

  7. #7
    Registriert seit
    12.04.2006
    Ort
    Bayern/Oberpfalz
    Beiträge
    135
    Danke
    3
    Erhielt 15 Danke für 11 Beiträge

    Standard

    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");

  8. Folgender Benutzer sagt Danke zu adiemus84 für den nützlichen Beitrag:

    SchnitzelMatzi (02.10.2014)

  9. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Zitat Zitat von SchnitzelMatzi Beitrag anzeigen
    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.

  10. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    SchnitzelMatzi (02.10.2014)

  11. #9
    SchnitzelMatzi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.02.2014
    Beiträge
    25
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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

    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!

    lg Matzi

  12. #10
    SchnitzelMatzi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.02.2014
    Beiträge
    25
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hehe...

    habs gelöst!

    Das dumme Prefix war einfach mit "@local::" rauszuschneiden...

    "@local::Tempwitchobjekt"


    lg Matzi

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 07.07.2014, 17:55
  2. Antworten: 16
    Letzter Beitrag: 17.04.2014, 09:04
  3. Antworten: 6
    Letzter Beitrag: 24.10.2012, 08:40
  4. WinCC OnlineTrendControl
    Von TI 1 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 09.02.2012, 04:41
  5. Antworten: 0
    Letzter Beitrag: 23.02.2011, 23:27

Lesezeichen

Berechtigungen

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