wincc 6:Farbwechsel bei einem Kreis

fra226

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

wie bekomme ich einen Farbwechsel bei einem Kreis hin.(WinCC 6)

der Kreis soll bei e0.0 --> 1 die farbe grün haben
und bei e0.0 --> 0 die Frabe rot......also die Hintergrundfarbe soll sich ändern....

ich habe schon die variable e0.0 auf Kreis--> Hintergrundfarbe gelegt aber sie ändert sich nicht...


vielen dank
fra226
 
Farbe

Hi,
-bei "Hintergrundfarbe", Dynamik, rechte Maustaste:Kontextmenü,
Dynamik-Dialog wählen.
-bei "Ausdruck/Formel" die Variable eintragen(aber nicht e0.0, sondern die
deklarierte Variable im Variablenhaushalt, die auf e0.0 zugreift!)
-Datentyp: bool
und dann kanst Du die zwei Farben (für gesetzt und nicht gesetzt) aussuchen.


Gruss: Vladi
 
Zuletzt bearbeitet:
Farbwechsel

Hi,
das, wie lange es dauert, kann man bestimmen: durch den TRIGGER.
So kann man triggern lassen nach:
-Variablenänderung
-Bildzyklus
-ein anderer Zeit Zyklus, selbst bestimmt(250ms etwa).

Aufpassen: Kleine Triggerzeiten beinflüssen die Leistung von WinCC, da die Software zu oft Leseaufträge senden muss.

Gruss: Vladi
 
hallo,
wo stelle ich denn die trigger zeit für einen dynamik-dialog ein....klappt das denn nicht nur bei einer variablen zuweisung???

mfg
fra226
 
hallo,
alles klar hab ich gefunden..... vielen dank....gibt es denn noch ene andere möglichkeit....den farbwechsel zu bekommen???

mfg
fra226
 
Farbwechsel

Hi,
andere Möglichkeit: statt Dynamik Dialog eine
C oder VBA Funktion erstellen. Der Wert, der die Funktion liefert, ist dann die Farbe des Objekts(Ein codierter Wert aus den drei Grundfarben).

Beispiel C: die Funktion sucht abhängig von einem Index (1 bis 4) das passende Bit in dem entspr. Byte, wenn das Bit "1" ist, schaltet ROT ein,
wenn nicht: schwarz. Die Konstanten CO_RED und CO_BLACK(und noch ein Paar) sind vordefiniert in WinCC.

Code:
#include "apdefap.h"
 BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// variablen deklaration
unsigned auswahl;
// Initialisieren  1 = Vx.1,  2 = Vx.2,  3 = Vx.3, 4 = Vx.4
auswahl=GetTagByte("counter_V");            //Auswahl des Bytes im DWord 1-4 

switch (auswahl)
 {                                                                              // in Abhängigkeit von auswahl
 case 1:
     if ((GetTagDWord(GetTagChar("V1_V2_V3_V4"))) & 0x20000000) // Ausmaskierug Bit 27 Aufmeldung
        return CO_RED ;                                                                                                     // Setzen Farbe rot
     else 
        return CO_BLACK;                                                                                                              //Setzen Farbe schwarz 
case 2: 
    if ((GetTagDWord(GetTagChar("V1_V2_V3_V4"))) & 0x200000)  // Ausmaskierug Bit 20 Aufmeldung
          return CO_RED;                                                                                              // Setzen Farbe rot
      else
           return CO_BLACK;                                                                                                       //Setzen Farbe schwarz 
case 3:
   if ((GetTagDWord(GetTagChar("V1_V2_V3_V4"))) & 0x2000)  // Ausmaskierug Bit 11 Aufmeldung
          return CO_RED;                                                                                        // Setzen Farbe rot
      else  
          return CO_BLACK;                                                                                                 //Setzen Farbe schwarz 
case 4: 
    if ((GetTagDWord(GetTagChar("V1_V2_V3_V4"))) & 0x20)    // Ausmaskierug Bit 3 Aufmeldung
          return CO_RED;                                                                                       // Setzen Farbe rot
        else
          return CO_BLACK;                                                                                                //Setze Farbe schwarz
}
}



Gruss: Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
bit aus dword

Hallo zusammen!

Wir stehn grad auch an nem Problem:
es werden mehrere Kreise farblich dargestellt.

Kreis 1:
bit 0: schwarz
bit 1: rot
bit 2: gelb
bit 3: grün

Kreis 2:
bit 4: schwarz
bit 5: rot
bit 6: gelb
bit 7: grün

usw, bis Kreis 20. ich zeige mit einem DWORD auf den Anfang.

mit flex 2005 ging das, nun haben wir 2007 adv. und es passiert folgendes:
wenn für Kreis 1 ein bit "1" ist, werden die nachfolgenden bits in diesem byte nicht mehr beachtet. Kreis 2 bleibt somit "verschwunden". sobald ich die 4 bits für Kreis 1 "0" setze, werden die bits für Kreis 2 ausgewertet und auch dargestellt.
Kennt noch jemand das Problem?
Wenn jemand was weiss..... bin für alles gerüstet!

Besten Dank!
 
aha

na also, ich habs gefunden. in der geräteeinstellung gibt es ein häkchen, welches aber deaktiv sein muss. ich sitz jetz nicht grad am flex aber es heist sowas wie "bildbaustein komplett betrachten" oder.
 
hallo zusammen.

vieleicht noch ne möglichkeit


Code:
DWORD Var1;
 
#define schwarz  0 //die 0 ist die Bitnummer deiner Variable
#define rot         1
#define gelb        2
#define grün        3
//usw.
 
 
Var1 = GetTagDWord("32bit"); //Variable einlesen
 
if (Var1 & (1<<schwarz)){
return (CO_BLACK); 
}
 
if (Var1 & (1<<rot)){
return (CO_RED); 
}
 
if (Var1 & (1<<gelb)){
return (CO_YELLOW); 
}
 
if (Var1 & (1<<grün)){
return (CO_GREEN); 
}
 
 
return(CO_DKRED); //normalzustand wenn kein Bit aktiv.
 
 
}

alternative zu den vorgebenen Farbwerten kann ein individueller Farbwert zurück gegeben werden. Diese muß dann in Hex sein... z.b. 0x00FF8000 für Orange
 
Zuletzt bearbeitet:
Zurück
Oben