WinCC VB Script - Benutzerwechsel nach Excel loggen

Austria

Level-1
Beiträge
36
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen!

Ich habe ein Script geschrieben, das mir in Excel dokumentieren soll wann und welcher Benutzer sich auf dem HMI angemeldet hat (ähnlich zum Audit Trail). Dabei gibt es einen Scheduled task, der auf den Benutzerwechsel triggert und dann die Events GetUserName und GetGroupNumber startet und diese in die Variablen userName und groupNumber schreibt. Jedoch habe ich noch das Problem, dass nur der aktuell angemeldete Benutzer und Nummer in Excel geloggt wird. Wie müsste ich mein Script verändern, sodass die alten Benutzerlogindaten in der Tabelle bestehen bleiben und neue Daten in neuen Spalten ersichtlich sind? Sprich es soll eine Art Historie der Daten als Tabelle ersichtlich sein. Hinweis: Datum der Änderungen von Benutzerwechseln muss ich noch in das Script einfügen.
Code:
Sub UserLogsToExcel()

Dim FolderPath, ObjectPath, Filename, File, FileExist, Columns, Row

FolderPath = "XXX"

Filename = "UserLogs.csv"

Set ObjectPath = CreateObject("Scripting.FilesystemObject")

'Check if folder exists

If Not ObjectPath.FolderExists(FolderPath) Then             

ObjectPath.CreateFolder FolderPath     

End If

' Check if file exists

Set File = CreateObject("Scripting.FilesystemObject")

