WinCC Benutzerverwaltung mit Blacklist

Zuviel Werbung?
-> Hier kostenlos registrieren
Das sehe ich etwas anders.

Ich habe schon oft die Erfahrung gemacht, das übermotivierte Maschinenführer meinten diverse Sachen zu verstellen
ohne zu wissen was dies für Folgen haben kann.

Unsere Anlagen haben ein Passwort, dies wird einem Verantwortlichen übergeben. Bei vielen Firmen funktioniert das so,
bei anderen wurde es mit Edding auf das Panel geschrieben. Aber das liegt dann nicht mehr in meiner Verantwortung.

Auch bei uns zu oft der Fall gewesen leider. Deswegen soll bei uns eine strikte Trennung in Prozess- und Qualitätsparametern von Qualitätsabteilung / Instandhaltung / Produktion kommen. Die Idee sollte schon sein, dass jeder mit seiner Benutzerstufe auch nur das steuern kann, was er (wirklich) kennt und braucht.

Wir schweifen aber ein wenig in eine allgemeine Diskussion ab.

Nochmal allgemein gefragt. Kann man, und wenn ja wie, eine Blacklist an einem Panel sinnvoll umsetzen?
Ich hätte mir das grob so vorgestellt, aber hab von Skripten leider zu wenig Ahnung:

IF (Karten-ID nicht auf Blacklist) THEN
Anmelden mit Benutzer/Passwort von Mitarbeiterkarte;
END_IF

Aber wie würde zum Beispiel die Blacklist aussehen? DB in der SPS?

LG Stogi
 
Zuletzt bearbeitet:
Leg auf einer Netzwerkfreigabe eine Liste (.csv) an. Die lässt sich dann leicht in Excel pflegen.
Ich würde dort aber nicht mit einer Blacklist arbeiten.
In der Datei würde ich die ID (Spalte 1), Benutzergruppe (Spalte 2), das lässt sich leicht erweitern, schreiben
Nach dem scannen liest das HMI die Datei und meldet den Benutzer an. Oder eben auch nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe schon oft die Erfahrung gemacht, das übermotivierte Maschinenführer meinten diverse Sachen zu verstellen
ohne zu wissen was dies für Folgen haben kann.
... oder Produktionsleiter ... oder sogar QS-Mitarbeiter ...

Als ich selbst noch in dem Metier aktiv tätig war hatten wir es so gelöst :
- alle Anlagen waren vernetzt und hatten Zugriff auf einen Server
- als Visu hatten wir PC-Runtimes
- das Logging ging über etwas Ähnliches (bei uns die RFID-Stempelkarten)
- beim Logging wurde auf die Berechtigungs-Datei auf dem Server zugegriffen - hier war die Karten-Nummer hinterlegt und was man damit durfte. Im Unterschied hierzu gab es aber nicht Admin etc. sondern binäre Freigaben - also "darf die Parameter ansehen", "darf die Parameter ändern" uvm. Gab es zu einer Karten-Nummer keine Rückmeldung so gab es auch keine Freigabe. Die Liste war dementsprechend also auch mit nur geringem Aufwand zu pflegen. Allerdings - die ganz Freigabe-Logging-Geschichte war komplett selbstgebaut (mit VB-Scripten etc.)
- dazu kam, dass z.B. Parameter-Änderungen dokumentiert worden sind (also Mitarbeiter "A" hat den Grenzwert X von 10,0 auf 11,5 geändert)

Gruß
Larry
 
- beim Logging wurde auf die Berechtigungs-Datei auf dem Server zugegriffen - hier war die Karten-Nummer hinterlegt und was man damit durfte. Im Unterschied hierzu gab es aber nicht Admin etc. sondern binäre Freigaben - also "darf die Parameter ansehen", "darf die Parameter ändern" uvm. Gab es zu einer Karten-Nummer keine Rückmeldung so gab es auch keine Freigabe. Die Liste war dementsprechend also auch mit nur geringem Aufwand zu pflegen.
ich hatte mal ne Anforderung, da wurde pro Mitarbeiter festgelegt, welchen Grenzwert er verstellen darf und welchen nicht... Also Mitarbeiter A darf grenzwert von Messung 4 und 7 und 9 verstellen, Mitarbeiter B die Grenzwerte von 1 und 2 und 3, Mitarbeiter C alle Grenzwerte, aber keine Sollwerte... achja, die Anforderung wurde bei der IBN uns mitgeteilt...

Es gibt halt die komplette Bandbreite, von jeder darf alles bis zu unendlichem bürokratischen Aufwand. Deshalb sollte man sich vorher in ruhe überlegen, was wirklich Sinn macht und sein muß...
 
Hallo Volker, hallo Larry,

also an sich hattet ihr ja ähnliche Varianten.
Bei mir könnte ich mir den Ablauf entsprechend eurem Schema so vorstellen:

