KTP600 kann kein Skript... na typisch, Basic Panel im Budget aber Premium Wünsche
Das Ereignis "Benutzerwechsel" soll nur
bedingt beim Ausloggen einen Bildwechsel zum Grundbild auslösen.
Eine bedingte Wertänderung einer Variablen Y, wenn sich der Passwortlevel (BenutzerGruppennummer) von 1..9 zu 0 ändert, kann man z.B. durch die Formel "Y = Y + (Passwortlevel - 10)/-10" oder "Y = Y + (SHIFT(Passwortlevel - 1, +15) AND 1)" erreichen. Allerdings wird bei einer solchen Wertänderung von Y kein Ereignis ausgelöst, wenn Y eine panel-interne Variable ist.
Erschwerend für eine bedingte Reaktion sind:
- das KTP600 kann keine Skripte
- an die Systemmeldung 260003 "Benutzer abgemeldet" kann man beim KTP600 keine Funktion projektieren
- Funktionslisten werden immer unbedingt komplett abgearbeitet (kein IF..THEN oder ähnliches möglich)
- Systemfunktionen weisen Variablen keine Werte zu, welche außerhalb der projektierten Grenzwerte liegen
- schafft man es trotzdem, Variablenänderungen nur bedingt zu erzeugen, dann werden die an die panel-internen Variablen projektierten Ereignisse (Wertänderung, Grenzwerte überschritten) durch den Loop-Breaker blockiert, nur manuelle Eingaben lösen Ereignisse aus
- direkt im Aufgabenplaner hat Siemens auch noch die Auswahl der aufrufbaren Systemfunktionen arg reduziert, z.B. kein LineareSkalierung, für "höhere" Berechnungen ist nur SchiebenUndMaskieren nutzbar
Anscheinend gibt es aber Ausnahmen beim Loop-Breaker: bei der Variable, die durch die Systemfunktion "LeseGruppennummer" beschrieben wird, wird als Ergebnis dieser Zuweisung von "LeseGruppennummer" das Ereignis "Wertänderung" doch ausgelöst und die Funktionsliste abgearbeitet. Zumindest in der RT Simulation, ein echtes KTP600 habe ich nicht getestet.
Also folgende Lösung:
- Panel-interne Variablen Typ Int anlegen: Passwortlevel, IsLogin, IsLogout, LogoutTerm, AktBildNr, DestBildNr
- JEDES Bild muß beim Ereignis "Aufgebaut" die eigene Bildnummer in die Variable AktBildNr schreiben
Code:
SetzeWert
Variable (Ausgabe) : AktBildNr
Wert : <die Bildnummer des Bildes>
- im Aufgabenplaner beim Ereignis "Benutzerwechsel": die BenutzerGruppennummer in die Variable Passwortlevel schreiben
Code:
LeseGruppennummer
Variable (Ausgabe) : Passwortlevel
(beim Einloggen wird ein Wert 1..9 zugewiesen, beim Ausloggen wird 0 zugewiesen)
- Beim Ereignis "Wertänderung" der Variable Passwortlevel
Code:
InvertiereLineareSkalierung
X (Ausgabe) : IsLogin
Y : Passwortlevel
b : -9
a : 10
InvertiereLineareSkalierung
X (Ausgabe) : IsLogout
Y : Passwortlevel
b : 10
a : -10
LineareSkalierung
Y (Ausgabe) : LogoutTerm
a : 2 //die Bildnummer des Bildes, zu dem Logout wechseln soll
X : IsLogout
b : 0
LineareSkalierung
Y (Ausgabe) : DestBildNr
a : IsLogin
X : AktBildNr
b : LogoutTerm
AktiviereBildMitNummer
Bildnummer : DestBildNr
Objektnummer: 0
Sollte das auf einem echten KTP600 nicht funktionieren, dann bleibt wohl nur der Umweg über die PLC: bei Benutzerwechsel den Passwortlevel (BenutzerGruppennummer) in eine PLC-Variable schreiben und die PLC löst dann den Bildwechsel aus, indem sie eine andere Variable inkrementiert, wenn der Passwortlevel sich zu 0 ändert.
An das Ereignis wenn der Bildschirmschoner startet kommt man nicht ran.
Harald
PS: InvertiereLineareSkalierung - was für eine bescheuerte Übersetzung für InverseLinearScaling :roll: