TIA WinCC RT Advanced - Status der Netzwerkverbindung visualisieren

1008nm

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,

ich bin auf der Suche nach einer Möglichkeit den aktuellen Status einer Netzwerkverbindung anzuzeigen in WinCC RT Adv..
Genauer gesagt soll angezeigt werden ob der Zugriff auf ein gemapptes Netzlaufwerk funktioniert.

Ich habe es bisher versucht über ein VB-Skript zu lösen, welches jede Sekunde über die AS getriggert wird:
Code:
Sub NW_Test()
    
'Deklaration der lokalen Variablen
Dim f
Dim fso            
Dim path        
    
'Auswahl des Speicherpfads
    path = "F:\XXX"

'Starten der Fehlerroutine
On Error Resume Next

'Datei Objekt erstellen
Set fso = CreateObject("Scripting.FileSystemObject")

'Ordnerinhalt lesen
Set f = fso.GetFolder(path)

'Auf Fehler prüfen
If Err.Number<> 0 Then
    ShowSystemAlarm "Error # " & CStr(Err.Number)& " "& Err.Description
    Err.Clear
    NW_Fehler = True
    Exit Sub
ELSE
    NW_Fehler = FALSE
End If

End Sub

Das Skript soll den Ordnerinhalt lesen. Sollte der Zugriff auf den Pfad nicht möglich sein, erwarte ich eine Wertänderung bei der Variable "Err.Number".
Ist diese ungleich "0" soll die Variable "NW_Fehler" gesetzt werden.

Leider bringt das Skript nicht das gewünschte Verhalten. Wenn ich die Netzwerkverbindung trenne, wird die Variable "NW_Fehler" nicht gesetzt.

Hat jemand evtl. eine Idee woran es hier liegen kann oder einen besseren Weg diese Abfrage umzusetzen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort DeltaMikeAir.
Die Triggervariable ist auf "Zyklisch fortlaufend" eingestellt.
Habe testweise zu Anfang des Skript einen SystemAlarm eingefügt. Dieser wird auch korrekt angezeigt.
 
Hallo,

funktioniert denn das Script, wenn du es gezielt EINMALIG ausführst?
Also die beiden Fälle
+ Ordner erreichbar -> Script ausführen -> NW_Fehler = false (wobei du zum Test vielleicht auch hier eine Rückmeldung einbauen solltest)
+ Ordner nicht erreichbar -> Script ausführen -> NW_Fehler = true

BTW:
Auf das "Exit Sub" nach NW_Fehler = true solltest du verzichten.
Außerdem kenne ich es so, dass alle in einem Script erzeugten Objekte (hier: fso und f) auch wieder "zerstört" werden sollten (set fso = nothing).


Gruß, Fred
 
Wenn Du eine Netzwerkverbindung testen willst, dann versuche es mal mit der Angabe eines UNC-Netzwerkpfades:
Code:
path = [COLOR="#A52A2A"]"\\Servername\Freigabename"[/COLOR] [COLOR="#008000"]'oder "\\Servername\Freigabename\OrdnerXYZ"[/COLOR]

Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FolderExists(Path) Then
    NW_Fehler = False
ELSE
    NW_Fehler = True
End If

PS: das Testen der Erreichbarkeit muß doch sicher nicht jede Sekunde aufgerufen werden, das ist ja schneller als der Timeout bei Nichterreichbarkeit. Aufruf jede Minute und evtl. direkt vor einem Zugriff sollte dicke reichen.


Außerdem kenne ich es so, dass alle in einem Script erzeugten Objekte (hier: fso und f) auch wieder "zerstört" werden sollten (set fso = nothing).
Kann man machen, ist aber nicht nötig.

Harald
 
Bzw. so einzugeben:
SmartTags("NW_Fehler")

ist NW_Fehler eine projektierte Variable?

Die Variable "NW_Fehler" ist als interne Variable im Projekt angelegt. Die Verwendung von "SmartTags()" habe ich mir gespart. Hat bisher immer ohne funktioniert bei angelegten Variablen ;)
Werde ich aber auch mal testen.


, dann versuche es mal mit der Angabe eines UNC-Netzwerkpfades
Könnte ich auch mal Testen. Was wäre dabei der Unterschied?

Weiß jemand ob der Grundgedanke, also die Verwendung von .GetFolder(), hier überhaupt der Zielführen ist?

Danke für eure bisherigen Antworten :)

Gruß
Niklas
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir ist noch etwas aufgefallen.

Muss vor "Err.Number" noch das Objekt, in diesem Fall "fso", genutzt werden?

Also wie folgt:

Code:
'Auf Fehler prüfen
If  fso.Err.Number<> 0 Then
    ShowSystemAlarm "Error # " & CStr(Err.Number)& " "& Err.Description
    Err.Clear
    NW_Fehler = True
    Exit Sub
Else
    NW_Fehler = False
End If

Nachtrag:
Das war die Lösung. Mit "fso.Err.Number" findet eine Fehlerauswertung statt.

Nur kommt jetzt permanent der Fehler: Error #438: Object doesn't support this property or method

Bringt mich scheinbar auch nicht weiter.... aber wieder was gelernt ;)
 
Zuletzt bearbeitet:
Das Err-Objekt existiert immer, es gibt keine Err-Instanzen im fso-Objekt. "fso.Err.Number" ist falsch, es muß "Err.Number" heißen.

Siemens "empfiehlt" den Verfügbarkeits-Check eines Speicherlaufwerks so:
Wie stellen Sie mit einem Skript fest, ob ein Speicherlaufwerk mit Wechselmedien (USB-Stick, SD-/MM-Card) auf einem HMI-Gerät schreibbereit ist?
Wegen der Verwendung von GetAbsolutePathName funktioniert das Siemens-Beispiel aber vermutlich nicht mit UNC-Netzwerkpfaden. Und wie das Siemens-Beispiel wie behauptet die Schreibbereitschaft des Laufwerks feststellt bleibt mir ein Rätsel...

Harald
 
Zurück
Oben