Bildwechsel wenn keine Eingabe mehr

DerMatze

Level-1
Beiträge
525
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

die SPS soll das Startbild des HMI aktivieren wenn eine gewisse Zeit keine Eingabe mehr erfolgt.
Wie ermittle ich diese Zeit? Gibts da evtl einen Befehl in WinCCflex?
Das aktivieren des Startbildes funktioniert, mir fehlt "nur" noch die "Eingabezeit"...
Wer kann mir dazu einen Denkanstoß geben?
Vielen Dank.

Gruß
DerMatze
 
Das ist in WinCC flexible nicht möglich.
Du müßtest an wirklich JEDES bedienbare Objekt bei sogut wie JEDEM Ereignis das Rücksetzen des Countdown-Timers projektieren. Und selbst das reicht nicht, um zweifelsfrei festzustellen, daß der Bediener garantiert nicht gerade mit einer Eingabe beschäftigt ist. Oder ob vielleicht der Rezeptureditor gerade rückfragt ob die mühsam erstellte Rezeptur denn auch gespeichert werden soll oder der Bediener will in irgendeinem Bild ein Objekt bedienen und während sich sein Finger bereits zum Touchscreen senkt erscheint an dieser Stelle plötzlich die "Anlage-Aus"-Schaltfläche vom Grundbild oder ...

Egal was auch immer Du programmieren wirst, es wird halbes unsauberes Gebastel sein und irgendwann mal unerwünscht zuschlagen. Die Bediener werden Dich verfluchen.

Mache eine Schaltfläche zum Aufruf des Grundbildes die in jedem Bild sichtbar ist (z.B. im Permanentbild) und gut ist.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist in WinCC flexible nicht möglich.

Schade!

Das ist in WinCC flexible nicht möglich.
Du müßtest an wirklich JEDES bedienbare Objekt bei sogut wie JEDEM Ereignis das Rücksetzen des Countdown-Timers projektieren. Und selbst das reicht nicht, um zweifelsfrei festzustellen, daß der Bediener garantiert nicht gerade mit einer Eingabe beschäftigt ist. Oder ob vielleicht der Rezeptureditor gerade rückfragt ob die mühsam erstellte Rezeptur denn auch gespeichert werden soll oder der Bediener will in irgendeinem Bild ein Objekt bedienen und während sich sein Finger bereits zum Touchscreen senkt erscheint an dieser Stelle plötzlich die "Anlage-Aus"-Schaltfläche vom Grundbild oder ...
Genau das sollte mit berücksichtigt werden.

Die Bediener werden Dich verfluchen.
Der Wunsch für dieses "Feature" kommt ja nicht vom Bediener, sondern ein - zwei Etagen höher....

Andere Möglichkeit:
Lässt sich dazu evtl die Anmeldezeit eines Benutzers dazu verwenden, bzw. das daraus resultierende automatische Abmelden?
Also: wenn automatische Abmeldung erfolgt --> Startbild aktivieren

Wenn ja, dann muss ich gute Argumente finden um mit Benutzerrechten zu arbeiten. Denn dann liese sich dieses "Feature" ja realisieren...? :ROFLMAO:
Aber die Bediener würden immernoch fluchen :sm17:

Gruß
DerMatze
 
Das automatische Ausloggen ist tatsächlich noch das sicherste Anzeichen dafür, daß der Bediener schon eine Weile nichts mehr bedient hat - wenn jedes Bedienobjekt (außer Bildnavigation) ein Einloggen erfordert. Allerdings verhindert auch dies nicht die von mir konstruierte Situation wo sich unter dem Finger des Bedieners plötzlich unerwartet das Bild ändert. Und was bei einem automatischen Bildwechsel aus dem Rezeptur-Editor passiert weiß ich nicht - ich experimentiere nicht mit automatischen Bildwechseln, weil ich diese generell ablehne. Ich kann mir nur schlecht vorstellen, wie solche technisch unnötigen automatischen Bildwechsel unbeanstandet durch die Risikobeurteilung kommen.

Harald
 
Mach doch eine Taste und darunter läuft ein Timer ab. Startbild in x Sekunden. Wenn der Bediener grade an einer komplizierten Eingabe ist oder einfach nur etwas in einem anderen Bild beobachten will dann muss er halt ab und an die Taste die Taste drücken und der Timer wird zurückgesetzt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das automatische Ausloggen ist tatsächlich noch das sicherste Anzeichen dafür, daß der Bediener schon eine Weile nichts mehr bedient hat - wenn jedes Bedienobjekt (außer Bildnavigation) ein Einloggen erfordert. /QUOTE]
Kommt man an dieses (wohl interne) Ereignis irgendwie ran?
Es handelt sich um einmal um ein KTP600 Basic DP un eine PC RT