1. Karten-ID über RF1070R in die SPS lesen.
2. SPS überträgt Karten-ID an Panel(e)
3. Panel ließt Liste auf Netzwerkfreigabe/Server ein und sucht dort die ID
3. a) Wenn ID vorhanden nimmt sie die mit der ID verbundene Benutzerstufe und meldet sich damit an
3. b) Wenn ID nicht vorhanden, ist die Anmeldung fehlgeschlagen
--> 3. wird vollständig durch VB-Skripte implementiert (so machbar?)

Alle Panele haben die gleichen Benutzerstufen mit identischen angelegten lokalen Benutzern zu jeder Stufe.
Nach vollständiger Einrichtung an einem Panel sollte die Erweiterung auf neue Anlagen relativ einfach sein.
Der Wartungsaufwand der Benutzerliste wäre gering. Hätte sogar die Hoffnung, dass die IT mir hier evtl. eine Verbindung zum SAP "zaubern" könnte.
Die Benutzergruppen müssen jedoch gut durchdacht sein, da eine Änderung im Nachhinein sehr viel Aufwand wäre.
Ein Nachteil ist, dass Logging durch AuditTrail z.b. nur die Benutzergruppe anzeigt aber nicht die wirkliche Person. Das könnte man aber ggf. umgehen, indem man die Karten-ID mit ins Log schreibt.

Was meint ihr?
LG Stogi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja. Das ist so machbar.

