Makrothek
S7-1200 betrifft S7

Problembeschreibung:

Der Webserver auf der S7 ist eine feine Sache, gerade wenn man über ein mobiles Endgerät die S7 steuern möchte. Um jedoch Variablen in der CPU per HTML-Seite verändern zu können, muss man als Admin eingelogt sein.

Ein Problem dabei ist, dass die CPU nicht beliebig viele Logins gleichzeitig zu lässt (laut Dokumentation nur max. 8). Ein Benutzer wird aber auch automatisch ausgelogt, wenn 30 Minuten lang keine Aktivität verzeichnet wurde.

Daher ist es für eine Website durchaus interessant zu wissen, ob und welcher Benutzer gerade eingelogt ist.

Funktionierende Lösung

Im System-Manual zur CPU sind einige Sondervariablen des Webservers angegeben, so zum Beispiel:

  • SERVER:current_user_id
  • SERVER:current_user_name

Diese Servervariablen bieten einen guten Ansatz, der Haken an der Sache ist nur der, dass diese Variablen nur in der AWP_In_Variable akzeptiert werden. D.h. eine einfache Deklaration in einer HTML-Seite wie

<p>Der Benutzer ist :=SERVER:current_user_name:</p>

funktioniert nicht!

Die SERVER-Variablen können also nicht einfach ausgelesen werden, sehr wohl aber in eine CPU-Variable geschrieben werden, die dann in der HTML-Seite abgefragt wird. Folgendes Beispiel zeigt den Code in der HTML-Seite:

<!-- AWP_In_Variable Name='SERVER:current_user_id' Use='"Webvariablen".angemeldeter_Benutzer' -->

	<p>Die Benutzer-ID ist :="Webvariablen".angemeldeter_Benutzer:</p>

In diesem Beispiel wird die Benutzer-ID des angemeldeten Benutzers in die Variable "angemeldeter_Benutzer" (Typ z. B. USInt) in den Datenbaustein "Webvariablen" geschrieben. Später in der HTML-Seite wird diese CPU-Variable dann wieder ausgelesen.

Leider wird die Server-Variable nur in die CPU geschrieben, wenn ein Benutzer angemeldet ist. D.h. wenn kein Benutzer angemeldet ist, wird die Server-Variable nicht in die CPU geschrieben. Welcher Sinn sich dahinter verbirgt, weiß wahrscheinlich nur SIEMENS, da so in der CPU immer die gleiche Zahl steht.

Abhilfe schafft nur ein periodisches Zurücksetzen der CPU-Variable (z. B. alle 15 Sekunden). So wird die Variable stets gelöscht und sobald die HTML-Seite wieder als Admin aufgerufen wird, wird sofort die Server-Variable wieder in die CPU-Variable geschrieben. Bei der Auswahl des Zeitintervalls, der die CPU Variable wieder löscht, ist zu beachten, dass der Webserver asynchron zur CPU läuft, d.h. eine Webseiten-Abfrage zieht sich über mehrere Programmzyklen hin. Somit darf die Variable nicht bei jedem Zyklus gelöscht werden, sondern nur in einem sicheren zeitlichen Abstand, in dem sichergestellt ist, dass die Webseite vollständig ausgeliefert wurde.

Im Ergebnis stellt sich die CPU-Variable so ein, dass eine "0" den ausgelogten Zustand beschreibt, eine Zahl ungleich Null einen eingelogten Benutzer anzeigt.