OEM-Applikationslizenz in einer SPS-Applikation abfragen
Nutzung von OEM-Lizenzen = Bootprojekt verschlüsseln! Denken Sie daran, dass die per FB_CheckLicense abgefragte License-ID im Binärcode mit einem Hex-Editor leicht gefunden und (mit einem gewissen Aufwand) manipuliert werden kann. Arbeiten Sie daher unbedingt mit einer Verschlüsselung des Bootprojektes (am sichersten), oder verschleiern Sie zumindest die abgefragte License-ID im Quellcode bestmöglich. |
Die Lizenzüberprüfung im Aufstartprozess der TwinCAT Runtime erfolgt in zwei Schritten:
- 1. TwinCAT 3 liest zunächst die im System (auf der Festplatte) gespeicherten Lizenzdateien ein, überprüft deren Inhalt und erstellt eine interne Liste der gefundenen Lizenzen.
- 2. Die finale Überprüfung der Lizenzen erfolgt nach der Inbetriebnahme des EtherCAT-Busses, da erst dann alle erforderlichen Informationen zur Verfügung stehen. (Vorher kann z. B. das Vorhandensein einer EL6070 Lizenzklemme nicht verifiziert werden.)
Das Ergebnis können Sie nach dem abgeschlossenen Aufstart mit dem Funktionsbaustein FB_CheckLicense abrufen.
Im laufenden Betrieb (nach dem Aufstart und der finalen Lizenzprüfung) wird der Status der Lizenzen von der TwinCAT Runtime ca. alle zwei Minuten erneut überprüft. Das sollte im PLC-Programm entsprechend berücksichtigt werden (also FB_CheckLicense z. B. nur alle 10 Sekunden aufrufen).
Hinweise:
- FB_CheckLicense liest lediglich den aktuell gespeicherten Lizenzstatus in der internen Tabelle, löst aber keine erneute Lizenzüberprüfung aus. Das Entfernen eines Dongles im laufenden Betrieb kann sich also erst nach bis zu ca. zwei Minuten beim Lizenzstatus der zugehörigen Lizenz bemerkbar machen.
- Tipp: Bei Bedarf können aktuell am System angeschlossene Dongle mit dem Funktionsbaustein FB_GetLicenseDongles ermittelt werden.
- Die Lizenzüberprüfung ist Teil des Aufstartprozesses der TwinCAT Runtime. Bedeutet also: Keine laufende Runtime = keine aktuellen Lizenzinformationen!
FB_CheckLicense
Der Funktionsbaustein ermittelt den TwinCAT-3-Lizenzstatus für eine gegebene Lizenz-ID.
VAR_INPUT
VAR_INPUT
bExecute : BOOL;
tTimeout : TIME;
sNetId : T_AmsNetId;
stLicenseId : GUID;
END_VAR
bExecute: Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert.
tTimeout: Timeout-Zeit, die bei Ausführung des Befehls nicht überschritten werden darf.
sNetId: AmsNetId (AMS-Netzwerkkennung) des TwinCAT-Rechners, dessen Lizenzstatus ausgelesen werden soll (Typ: T_AmsNetId). Für den lokalen Rechner kann auch ein Leerstring angegeben werden.
stLicenseId: Lizenz-ID (Typ: GUID)
VAR_OUTPUT
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
nErrorId : UDINT;
stCheckLicense : ST_CheckLicense
END_VAR
bBusy: TRUE, solange der Baustein aktiv ist.
bError: TRUE, wenn bei der Ausführung des Kommandos ein Fehler auftritt.
nErrorId: Liefert bei einem gesetzten bError-Ausgang die ADS-Fehlernummer.
stCheckLicense: Struktur mit Lizenzdaten (Typ: ST_CheckLicense)
STRUCT ST_CheckLicense
TYPE ST_CheckLicense :
STRUCT
stLicenseId : GUID;
tExpirationTime : TIMESTRUCT;
sExpirationTime : STRING(80);
eResult : E_LicenseHResult;
nCount : UDINT;
END_STRUCT
END_TYPE
Name | Beschreibung |
---|---|
stLicenseId | Lizenz-ID |
tExpirationTime | Verfallsdatum |
sExpirationTime | Verfallsdatum |
eResult | Lizenzstatus (siehe E_LicenseHResult) |
nCount | Anzahl der Instanzen für diese Lizenz (0=unbegrenzt) |
ENUM E_LicenseHResult
TYPE E_LicenseHResult :
(
//success
E_LHR_LicenseOK : DINT := 0,
E_LHR_LicenseOK_Pending : DINT := 16#203,
E_LHR_LicenseOK_Demo : DINT := 16#254,
E_LHR_LicenseOK_OEM : DINT := 16#255,
//error
E_LHR_LicenseNoFound : DINT := DWORD_TO_DINT(16#98110700+16#24),
E_LHR_LicenseExpired : DINT := DWORD_TO_DINT(16#98110700+16#25),
E_LHR_LicenseExceeded : DINT := DWORD_TO_DINT(16#98110700+16#26),
E_LHR_LicenseInvalid : DINT := DWORD_TO_DINT(16#98110700+16#27),
E_LHR_LicenseSystemIdInvalid : DINT := DWORD_TO_DINT(16#98110700+16#28),
E_LHR_LicenseNoTimeLimit : DINT := DWORD_TO_DINT(16#98110700+16#29),
E_LHR_LicenseTimeInFuture : DINT := DWORD_TO_DINT(16#98110700+16#2A),
E_LHR_LicenseTimePeriodToLong : DINT := DWORD_TO_DINT(16#98110700+16#2B),
E_LHR_DeviceException : DINT := DWORD_TO_DINT(16#98110700+16#2C),
E_LHR_LicenseDuplicated : DINT := DWORD_TO_DINT(16#98110700+16#2D),
E_LHR_SignatureInvalid : DINT := DWORD_TO_DINT(16#98110700+16#2E),
E_LHR_CertificateInvalid : DINT := DWORD_TO_DINT(16#98110700+16#2F),
E_LHR_LicenseOemNotFound : DINT := DWORD_TO_DINT(16#98110700+16#30),
E_LHR_LicenseRestricted : DINT := DWORD_TO_DINT(16#98110700+16#31),
E_LHR_LicenseDemoDenied : DINT := DWORD_TO_DINT(16#98110700+16#32),
E_LHR_LicensePlatformLevelInv : DINT := DWORD_TO_DINT(16#98110700+16#33)
)DINT;
END_TYPE
Wert | Bedeutung |
---|---|
E_LHR_LicenseOK | Lizenz ist gültig |
E_LHR_LicenseOK_Pending | Validierung des Lizenzierungsgeräts (z. B. Lizenzklemme) notwendig |
E_LHR_LicenseOK_Demo | Testlizenz ist gültig |
E_LHR_LicenseOK_OEM | OEM-Lizenz ist gültig |
E_LHR_LicenseNoFound | Fehlende Lizenz |
E_LHR_LicenseExpired | Lizenz abgelaufen |
E_LHR_LicenseExceeded | Lizenz hat zu wenig Instanzen |
E_LHR_LicenseInvalid | Lizenz ist ungültig |
E_LHR_LicenseSystemIdInvalid | Falsche System-ID für die Lizenz |
E_LHR_LicenseNoTimeLimit | Lizenz nicht zeitlich begrenzt |
E_LHR_LicenseTimeInFuture | Lizenzproblem: Ausstellungszeitpunkt in der Zukunft |
E_LHR_LicenseTimePeriodToLong | Lizenz-Zeitraum zu lang |
E_LHR_DeviceException | Exception beim Systemstart |
E_LHR_LicenseDuplicated | Lizenzdaten mehrfach gelesen |
E_LHR_SignatureInvalid | Ungültige Signatur |
E_LHR_CertificateInvalid | Ungültiges Zertifikat |
E_LHR_LicenseOemNotFound | OEM-Lizenz für unbekannten OEM |
E_LHR_LicenseRestricted | Lizenz für das System ungültig |
E_LHR_LicenseDemoDenied | Testlizenz nicht erlaubt |
E_LHR_LicensePlatformLevelInv | Ungültiger Plattform-Level für die Lizenz |
License ID der OEM-Lizenz ermitteln
Die License ID der OEM-Lizenz können Sie der zugehörigen Lizenzbeschreibungsdatei oder dem Lizenzmanager entnehmen.
Lizenzbeschreibungsdatei:
Registerkarte "Manage Licenses" des Lizenzmanagers:
Mit einem Doppelklick auf die Zeile der Lizenz öffnet sich ein Fenster mit den Eigenschaften der Lizenz, u. a. der License ID:
Der OEM kann in seiner SPS-Applikation festlegen, wie auf das Vorhandensein bzw. Fehlen der OEM‑Applikationslizenz reagiert werden soll. Möglich sind ein Programmabbruch oder auch das Freischalten eines Zusatzfeatures.
Systemvoraussetzungen
Betriebssystem:
- Um alle Funktionen zum Schutz der Anwendungssoftware nutzen zu können, ist mindestens Windows 7 (bzw. dessen Embedded-Version) erforderlich. Windows XP und Windows CE (Windows Embedded Compact) unterstützen weder die Verschlüsselung der Boot-Datei noch OEM-Lizenzen.
TC3 PLC Lib Tc2_Utiltities:
- Verwenden Sie mindestens Version 3.3.24 der TC3 PLC Lib Tc2_Utilities, da sie diverse Funktionen zum komfortablen Handling von TwinCAT-3-Lizenzen bietet. Sie ist zwingend erforderlich für die Nutzung von TwinCAT‑3‑Dongles für OEM-Applikationslizenzen. Die TC3 PLC Lib ist ab TwinCAT 3.1 Build 4022.16 enthalten.
TwinCAT-Version:
- Die beschriebenen Funktionalitäten erfordern mindestens TwinCAT 3.1 Build 4024.
Sicherer Schutz nur bei Verwendung der neuesten TwinCAT-3-Version Verwenden Sie für einen sicheren Schutz (z. B. eine sichere Verschlüsselung) immer die neueste TwinCAT-3-Version. Diese bietet die höchste Sicherheit. Verwenden Sie mindestens TwinCAT 3.1 Build 4024.x. |
Siehe auch: Dokumentation zur PLC-Bibliothek Tc2_Utilities , Abschnitt Lizenzierungsfunktionen