In der SPS legst du 2 Variablen an.
z.B. ID-Nummer string[20] (smarttags(ID-Nummer)) und eine variable die dann in der hmi das script aufruft (dieses var muss in der hmi bei aktualisierung auf 'zyklisch fortlaufend stehen zb 200ms).
Die var id-nummer solltest du auch auf 'zyklisch fortlaufend' stellen 100-200ms
Der grund ist.... wenn id-nummer auf zyklisch bei verwendung steht müsstest du die var im script über eine rezeptur laden.
das ist bei 1 var aber nicht notwendig wenn du folgendermaßen vorgehst.
z.b. beide var werden alle 100ms aktualisiert.
wurde die id gescannt rufst du zeitverzögert (z.b. 500ms) später das script über die var auf.
damit kannst du eigentlich sicher sein, dass die id im hmi aktualisiert wurde.

im hmi rufst du bei ereignis (z.b. grenzwert überschritten) das script id_pruefen auf.

das script (das ist teilweise aus dem Bauch raus. sind bestimmt ein paar syntaxfehler drin)
Code:
'id_pruefen
Dim fso,datei,inzeile,gesplittet(10)
On Error Resume Next

datei = "\\netwerkpfad\benutzer.csv"
Set fso= CreateObject("filectl.file")
fso.open datei, 1
do
  if fso.eof then exit do
  inzeile = fso.lineinputstring
gesplittet = split(inzeile,";")  'bin gerade nicht sicher ob wce das kann. sonst muss man das anderes auflösen.
  smarttags(id) = gesplittet(0)
'sollten die vars aus der csv mit "" eingefast sein diese mit replace entfernen
'oder   id = replace (gesplittet(0),chr(34),"") 'chr(34) ist "
  smarttags(berechtigung) = gesplittet(1)
if id = smarttags(ID-Nummer) then
  'tue das was bei gefundener id zu tun ist. z.b. benutzer anmelden
 call anmeldung_loggen 'ein script wann sich wer eingeloggt hat
 exit do
end if
loop
fso.close
set fso = nothing

Code:
'anmeldung_loggen
Dim fso,datei
On Error Resume Next

datei = "\storage card sd\anmeldung.txt" 'kann natürlich auch eine datei im netzwerk sein
Set fso= CreateObject("filectl.file")
fso.open datei, 8 '8 = anhängen
fso.lineprint date &";"& time &";"& smarttags(id)
fso.close
 
ich habe simatic logon noch nie verwendet. aber woher soll der logon wissen, das die karte verloren gegangen ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Simatic Logon. Zentrale Verwaltung und wenn jemand die Karte verliert wird das Passwort geändert.
LOGON ist eine der Optionen meines Benutzerverwaltungs-Projekts und aktuell warte ich auf das Angebot von Siemens dazu.

Die Variante von Volker wäre die "In house" Option und sicherlich günstiger. Abgesehen davon spannend umzusetzen!


ich habe simatic logon noch nie verwendet. aber woher soll der logon wissen, das die karte verloren gegangen ist.
Denke kein Benutzerverwaltungssystem weiß das oder? Die Frage für mich ist eher wie viel Aufwand ist es auf die Meldung vom Mitarbeiter zu reagieren, um das Ganze wieder sicher zu machen.

LG Stogi
 
Die Variante von Volker wäre die "In house" Option und sicherlich günstiger. Abgesehen davon spannend umzusetzen!
Es macht natürlich Arbeit - vor Allem auf der Visu. Am Ende hast du dann aber das, was du haben willst und nicht das, was das Kaufprodukt bestenfalls hergibt ...
(ich kenne das Logon allerdings auch nicht)
 
hatte ein bisschen langeweile.
im projekt wird die user.csv eingelsen (im projekt von der mmc und nicht aud dem netz)
benutzeranmeldung hab ich nicht implementiert.
aber als grundlage sollte da klappen
es wird auch eine logdatei (hier die mmc) geschriebn.
 

Anhänge

Zuviel Werbung?
-> Hier kostenlos registrieren
wow vielen Dank! Ich versuche das die Tage mal auf eine der Anlagen zu schmeißen.

Spricht für euch etwas dagegen die Kommunikation mit der user.csv an der SPS stattfinden zu lassen und anschließend nur ein Passwort mit Anmeldetrigger an das Panel zu übergeben? Hätte ggf. den Vorteil, dass ich mich bei Anlagen mit mehreren Panelen direkt an allen anmelden könnte aber nur einmal die Karten-ID überprüfen müsste.

Edit.: Denkfehler... Das Hauptpanel kann nach Überprüfung der Karten-ID das Passwort auch an die SPS schicken und von dort wird es an weitere Panele verteilt. Anzahl an Anlagen mit mehreren Panelen hält sich ohnehin in Grenzen.

LG Stogi
 
Zuletzt bearbeitet:
???
sps scannt die id. sps setzt befehl ab die csv zu lesen. als antwort bekommst du dann die daten aus der csv im db in der sps die den lesebefehl abgesetzt hat. danit kannst du dann machen was du willst.
 
Hallo Stogi!

Wollte mal nachfragen ob du die genannten Vorschläge schon testen konntest? Muss nämlich ein ziemlich ähnliches Szenario realisieren...

LG Schruser
 
Hey,
vielen Dank für Input und Codebeispiel.
Habe es jetzt umgesetzt und es ist gerade in der Testphase. Werde es, wenn ich damit glücklich bin, mal vollständig hochladen.

Ein Problem habe ich aber aktuell.
Ich möchte die Anmeldungen natürlich loggen aber dazu nicht in ein eigenes File schreiben sondern es zum schon vorhandenen Fehlermeldungsarchiv hinzufügen.

Bisher hab ich zwei Optionen gefunden, die mir aber beide nicht gefallen.
1. ShowSystemAlarm "Nachricht"
-> Dann Systemmeldungen mit archivieren. Eigentlich will ich den "Spam" aber nicht in dem Archiv haben.
2. Die Nachricht im Skript erzeugen und an die Steuerung übergeben und dann eine HMI Meldung daraus machen.
-> umständlich

Kann ich vom VB Skript aus direkt eine HMI Meldung erzeugen?
 
wenn es bitmeldungen sind sollte das gehen. das array of word für die bitmeldungen hat ja die aktualisierung auf 'zyklus fortlaufend'.
wenn du im script ein bit darin setzt setzt sollte auch die entsprechende maldung angezeigt werden.
 
die Anlage an der ich es gerade teste hat ihre Meldungen mit Program_Alarm umgesetzt. Wir haben aber auch Anlagen, die mit Bitmeldungen arbeiten. Ich suche ne Lösung die für beides geht, weil ich nach Möglichkeit alles was damit zusammenhängt so wenig wie möglich ändern möchte wenn ich es auf eine neue Anlage bringe.

Hab es jetzt mal mit der "Nachricht im Skript erzeugen, an SPS schicken und dann als Parameter an Program_Alarm übergeben"-Version umgesetzt. Werde eure Vorschläge umsetzen, wenn ich an einer Anlage mit Bitmeldungen ankomme.

Mit ging es vor allem darum eine Version zu haben, die ich als Standard in unsre Bib ablegen kann für neue Anlagen.
 
Hab es jetzt mal mit der "Nachricht im Skript erzeugen, an SPS schicken und dann als Parameter an Program_Alarm übergeben"-Version umgesetzt. Werde eure Vorschläge umsetzen, wenn ich an einer Anlage mit Bitmeldungen ankomme.
Auch wenn die SPS Program_Alarm verwendet, so kann das HMI intern zusätzlich Bitmeldungen verwenden. Dein umständlicher Meldeweg funktioniert nur, wenn eine Verbindung zu der "Hilfs"-SPS besteht und die SPS in RUN ist. HMI-interne Ereignisse wie Benutzeranmeldungen sollten aber unabhängig von Verbindungen zu SPS HMI-intern verarbeitet werden.

Warum willst Du das simple "ShowSystemalarm" nicht verwenden? Entstehen in Deinem HMI-System mehr Systemmeldungen als Prozessmeldungen oder aus welchem Grund willst Du die Systemmeldungen vor dem Kunde verstecken?

Hast Du mal den Tipp von faust aus #38 ausprobiert? Es könnte tatsächlich sein, daß auf diesem Weg Bitmeldungen getriggert werden (habe ich noch nicht ausprobiert). Vermutlich werden aber bei HMI-internem Trigger keine Folge-Ereignisse getriggert (Loop-Breaker). Und Bitmeldungen verursachen zwei Meldungen (bei "gekommen" und bei "gegangen").

Harald
 
Zurück
Oben