Gruß
DerMatze
 
Das automatische Ausloggen ist tatsächlich noch das sicherste Anzeichen dafür, daß der Bediener schon eine Weile nichts mehr bedient hat - wenn jedes Bedienobjekt (außer Bildnavigation) ein Einloggen erfordert. /QUOTE]
Kommt man an dieses (wohl interne) Ereignis irgendwie ran?
Es handelt sich um einmal um ein KTP600 Basic DP un eine PC RT

Gruß
DerMatze

Mann kann den aktuellen Benutzelevel auf eine Variabel legen, dieses kann man dann auswerten.
 
Mach doch eine Taste und darunter läuft ein Timer ab. Startbild in x Sekunden. Wenn der Bediener grade an einer komplizierten Eingabe ist oder einfach nur etwas in einem anderen Bild beobachten will dann muss er halt ab und an die Taste die Taste drücken und der Timer wird zurückgesetzt.

Das könnte man auch machen, werds mal anregen. Danke für den Hinweis.
Die Frage ist ob es für den Bediener komfortabel genug ist...?
:confused:

Gruß
DerMatze
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mach doch eine Taste und darunter läuft ein Timer ab. Startbild in x Sekunden. Wenn der Bediener grade an einer komplizierten Eingabe ist oder einfach nur etwas in einem anderen Bild beobachten will dann muss er halt ab und an die Taste die Taste drücken und der Timer wird zurückgesetzt.
Gute Idee. OK, damit kann ich leben. Im Rezeptur-Editor könnte man den Countdown blockieren.

Harald
 
Bildwechsel bei Logout

Ein Ereignis "BeiLogout" gibt es nicht, aber das Ereignis "Benutzerwechsel". Ist bei dem Ereignis kein Benutzer mehr angemeldet, dann war es ein Logout. An das Ereignis kann man ein Skript anhängen, was den Bildwechsel zum Grundbild auslöst, wenn der Benutzerwechsel ein Logout war.

Geräteeinstellungen > Aufgabenplaner
Ereignis: Benutzerwechsel
Funktionsliste: 1 OnUserChange

Skript OnUserChange
Code:
' Sub OnUserChange()
' Skript wird beim Ereignis "Benutzerwechsel" aufgerufen (im Aufgabenplaner projektiert)
' Wenn ein Benutzer ausgeloggt wird oder sich abmeldet dann zum Grundbild wechseln
' Wenn der Benutzerwechsel eine erfolgreiche Benutzeranmeldung war dann nichts tun
Dim user

GetUserName user   'angemeldeten Benutzername lesen
If user = "" Then  'Benutzerwechsel war ein Logout oder fehlgeschlagener Benutzerwechsel
    ActivateScreen "002_Grundbild", 0
End If

Hinweise:

Wenn es ein Benutzer mit wenig Rechten angemeldet ist und in irgendeinem Bild ein Bedienelement bedienen will, was höhere Rechte verlangt, dann erscheint der Anmeldedialog. Wenn dann eine Benutzeranmeldung versucht wird aber fehlschlägt, dann wird der Benutzer ausgeloggt --> das Ereignis "Benutzerwechsel" wird ausgelöst und ruft das Skript auf --> es wird zum Grundbild gewechselt.

Wenn bei einem Benutzer die Abmeldezeit mit 0 eingestellt ist, dann wird dieser Benutzer nicht automatisch abgemeldet.

Harald
 
An das Ereignis kann man ein Skript anhängen, was den Bildwechsel zum Grundbild auslöst, wenn der Benutzerwechsel ein Logout war.
OK, damit kann ich in der PC RT arbeiten, aber das KTP600 kann keine Skripte... :-(

An das selbstständige Aktivieren des Bildschirmschoners beim KTP ist sicherlich auch kein rankommen? Der wird nämlich nach 5min aktiviert, wenn der aktiviert wird, wird ja auch nicht bedient.:idea:

Gruß
DerMatze
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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:
 
Ok, vielen Dank.
So ein Aufwand für dieses (unsinnige) umschalten zum Startbild :?.
Ich werds mal ausprobieren, wenn ich wieder vor Ort bin...

Gruß
DerMatze
 
Zurück
Oben