WinCC Function FileExists

KARPi

Level-1
Beiträge
12
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Nutzer,

ich möchte in meiner Visualisierung ein Integer (Identifikationsnummer) auswerten und ein Vereichzeichnis nach einer Datei (welche die selbe ID hat) scannen, welche dann angezeigt werden soll. Falls keine dazugehörige Datei zu finden ist, soll ein Bild angezeigt werden, dass keine Informationen zu dieser ID angelegt sind.

Ich weiß, dass es die Funktion FileExists gibt, mit welcher ich es versucht habe, jedoch komme ich nicht ans Ziel.

Muss dazu sagen, das es mein erstes mal in VB-Skript ist, also mag mein Problem vermutlich sehr einfach zu lösen sein.

Mein bisheriger Code:

Code:
[FONT=Verdana][FONT=Verdana]Function PictureName_Trigger(ByVal Item)
[/FONT]
[FONT=Verdana]Dim expression
Dim tag1
Dim fso
[/FONT]
[FONT=Verdana]Set tag1 = HMIRuntime.Tags("M1_DB908_DBW_220")
 tag1.Read
 expression = tag1.value
[/FONT]
[FONT=Verdana]Set fso = CreateObject("Scripting.FileSystemObject")
[/FONT]
[FONT=Verdana]If expression <= 1 And fso.FileExists("D:\Project\SMV\GraCS\ID1.jpg") Then
  PictureName_Trigger = "ID1.jpg"
Elseif expression <= 2 And fso.FileExists("D:\Project\SMV\GraCS\ID2.jpg") Then
  PictureName_Trigger = "ID2.jpg"
Elseif expression <= 3 And fso.FileExists("D:\Project\SMV\GraCS\ID3.jpg") Then
  PictureName_Trigger = "ID3.jpg"
Elseif expression <= 4 And fso.FileExists("D:\Project\SMV\GraCS\ID4.jpg") Then
  PictureName_Trigger = "ID4.jpg"
Elseif expression <= 5 And fso.FileExists("D:\Project\SMV\GraCS\ID5.jpg") Then
  PictureName_Trigger = "ID5.jpg"
Elseif expression <= 6 And fso.FileExists("D:\Project\SMV\GraCS\ID6.jpg") Then
  PictureName_Trigger = "ID6.jpg"
else
  PictureName_Trigger = "KEINE_ID.jpg"

end if
End Function[/FONT]

[/FONT]
Vielen Dank für eure Mühen :)
 
Zuletzt bearbeitet:
Als allererstes wäre es wichtig zu wissen, auf welchem HMI Gerät der VBS Code laufen soll, und welches WinCC Du verwendest... die Dateipfade im Code sehen aus als ob es ein WinCC V7.x wäre?
Zweitens Tip: Programmcode ist besser lesbar, wenn man ihn als Code markiert (der #-Button im Beitragseditor), dann sieht Dein Code z.B. so aus:
Code:
Function PictureName_Trigger(ByVal Item)

Dim expression
Dim tag1
Dim fso

Set tag1 = HMIRuntime.Tags("M1_DB908_DBW_220")
 tag1.Read
 expression = tag1.value

Set fso = CreateObject("Scripting.FileSystemObject")

If expression <= 1 And fso.FileExists("D:\Project\SMV\GraCS\ID1.jpg") Then
  PictureName_Trigger = "ID1.jpg"
Elseif expression <= 2 And fso.FileExists("D:\Project\SMV\GraCS\ID2.jpg") Then
  PictureName_Trigger = "ID2.jpg"
Elseif expression <= 3 And fso.FileExists("D:\Project\SMV\GraCS\ID3.jpg") Then
  PictureName_Trigger = "ID3.jpg"
Elseif expression <= 4 And fso.FileExists("D:\Project\SMV\GraCS\ID4.jpg") Then
  PictureName_Trigger = "ID4.jpg"
Elseif expression <= 5 And fso.FileExists("D:\Project\SMV\GraCS\ID5.jpg") Then
  PictureName_Trigger = "ID5.jpg"
Elseif expression <= 6 And fso.FileExists("D:\Project\SMV\GraCS\ID6.jpg") Then
  PictureName_Trigger = "ID6.jpg"
else
  PictureName_Trigger = "KEINE_ID.jpg"

end if
End Function
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

die Visualisierungs-PC's (Clients) sind Beckhoff Rechner (C9900-l755) mit einem Windows 10 Betriebssystem untergeordnet einem Visualisierungs-Server Beckhoff mit Windows Server 2016 OS.
Die HMI Geräte sind die daugehörige Control Panels von Beckhof CP2915-0010.

Die WinCC Version ist 7.4 SP1 Upd5

Danke für den Tipp, werde ich beim nächsten mal beachten :)
 
