Installation Layer


Der Installation Layer (IL) ist ein Add-on welches über den Slooptools Store bezogen und über den Installer installiert werden muss. Wie auch bei den andere Add-ons basiert die Struktur auf ein WinCC OA Subprojekt. Mit diesem Add-on wird auch die SLTLicenseCtrlExt mitgeliefert. Diese ist notwendig um die Lizenzen der Add-ons überprüfen zu können.

Der Installation Layer ist für den Installationsabschluss anderer Add-ons zuständig. Das zentrale Element ist hierbei das Installation Layer Skript, welches beim Hinzufügen des IL zu einem Projekt, automatisch zur Konsole hinzugefügt wird. Dieses prüft beim Starten des Skriptes und alle 5 min ob neue Add-ons installiert worden sind. Wenn ein Add-on gefunden wurde führt der IL bei jedem Add-on folgende Aktionen durch:

  • Anlegen eines _Slooptools_Add_ons Datenpunkt.
  • Den erstellten Datenpunkt mit den Informationen von der AddonInformation.json Datei beschreiben.
  • Hinzufügen eines Menü Eintrages zu der Slooptools Kategorie im System Management. Über diesen Menü Eintrag wird ein Panel geöffnet in dem Informationen zu dem Add-on dargestellt werden. Wenn unter "panels/[techAdd-OnName]/" ein AddonInfo.pnl beim Erstellen des Menü Eintrages vorhanden ist wird dieses zukünftig beim Öffnen des Menüs verwendet.
  • Wenn unter "scripts/[techAdd-OnName]/" ein updateAddon.ctl Skript vorhanden ist, wird dieses von dem Installation Layer ausgeführt. Dieses Skript kann dazu verwendet werden um z.B. benötigte Datenpunkte zu erstellen. Für mehr Details siehe Benutzerdefiniertes Updateskript.

SLTLicense Control Extension

Mit dem Installation Layer wird die SLTLicenseCtrlExt mit ausgeliefert. Folgende Funktionen werden durch die Control Extension zu Verfügung gestellt:

  • bool sltCheckLicense (string itemNumber)
    • Überprüft ob die Lizenz gültig ist und ob das Add-on mit der Lizenz verwendet werden kann.
  • int sltDecreaseUnitCounter (string itemNumber, int amount)
    • Verringert den UnitCounter der jeweiligen Lizenz. (Nur wenn ein UnitCounter vorhanden ist)
    • Beispiel: Die Lizenz ist für [X] Stunden/Tage gültig. Sobald das letzte Mal der Counter dekrementiert wurde (Counter = 0), ist die Lizenz ungültig.
  • int sltDecreaseUnitCounterChecked (string itemNumber, int amount)
    • Verringert den UnitCounter der jeweiligen Lizenz, jedoch nicht unter 1. (Nur wenn ein UnitCounter vorhanden ist. Wenn der UnitCounter auf 0 verringert wird, wird die Lizenz ungültig. Es gibt eventuell Fälle wo dies nicht gewünscht ist)
    • Beispiel: Die Lizenz ist für [Y] Widgets gültig. Dann sollte das letzte Dekrementieren den Counter nicht auf 0 setzen da sonst die komplette Lizenz ungültig wäre, was dem Lizenztyp jedoch nicht entspricht. Hier muss in der Applikation verhindert werde das weitere Widgets verwendet werden können.
  • int sltGetUnitCounter (string itemNumber)
    • Fragt den UnitCounter der Lizenz ab. (Nur wenn ein UnitCounter vorhanden ist)
  • string sltGetExpirationTime (string itemNumber)
    • Liefert das Verfallsdatum der Lizenz im Format „%Y-%m-%dT%I:%M:%S“ (Nur wenn es ein Verfallsdatum gibt)
  • int sltGetFeatureMap (string itemNumber)
    • Liefert den Int Wert der 32Bit FeatureMap
  • string sltGetProductText (string itemNumber)
    • Liefert den Produktnamen und den Provider Name mit | getrennt. Beispiel: SloopTools | SLT_Installation_Layer
  • bool sltOccupyLicense (string itemNumber)
    • Überprüft ob die Lizenz gültig ist, ob das Add-on mit der Lizenz verwendet werden kann und belegt diese.
    • Andere Funktionsaufrufe mit derselben itemNumber (z.B.: sltDecreaseUnitCounter, sltGetFeatureMap,... ) werden mit der belegten Lizenz durchgeführt.
    • Um die belegte Lizenz für andere Projekte verwenden zu können, muss diese mit sltReleaseLicense freigegeben werden.
  • string sltReleaseLicense (string itemNumber)
    • Gibt eine belegete Lizenz wieder frei.
    • Wenn unter der ItemNumber keine belegte Lizenz vorhanden ist, geschieht nichts.

Bei jeder dieser Funktionen wird die ItemNumber verwendet. Die ItemNumber des Add-ons ist der Datenpunktname des jeweiligen Add-ons vom Datenpunkttyp „SloopTools_Add_ons“ wobei bei WinCC OA der Bindestrich „-“ aufgrund von WinCC OA Vorgaben durch ein Unterstrich „\“ ersetzt wurde. Die CtrlExtension kann aber mit beiden Arten umgehen.

Diese Funktionen können wie hier beschrieben in geeigneten Stellen im Code verwendet werden. Folgende Kriterien sollten hierbei jedoch beachtet werden:

  • Überprüfungen sollten regelmäßig stattfinden aber nicht in zu kurzen Abständen.
  • Die Lizenz sollte an einer zentralen Stelle geprüft werden. Es soll verhindert werden das in jedem Funktionsaufruf die Lizenz geprüft wird. Dies wäre technisch zwar möglich, würde jedoch die Performance des Add-ons verringern.
  • sltCheckLicense, sltGetUnitCounter und sltGetFeatureMap werden während des Quality Gates (QG) durch entsprechende Funktionen ersetzt um zusätzliche Sicherheit gewährleisten zu können. Dies bedeutet aber auch das diese Funktionen ohne ein Quality Gate Check nicht normal verwendet werden können. Wenn das Add-on ohne QG getestet werden muss, ist es notwendig diese Funktionen für den Test zu ersetzen.
  • Verwendung von #uses SLTLicenseCtrlExt

Die Lizenzen werden an das Projekt gebunden. Das bedeutet, dass andere Projekte die am selben Computer das selbe Add-on verwenden ebenfalls eine Lizenz benötigen.

Benutzerdefiniertes Updateskript

Wenn zusätzlich zur normalen Installation z.B. Datenpunkttypen oder Datenpunkte erstellt werden müssen, gibt es die Möglichkeit ein benutzerdefiniertes Updateskript mitzulieferen. Dies muss unter "scripts/[techAdd-OnName]/" als updateAddon.ctl abgelegt werden. In diesem Skript muss sich folgende Funktion befinden:

main (int currentVersion, int updateVersion)
{
    //...your Code
}

In diesem Skript können nun, abhängig der Versionen vor und nach dem Update, Funktionalitäten ausgeführt werden.

Dieses Skript wird zu folgenden Zeitpunkten ausgeführt:

  • Nach der ersten Installation des Add-ons
    • currentVersion = 0
  • Nach jedem Update des Add-ons
    • currentVersion = bisher installierte Version
    • updateVersion = die mit dem Update nun neue Version

results matching ""

    No results matching ""