FileExist = File.FileExists(FolderPath & "\" & Filename)

If FileExist = False Then

File.CreateTextFile(FolderPath & "\" & Filename)

Set Columns = File.OpenTextFile(FolderPath & "\" & Filename, 8)

                Columns.WriteLine("User ; User Group ; Data3")

                Columns.Close                 

                Set File = Nothing           

End If

'Write data to file

Set File = CreateObject("Scripting.FilesystemObject")

Set Row = File.OpenTextFile(FolderPath & "\" & Filename, 8)

Row.WriteLine(SmartTags("userName") & ";" & SmartTags("groupNumber") & ";" & SmartTags("measurementVal1") & ";")

Row.Close

Set File = Nothing  'Here we are releasing the File.


End Sub
 
Warum steht denn bei Folderpath "XXX" drinne?
Ansich öffnest du deine Datei ja im append modus ( Modus 8 ) sodass es klappen sollte
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum steht denn bei Folderpath "XXX" drinne?
Ansich öffnest du deine Datei ja im append modus ( Modus 8 ) sodass es klappen sollte
wollte den Pfad nicht angeben da mein vollständiger Name etc. drinnen steht...

aktuell schaut die Tabelle so aus: es wird also nur der aktuell angemeldete Benutzer geloggt

1650354988831.png

Ziel wäre es so in der Art: die zuvor geloggten Benutzer sollten auch ersichtlich sein und die neuen werden in neue Spalten eingetragen

1650355064727.png
 
Wo es ligt kann ich nicht sagen auf dei Schnelle.
Ich denke dass die Code in FAQ ist klarer als deiner Code.
Nimm die FAQ als Vorlage - ab "Windows".
 
Warum steht denn bei Folderpath "XXX" drinne?
wollte den Pfad nicht angeben da mein vollständiger Name etc. drinnen steht...
Wieso steht in dem Pfad Dein Name drin? Eine Anlagenvisu sollte nicht Daten im Windows-Benutzer-Verzeichnis einer ganz bestimmten Person ablegen. Probiere mal einen anderen Pfad, vielleicht hat der Windows-Benutzer des Visu-PC nicht alle erforderlichen Rechte für Dein Benutzerverzeichnis.

Unschönheiten:
- Du loggst nicht "nach Excel" sondern in eine stinknormale csv-Textdatei, die man mit vielen verschiedenen Programmen öffnen kann - notfalls auch mit Excel falls man nichts besseres kann...
- Am Ende einer Zeile gehört kein Listentrennzeichen (";") mehr hin. Das gehört nur zwischen Werte, aber nicht generell hinter jeden Wert. Das zusätzliche Trennzeichen am Zeilenende macht unnötig Probleme beim Einlesen der Datei.
- Events kann man nicht "starten", Events passieren

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
- Du loggst nicht "nach Excel" sondern in eine stinknormale csv-Textdatei, die man mit vielen verschiedenen Programmen öffnen kann - notfalls auch mit Excel falls man nichts besseres kann...
Lieber nicht mit Excel die originalen CSV mit Excel öffnen. So lange das Excel die Datei offen hat sperrt es dass das Skript in das Datei neue Zeilen hinzufügen kann.
Wenn Excel, dann zuerst den Datei kopieren und dann die Kopie mit Excel öffnen.
Oder einfacher, ein CSV Viewer verwenden der die Datei nicht sperrt. Ich empfehle Diamond CSV Viewer, ist Freeware.
 
Oder noch einfacher: "Rechtsmausklick auf die csv-Datei > Bearbeiten" sollte die csv-Datei in Notepad (Editor) öffnen
(ich bin aber nicht sicher, ob das "Bearbeiten" standardmäßig ist)

Für "richtige" Programmierer: "Senden an" "Editor" (Notepad) einrichten. Dann kann man sehr einfach jede beliebige Datei mit dem Editor öffnen. (sollte man aber nicht mit Gigabyte großen Dateien machen ;) )

Harald
 
Oder noch einfacher: "Rechtsmausklick auf die csv-Datei > Bearbeiten" sollte die csv-Datei in Notepad (Editor) öffnen
...
Für "richtige" Programmierer: "Senden an" "Editor" (Notepad) einrichten.
"Öffnen mit" sollte es auch tun.
Das richtet sich nach der ersten Auswahl des Editors von selbst ein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Frage hätte ich doch noch: Nun funktioniert das Script problemlos. Jedoch wird es nur ausgeführt bzw. die CSV Datei erstellt, wenn ich das HMI simuliere. Gehe ich mit dem HMI Online funktioniert es nicht, bzw. wird keine CSV erstellt. Was könnte dies für Ursachen haben?
Info: nutze WinCC Advanced
Kann es daran liegen, dass ich keine Runtime Lizenz habe?
 
Das Skript wird vermutlich durch die Ereigniss Wertänderung von eine SPS Variabel aufgerufen.
Wird diese Variabel zyklisch aktualisiert, oder nur 'nach Verwendung' ?
Muss zyklisch aktualisiert werden.

edit: Dumm von mir. Es ist die Ereigniss Benutzerwechsel. Dies hat nichts mit SPS Variabeln zu tun,

Die Skripte funktionieren auch auf ein Runtime ohne Lizenz,
 
Auf was für einem Gerät läuft Dein HMI? Welche WinCC Version verwendest Du? Ist die für Deine Windows Version freigegeben? Welche Windows Version?

Gibt es den Speicherpfad für die csv-Datei auf dem HMI-Gerät? Sind die erforderlichen Rechte vorhanden?
Erhältst Du Runtime-Fehlermeldungen? Welche?
Kannst Du Runtime-Fehlermeldungen in Deiner Runtime überhaupt sehen? --> mache in ein Bild eine Meldeanzeige für Modus "Meldepuffer" für mindestens die Meldeklasse "System", dann kannst Du die Systemmeldungen lesen
Du könntest in dem Skript vor/nach kritischen oder markanten Stellen Testmeldungen ausgeben (mit ShowSystemAlarm), dann siehst Du, ob das Skript überhaupt aufgerufen wurde und bis wo es kommt.

Die WinCC Runtime läuft auch ohne Lizenz, auch die Skripte. Ohne Lizenz wird nur alle paar Minuten eine Meldung angezeigt daß die Lizenz fehlt.

Was war denn eigentlich die Ursache Deines ersten Problems?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf was für einem Gerät läuft Dein HMI? Welche WinCC Version verwendest Du? Ist die für Deine Windows Version freigegeben? Welche Windows Version?
HMI Comfort Panel (KTP400) ist über ein Lan Kabel an meinen PC verbunden. WinCC Version: WinCC Advanced
Windows Version des PCs: Win10 Pro / Bin mir nicht ganz sicher was du mit für meine Windows Version freigegeben meinst...?

Gibt es den Speicherpfad für die csv-Datei auf dem HMI-Gerät? Sind die erforderlichen Rechte vorhanden?
ja gibt es. Ich kann nochmal mein endgültiges Script anfügen

Erhältst Du Runtime-Fehlermeldungen? Welche?
Kannst Du Runtime-Fehlermeldungen in Deiner Runtime überhaupt sehen? --> mache in ein Bild eine Meldeanzeige für Modus "Meldepuffer" für mindestens die Meldeklasse "System", dann kannst Du die Systemmeldungen lesen
okay danke für den Tipp werd ich machen!
Du könntest in dem Skript vor/nach kritischen oder markanten Stellen Testmeldungen ausgeben (mit ShowSystemAlarm), dann siehst Du, ob das Skript überhaupt aufgerufen wurde und bis wo es kommt.
okay werde ich auch berücksichtigen

Was war denn eigentlich die Ursache Deines ersten Problems?
ehrlich gesagt bin ich mir nicht mehr ganz sicher was ich alles geändert habe, da es nun doch schon ein paar Tage her ist. Jedenfalls funktioniert es so wie ich es möchte. Habe mir ein paar Sachen von dem von JesperMP hingewiesenen Link zu Beispiel Scripten abgeschaut und eingefügt.

Das Script wird mittels Event eines Buttons ausgelöst.


Code:
Sub Log_To_CSV()

Dim FolderPath, ObjectPath, Filename, File, FileExist, Columns, Row, datum, zeit

'Set Folder and Filename
FolderPath = "gewünschter Path hier einfügen"
Filename = "gewünschter Filename hier einfügen"

Set ObjectPath = CreateObject("Scripting.FilesystemObject")

'Check if folder exists

If Not ObjectPath.FolderExists(FolderPath) Then             

ObjectPath.CreateFolder FolderPath     

End If

' Check if file exists

Set File = CreateObject("Scripting.FilesystemObject")

FileExist = File.FileExists(FolderPath & "\" & Filename)

If FileExist = False Then

File.CreateTextFile(FolderPath & "\" & Filename)

'Create Row Header
Set Columns = File.OpenTextFile(FolderPath & "\" & Filename, 8)
            
                Columns.WriteLine("Date ; Time ; WinCC User ; Maximum Access Level ; Employee Name ; Personal Number")
                
                Columns.Close                 

                Set File = Nothing           
End If

'Write data to file
Set File = CreateObject("Scripting.FilesystemObject")

Set Row = File.OpenTextFile(FolderPath & "\" & Filename, 8)

Row.WriteLine Date&";"&Time&";"&userName&";"&groupNumber&";"&employeeName&";"&employeePersonalNumber

Row.Close

Set File = Nothing  'Here we are releasing the File.


End Sub
 
HMI Comfort Panel (KTP400)
Na das hatte ich doch geahnt... auf den HMI-Panelen funktionieren die VBS-Skripte mit Datei-Operationen für PC nicht. Da mußt Du ganz andere Anweisungen verwenden. Darauf wird auch in der FAQ hingewiesen, die Jesper in #4 verlinkt hat. Lies auch mal in der FAQ den Beitrag #2, wo speziell eine Lösung für dieses Problem angesprochen wird.

Auf den HMI Panels wird schon das CreateObject("Scripting.FilesystemObject") einen Runtimefehler auslösen und das Skript wird normalerweise abgebrochen (wenn Du das nicht speziell verhindert hast mit On Error Resume Next ).

Gibt es den Speicherpfad für die csv-Datei auf dem HMI-Gerät? Sind die erforderlichen Rechte vorhanden?
ja gibt es. Ich kann nochmal mein endgültiges Script anfügen
??? Auf den HMI Panels gibt es gar keine Laufwerksbuchstaben, von daher kann es z.B. einen Pfad "C:\..." wie auf einem PC gar nicht geben.
Oder schreibst Du auf einen Netzwerkpfad?

Harald
 
Mal wieder ist Harald die schnellste.

+1 die andere Hinweise von Harald übernehmen.
Die eingebettete Systemmeldungen mittels das Err Objekt und das (gepufferte) Meldeanzeige sind unentbehrlich wenn man VBS Skripte entwickelt.

Und ich wurde den Weg umgekehrt gehen. Nicht dein Code nach den FAQ ein bisschen anpassen, aber die Vorlage im FAQ 100% übernehmen, und erst wenn dies funktioniert die Code anpassen nach deine Anforderungen.
 
Zuletzt bearbeitet:
Zurück
Oben