Benutzerdefiniertes Farbformat

Als weiteres Beispiel der Color Control Konfiguration wird ein RGB-Farbformat mit einem Wertebereich zwischen 0 und 1 betrachtet. Um dies in dem Color Control darzustellen, müssen die Kanäle im ColorChannel Attribut als float und mit einem maxValue von 1 eingestellt werden.

Benutzerdefiniertes Farbformat 1:

Die Werte des ColorChannels Attributs können per Skript wie folgt geschrieben werden:

[
  {
    "color": {
      "color": "rgba(255, 0, 0, 1)"
    },
    "float": true,
    "maxValue": 1.0
  },
  {
    "color": {
      "color": "rgba(0, 255, 0, 1)"
    },
    "float": true,
    "maxValue": 1.0
  },
  {
    "color": {
      "color": "rgba(0, 0, 255, 1)"
    },
    "float": true,
    "maxValue": 1.0
  }
]

ColorBoxFormatting Funktion

Damit die Farb-Box trotz des veränderten Wertebereich die richtige Farbe anzeigt, muss das BoxColorConversion Attribut angepasst werden. Anders als bei den Standard-Konvertierungen existiert hierfür keine vorgefertigte Funktion. Stattdessen ist die Erstellung einer eigenen Funktion notwendig. Das folgende Beispiel zeigt, wie eine solche Funktion für den oben genannten Anwendungsfall angelegt wird und welche Schnittstellen diese haben muss.

Benutzerdefiniertes Farbformat 2:

Die allgemeine Verwendung von Funktionen wird in der HMI-Dokumentation erklärt.

Nach dem Erstellen der TypeScript Funktion müssen zwei Parameter angelegt werden. Der erste bekommt den zu konvertierenden Farbwert übergeben und muss daher vom Typ Array angelegt werden. Der zweite Parameter gibt die Konvertierungsrichtung an und muss als Boolean angelegt werden. Mit True werden die Werte nach RGB konvertiert mit False von RGB zurück in das benutzerdefinierte Format. Es ist zu beachten, dass sich diese übergebenen Parameter zum Zeitpunkt der Funktionsausführung aus Timing-Gründen von den Werten der entsprechenden Control-Eigenschaften unterscheiden können.

Die Funktion muss einen Wert vom Typ Number zurückgeben, der dann in der Farb-Box angezeigt wird.

Benutzerdefiniertes Farbformat 3:

Im folgenden Codebeispiel werden die Skalierung der Farbwerte abhängig vom übergebenen reverse Wert angepasst:

module TcHmi {
  export module Functions {
    export module TcHmiProject {
      export function ConvertRGB(color: number[], reverse: boolean) {
        if (!reverse) {
          return color.map((value: number) => value * 255)
        }
        else {
          return color.map((value: number) => value / 255)
        }
      }
    }
    registerFunctionEx('ConvertRGB', 'TcHmi.Functions.TcHmiProject, TcHmiProject.ConvertRGB);
  }
}

Damit ist gewährleistet, dass die Farb-Box die richtige Farbe anzeigt und dass ein manuelles Ändern der Farbe in der Farb-Box zu korrekten Farbwerten führt.