WinCC v7.0 VBS Probleme

greenpowa

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forenuser,

[Vorgeschichte] Wir suchen schon seit geraumer Zeit nach einer Software die bei unseren Anlagen eine Variable ausliest, auswertet und dementsprechend eine E-Mail versendet.
Bisher nutzten wir immer den eWon Router (mächtiges Gerät, einfach einsetzbar - wenn man mal herausgefunden hat, wie er funktioniert). Leider gibt es diese Geräte nicht mit LTE Modem. In bestimmten Gebieten in den USA gibt es mittlerweile aber nur noch LTE-Anbindung - und genau da geht die Anlage demnächst hin.
Andere Router die mit einer Siemens SPS-300 kommunizieren habe ich nirgends gefunden. Somit sind wir dazu über gegangen eine Softwarelösung zu suchen und sind dabei auf VIDECs AIP gestoßen. Leider kann genau diese Software bei den USA Anlagen nicht verwendet werden (andere Programmstruktur, kommt das AIP nicht mit klar...). Schade.
Somit wollte ich die einfachste Lösung wählen: Ein VBScript welches mir eine E-Mail sendet.

Gesagt - getan. Script geschrieben, als *.vbs auf den Rechner gelegt, ausgeführt. Funktioniert!

[Problemstellung] Die *.vbs-Datei möchte ich jetzt irgendwie getriggert aus dem WinCC heraus starten (wegen mir bei Fehler XY). Wenn ich den Code nun eins zu eins in den Script Editor einbinde (als Aktion!) und das Ganze triggere passiert ... nichts. (Der "Editor" kommt mir eher wie ein schlechter Witz vor. Selbst bei absichtlichen Syntaxfehlern meldet dieser bei einer Sytaxprüfung keine Fehler...) Egal ob ich das Script über eine Variable oder zyklisch (z.B. jede Minute) triggere, es scheint nicht durchzulaufen.
Um der Gefahr eines wirklichen Syntaxfehlers (VBS =/= WinCCVBS?) aus dem Weg zu gehen habe ich versucht die *.vbs-Datei aus dem WinCC heraus aufzurufen (Stichwort: WSHShell) (auch wieder zyklisch und/oder variablengesteuert). Und wieder: Nichts.

[Frage] Wo hängts? Ich habe, um ganz ehrlich zu sein, 0 Erfahrung mit VBS im WinCC. Sind da doch so große Unterschiede dass Windoof es ausführen kann, aber WinCC nicht? Wie kann ich überhaupt erkennen ob ein Script aufgerufen wird oder nicht?

Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt. Desweiteren hoffe ich, dass mir jemand hierbei unter die Arme greifen kann, denn ich komme so nicht wirklich weiter.
Sollte jemand nähere Informationen brauchen (z.B. Quelltext o.ä.) werde ich diese natürlich gerne hier nachreichen

Vielen Dank bis hier!
 
Hallo,

hier ein WinCC VBS Script für eine Action. Habe es mal irgendwo im Netz gefunden und etwas abgeändert. Läuft seit mehreren Jahren problemlos, im Moment unter WinCC V7.2.

Code:
Option Explicit
Function action
 Dim objEMail, body
 Dim var
 
'E-Mail Adresse Absender
    Const sender = "absender@domain.de"
'E-Mail Adresse Empfänger
    Const receiver = "empfaenger@domain.de"
'Betreff
    Const subject = "Text"
    'Postausgangsserver der Absender E-mail-Adresse
    Const server = "Servername oder IP"
'Benutzername (Email-Konto Absender)
    Const user = "user"
'Passwort (Email-Konto Absender)
    Const password = "password"
    'Schema? sollte so belassen werden.....
    Const schema = "http://schemas.microsoft.com/cdo/configuration/"
 
'Auslesen eines Variablenwertes
 Set var = HMIRuntime.Tags("variablenname")
 var.Read
 
'Hier den gewünschten Text eintragen der in der Email enthalten sein sollte. (var.Value ist dann der aktuelle Prozesswert der Variable
    body = "Text" & var.Value
   

    On Error Resume Next

    Set objEMail = CreateObject("CDO.Message")
    With objEMail
        .From = sender
        .To = receiver
        .subject = subject
        .Textbody = body
'Hier kann noch ein Anhang mit angegeben werden. Pfad und Dateiname sollte natürlich stimmen.
        '.AddAttachment "d:\pc.bmp"
        With .Configuration.Fields
            .Item(schema & "sendusing") = 2
            .Item(schema & "smtpserver") = server
            .Item(schema & "smtpserverport") = 25
            .Item(schema & "smtpauthenticate") = 1
            .Item(schema & "smtpusessl") = False
            .Item(schema & "sendusername") = user
            .Item(schema & "sendpassword") = password
        End With
        .Configuration.Fields.Update
        .Send
    End With

End Function

Pylades
 