Hallo Leute,

ich habe meinen Code erweitert, soweit funktioniert auch alles.
ich setze mir den Pfad mit der ID und dem Dateitypen richtig zusammen.
Mein Code quittiert seinen Dienst aber bei der FileExists Methode.
Kann durch viel herumprobieren und Werte ausgeben, sicher sagen, dass die FileExists Methode in meinem Beispiel nicht arbeitet.
Das Ergebnis ist immer ein false.

Hat jemand eine Idee?

Reminder: WinCC v7.4




Code:
Function PictureName_Trigger(ByVal Item)

Dim DyeID
Dim filepath
Dim fso
Dim msg
Dim intSelection
Dim strSelection

Const     strFolder = "D:\Temp\Rasterbilder"
Const     strExtension = ".jpg"
Const     strPathAdditive = "\ID"

Set     DyeID = HMIRuntime.Tags("M1_DB908_DBW_220")
    
        intSelection = Int(DyeID.Read)
        strSelection = CStr(intSelection)
            HMIRuntime.Trace "Dye ID: " & strSelection & vbCrLf
        filepath = strFolder  & strPathAdditive & strSelection & strExtension
            HMIRuntime.Trace "Searching file: " & filepath & vbCrLf
    
Set     fso = CreateObject("Scripting.FileSystemObject")

  If     (fso.FileExists(filepath)) Then
              msg = filepath & " exists."
          PictureName_Trigger = filepath        
  Else
        PictureName_Trigger = "D:\Temp\Rasterbilder\KEINE_ID.jpg"
            msg = filepath & " doesn't exist."  
            HMIRuntime.Trace "Feedback: " & msg & vbCrLf
  End If
  
End Function
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ich setze mir den Pfad mit der ID und dem Dateitypen richtig zusammen.
Mein Code quittiert seinen Dienst aber bei der FileExists Methode.
Kann durch viel herumprobieren und Werte ausgeben, sicher sagen, dass die FileExists Methode in meinem Beispiel nicht arbeitet.
Das Ergebnis ist immer ein false.
Bist Du wirklich sicher daß der Dateiname inkl. Pfad richtig zusammengebastelt ist? Keine unerwarteten/falschen Leerzeichen, Backslash oder Sonderzeichen drin? (ganz genau hinschauen)
Deine Testausgabe HMIRuntime.Trace "Feedback: " ... sitzt an falscher Stelle (im Else-Zweig) - sie muß hinter das End If

Versuche ein ganz einfaches Beispiel mit nur ganz wenig Basteln und erweitere es Schritt für Schritt:
Code:
filepath = "D:\Temp\Rasterbilder\" & "KEINE_ID.jpg"
HMIRuntime.Trace "Searching file: '" & filepath & "'" & vbCrLf

Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(filepath) Then
  MsgBox "File exist:" & vbCrLf & filepath
Else
  MsgBox "File doesn't exist:" & vbCrLf & filepath
End If

Harald
 
Ich hab den Fehler gefunden, lag an meiner schlampigen Datenablage.
Ein Kopierfehler...

Habe aber dennoch eine Frage, die mit dem Topic eher weniger zutun hat.

Habt ihr für WinCC 7.4 eine vorgehensweise wie ich auf ein Netzlaufwerk zugreifen kann?
Müsste jedoch im Code auch den Benutzernamen und das Passwort zuweisen, da das Netzlaufwerk nicht dauerhaft an den vorhandenen Clients verbunden werden darf.

Danke euch :)
 
Zurück
Oben