TIA TIA WinCC Professional V17 Temperaturverlauf farbig darstellen

uweschwarz

Level-2
Beiträge
229
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe einen waagerechten Reaktor mit 7 auf der Länge verteilten Temperaturmessstellen.
Die maximale Temperatur an T1 liegt bei 2000°C. Der Temperaturverlauf bezogen auf die Länge ist abnehmend, d.h. an T1 ist die höchste Temperatur und an T7 die niedrigste. Die maximale Differenz von T1 zu T7 ist 600°C

Ich würde gerne die Hintergrundfarbe eines Polygons entsprechend dem gemessenen Temperaturverlauf farbig darstellen.
Dafür würde ich bei 7 Polygonen die Hintergrundfarbe ändern wollen.

Bei der Suche nach einer Lösung bin ich auf diesen Beitrag gestoßen:https://www.sps-forum.de/threads/wincc-7-farbverlauf.36159/#post-261787

Dort wird ein C-Script vorgestellt, welches für die Dynamisierung der Hintergrundfarbe verwendet werden kann.
Im Post #5 wird auch die Umwandlung eines Farbwertes in RGB Werte beschreiben. Das kommt dem, was ich mir vorstelle schon recht nahe.

Wie binde ich das konkret ein?

- Ich habe es den C-Scripten hinzugefügt

1738766046790.png

- bei der Dynamisierung der Hintergrundfarbe aufgerufen1738766448766.png
und bekomme folgende Fehlermeldungen nach dem übersetzen:
1738766514887.png

Was mache ich falsch?

Gruß Uwe
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wäre es nicht einfacher(sofern das geht), wenn du in der SPS ein Farbcode übergibst?
Wären jetzt 7 Variabeln.Der könntest du direkt einen Farbcode zuweisen.
Einen Baustein schreiben der in den 100 er Schritten einen Farbwert zuweist.
Könnte man sogar als array machen, wenn das geht.
 
ein Pluszeichen im Variablennamen geht gar nicht
Da hast du vollkommen recht, offenbar war ich nicht ganz bei Sinnen als ich den festgelegt habe. Andererseits: Bis jetzt gab es deshalb keine Probleme und auch in den Übersetzungsfehlern deutet, zumindest für mich, nichts darauf hin, dass der Variablenname problematisch ist.
Wäre es nicht einfacher(sofern das geht), wenn du in der SPS ein Farbcode übergibst?
Klingt auch nicht schlecht. Brauche ich da nicht auch eine Umrechnung von Temperatur zu Farbe? Wenn es dazu bereits ein schönes Script gibt, dann würde ich das gerne nutzen. Das Problem ist nur ich bekomme es nicht zum laufen.
Was mir noch aufgefallen ist: Der Link oben war leider falsch. Ich habe das jetzt korrigiert und hier nochmal zur Sicherheit der Code von

Thomas_v2.1

Code:
// Einfache Umwandlung eines Farbwertes x (von 0..100) in RGB Farbwerte
void HtoRGB(double x, unsigned char *rr, unsigned char *gg, unsigned char *bb )
{
    double r, g, b;
    double d = 100.0/6.0;       
    int baseColor = floor(x / d);
    
    switch (baseColor) {
        case 0:
            r = 1.0;
            g = x / d;
            b = 0.0;
            break;
        case 1:
            r = -1.0 * (x - 2*d) / d;
            g = 1.0;
            b = 0.0;
            break;
        case 2:
            r = 0.0;
            g = 1.0;
            b = (x - 3*d) / d;
            break;
        case 3:
            r = 0.0;
            g = -1.0 * (x - 4*d) / d;
            b = 1.0;
            break;
        case 4:
            r = (x - 5*d) / d;
            g = 0.0;
            b = 1.0;
            break;
        case 5:
            r = 1.0;
            g = 0.0;
            b = -1.0 * (x - 6*d) / d;
            break;
    }
    *rr = (unsigned char) (r * 255.0);
    *gg = (unsigned char) (g * 255.0);
    *bb = (unsigned char) (b * 255.0);
}

Bei den letzten Zeilen im Code "*rr = (unsigned char) (r * 255.0);" kann ich den * nicht einfügen. Könnte es daran liegen?
 
Ich hatte einfach gedacht ein Analogwert dem eine Farbe zugeordnet wird.Von Wert bis Wert(0..4) Farbe 1.u.s.w.
Geht das nicht mehr?Das sind dann nur die Grundfarben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hatte einfach gedacht ein Analogwert dem eine Farbe zugeordnet wird.Von Wert bis Wert(0..4) Farbe 1.u.s.w.
Geht das nicht mehr?Das sind dann nur die Grundfarben?
Ehrlich gesagt stelle ich mir das ganz schön aufwändig vor, ich müsste ja im Bereich von 0 - 2000°C jeweils die RGB-Werte ändern, oder? Das kann man sicher irgendwie mit ein paar Schleifen und Änderungsüberwachung oder so machen, aber eine kontinuierlich Berechnung finde ich schon interessanter.
Ich würde gerne nur die Temperatur(en) an eine Funktion übergeben. Die Funktion berechnet dann den Temperaturverlauf über die gesamte Länge des Reaktors und stellt, ähnlich wie bei einer Wärmebildkamera oder bei Temperaturdarstellungen in FEM-Programmen, eine Farbverteilung über die gesamte Länge des Reaktors dar.
 
Zurück
Oben