OK, also irgendwie möchte das in der Form auch nicht klappen (nutze WinCC v7.0 mit SP3 und Upd5). Wenn du jedoch sagst bei dir funktioniert das: Wo könnte es bei mir noch hängen?
Wenn ich den Trigger der Aktion auf zyklisch setze (natürlich nur zum Testen), reicht das dann? Muss ich, außer es zu speichern noch mehr machen? Runtime neu starten? WinCC neu starten?
Hier, der Vollständigkeit halber, der Code, den ich in meinem *.vbs verwendet habe:

Code:
'InitialisierenSet emailObj      = CreateObject("CDO.Message")


'---Von/Zu (mehrere Empfaenger mit Komma oder Semikolon trennen, je nach Sendeservice)
'---Beispiel "XXX, XXX"
emailObj.From     = "XXX"
emailObj.To       = "XXX"


'---Titel/Text
emailObj.Subject  = "PU31 - CEB Message"
emailObj.TextBody = "--- PU31: CEB started! ---"


'---Anhang falls erwuenscht (bisher nur mit existierenden Dateien verwendet... Evtl. auf Dateigueltigkeit abfragen)
'emailObj.AddAttachment "c:\..."


'---Konfiguration der CDO-Klasse
Set emailConfig = emailObj.Configuration


emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") 	        = "smtp.gmail.com"	
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") 	= 465			
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing")    	= 2			
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") 	= 1  			
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl")      	= True 			
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername")    	= "XXX"	
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")   	= "pw"		
emailConfig.Fields.Update


'---Und weg damit
emailObj.Send


'---MSGBOX wenn alles geklappt hat
'If err.number = 0 then Msgbox "Done"


End Function
 
Der Code funktioniert, nur halt leider mal wieder nicht im WinCC...
Irgendwas mache ich doch bestimmt falsch.

VBS Aktion erstellt -> Code eingetippt -> Trigger dazu erstellt -> gespeichert -> Runtime neu gestartet (und dabei natürlich geguckt, ob auch die Global Scripts mit gestartet werden)

Wo könnte es hängen? (Ich bin mir sicher, dass es etwas ziemlich simples ist...)
Die Anleitung zu VBS unter WinCC (~2600 Seiten von Siemens) bin ich entsprechend auch Schritt für Schritt durch... Ich verzweifle...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe nun (ich hoffe es hilft) Screenshots erstellt... vielleicht sieht ja jemand etwas darauf:
http://imgur.com/dAL2T29
http://imgur.com/OgaTSwp
http://imgur.com/ilRUhad

(Bei den triggern nicht wundern: habe mehrere Erstellt um erst Mal auf Nummer Sicher zu gehen, dass das Script auch wirklich ausgeführt wird. Laut Anleitung sollte das kein Problem sein, selbst wenn diese sich überschneiden...)
 
In den Anlaufeinstellungen des Rechners bei RT-Start hast du den Skript-Server (Global Script Runtime) angehakt?

Idee:
Erstell dir in einem Bild mal einen Button, bei dessen Mausklick du dein Skript ausführst. Zur (Fehler)Analyse lege dir ein GSC-Diagnose Fenster in das gleiche Bild neben dem Button, damit du siehst ob Fehler auftreten.
Im VBS Code kannst du z.B. hinzufügen:
Code:
HMIRuntime.Trace("Ausgabe in Zeile XY" &vbcrlf)
Damit kannst du testhalber Inhalte ausgeben.
 
Zuletzt bearbeitet:
Jo und APDiag mal anwerfen bzw. das Debugging mit dem MSDebugger...

läuft bei Dir überhaupt schon ein selbsterstelltes Script in WinCC?

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also erstmal vielen Dank an die Helfer!
Probleme haben sich gelöst. (Für den Fall dass jemand mal die SuFu verwendet, hier die Problempunkte:)

- Ich musste den Rechner komplett neu starten, damit das Script überhaupt ins WinCC geladen wurde (Runtime restart war nicht genug); Sichtbar über die GSC Runtime Console
- Danach ging es lediglich nur noch darum das Script an und für sich zu debuggen (hatte Probleme mit dem Port, das war easy); Sichtbar über die GSC Diagnostics Console (Habe das Script hierfür einfach auf einen Button gebunden, wie weiter oben vorgeschlagen) - Wieso gibt es hier im ach so tollen Script Editor keinen standardmäßigen debugger? Und Achtung: Die Syntaxabfrage funktioniert auch keinen Meter - aber das wisst ihr ja bestimmt...

Also Hauptproblem war wirklich das mit dem kompletten Neustart (denn laut Siemens Doku geht das ja schließlich alles live während die Runtime läuft... Von wegen).

Vielen Dank an alle!
 
Jo, an die Eigenarten von WinCC muss man sich erstmal gewöhnen. Das ist leider so. Bei den neueren Versionen (ab 7.2?)wird ein MS Debugger mit . installiert. Warum bei Dir nen Rechner Neustart notwendig war ist unklar. Bei Scripten in nem Bild reicht normalerweise ein Bildwechsel.
Gruss
 
Zurück
Oben