WinCC VBS: Dateipfad eingeben/ auslesen

donkey

Level-2
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen,

wieder mal eine kleine VBS-Frage. Meine VBS-Fähigkeiten sind (immer) noch ziemlich begrenzt. Vielleicht kann mir jemand helfen...

Es geht einfach nur darum, dass ich einen Dateipfad in einem HMI-Bild angebe und dieser Pfad im Skript weiter benutzt wird (zum Auslesen einer Datei-das funktioniert zum Glück).

Einen Screenshot vom HMI-Bild findet ihr im Anhang.

Code:


Code:
Dim Dateipfad, readPfad
Set Dateipfad = CreateObject("HMIRuntime")


Set readPfad= Dateipfad.HMIRuntime.tags("Pfad")
HmiRuntime.Trace"Value:"readPfad.read


success = xml.Load("readPfad")



Vielen Dank :)
 

Anhänge

  • HMI_Bild.png
    HMI_Bild.png
    19,7 KB · Aufrufe: 28
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, dass ich mich nicht eindeutig ausgedrückt habe.

Ich bin dabei eine Datei auszulesen und dafür muss ich ja einen Dateipfad angeben. Diesen Pfad gebe ich bisher im VB Skript an. Ich möchte das Ganze aber flexibler gestalten. Heißt: Der Bediener soll den Pfad am HMI ändern können. Dafür habe ich ein Eingabefeld erstellt, dessen Inhalt bzw. Pfad ausgelesen werden soll, damit die Datei geladen/ gelesen werden kann. Mit meinem Code oben hat es nur leider nicht funktioniert.
 
Wenn du die Variable doch in der Visu angelegt hast, als lokale Variable und nicht als Variable im Script, dann kannst du sie doch direkt an das Eingabefeld hängen.
Der Code, den du da stehen hast, macht für mich gar keinen Sinn.
Mit :
Set readPfad= Dateipfad.HMIRuntime.tags("Pfad")
bekommst du, wenn überhaupt, nur die Variable als Objekt - nicht deren Inhalt.

Und diese Zeile :
HmiRuntime.Trace"Value:"readPfad.read
kann so gar nicht funktionieren. Wo hast du denn dieses Beispiel her ?
Genau wie das :
success = xml.Load("readPfad")
 
Das Beispiel habe ich nach langer Suche gestern Mittag in einem anderen Forum gefunden. Dort wurde es als funktionierend "verkauft" :D

Code:
success = xml.Load("readPfad")

--> Da wo readPfad steht, steht normalerweise der Dateipfad. Wenn ich diesen fest im Skript vergebe, funktioniert es auch.
Nun möchte ich aber gerne, dass der eingegebene Pfad (im HMI-Bild) im xmlLoad(Dateipfad) steht.

Hast du einen kleinen Denkanstoß für mich?

Danke
 
1) EA-Feld für HMI-Variable "Pfad"
2) EA-Feld für HMI-Variable "Dateiname"
3) VBS-Script (ungetestet):
Code:
Dim fso, path, file, fullname

path = SmartTags("Pfad")      'z.B. "C:\Temp"
file = SmartTags("Dateiname") 'z.B. "MyFile.txt"
fullname = path & "\" & file  '---> "C:\Temp\MyFile.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(path) Then
    ShowSystemAlarm "Pfad '" & path & "' nicht gefunden."
Else
    If Not fso.FileExists(fullname) Then
        ShowSystemAlarm "Datei '" & fullname & "' nicht gefunden."
    Else
        ShowSystemAlarm "Datei '" & fullname & "' gefunden."
    End If
End If

FAQ: Protool/WinCCflex/TIA Daten lesen / schreiben mit VB-Script

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Hilfe.

Ich habe es gerade mal ausprobiert.

ich habe dann leider Probleme mit dem Rest meines Skripts:

Code:
success = xml.Load("fullname")


If xml.parseError.errorCode <> 0 Then
    SmartTags("Fehler") = 1
Else
    SmartTags("Fehler") = 0
End If


Set NodeList = xml.selectSingleNode("//a/b/c")
numAttr = NodeList.getAttribute("beispiel")
SmartTags("Auftrag 1[0]") = numAttr

numAttr = NodeList.getAttribute("beispiel2")
SmartTags("Auftrag 1[1]") = CDbl(numAttr)



Sobald ich den Teil des Codes auskommentier, meckert der Debugger:

Objekt für Nodelist notwendig/erforderlich.


Vorher hat dieser Teil des Codes problemlos funktioniert und meine XML ausgelesen...
 
Zuletzt bearbeitet:
Du bist jetzt natürlich nicht besonders hilfreich - denke immer daran :
Wir sitzen nicht vor deinem Rechner, sehen nicht was du siehst und können auch nicht deine Gedanken lesen ... :(

Was du also machen solltest um weiterzukommen :
- poste das vollständige Script
- teile uns (in Anlehnung an das Beispiel von Harald) mit was in welcher Variablen wirklich steht
- deckt sich der Inhalt von "fullname" mit den Namen der XML-Datei, die du einlesen möchtest ?

Du kannst "ShowSystemAlarm" auch dazu misbrauchen, dir die Inhalte deiner temporären Variablen anzeigen zu lassen ...

Gruß
Larry
 
Ich stand gestern wohl ein wenig neben mir, entschuldige!

Der Inhalt von "Fullname" wird mir korrekt in der PLC-Variable angezeigt.

Kurze Zusammenfassung über die Funktion des Skripts (funktionierte bisher auch): Es soll eine XML ausgelesen werden, die so aussieht:

Code:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>


-<a>


-<b>

<c Id="0" Job="C:\ProgramData\xxxx" Index="1" X="1200" Y="200" Z="100,00" G="SKL!" Stack="1"/>
</b>

</a>

Hier nochmal der gesamte VBS-Code:

Code:
Dim fso,xml, success, numAttr, i, NodeList , xmlPfad, objTag, path, file, fullname
 
    'SmartTags("DimensionX") = 77
Set xml = CreateObject("Microsoft.XMLDOM")

'Dateipfad angeben
fullname = SmartTags("fullname")

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FolderExists(path) Then
   ShowSystemAlarm "Pfad '" & path & "' nicht gefunden."
Else
    If Not fso.FileExists(fullname) Then
      ShowSystemAlarm "Datei '" & fullname & "' nicht gefunden."
    Else
        ShowSystemAlarm "Datei '" & fullname & "' gefunden."
   End If
   End If

'
success = xml.Load("Pfad")


If xml.parseError.errorCode <> 0 Then
    SmartTags("Fehler") = 1
Else
    SmartTags("Fehler") = 0
End If


Set NodeList = xml.selectSingleNode("//a/b/c")
numAttr = NodeList.getAttribute("G")
SmartTags("Auftrag 1[0]") = numAttr

numAttr = NodeList.getAttribute("X")
SmartTags("Auftrag 1[1]") = CDbl(numAttr)

numAttr = NodeList.getAttribute("Y")
SmartTags("Auftrag 1[2]") = CDbl(numAttr)

numAttr = NodeList.getAttribute("Z")
SmartTags("Auftrag 1[3]") = CDbl(numAttr)



'For i In NodeList:
'SmartTags(arr[i]."DimensionX") = CDbl(NodeList.getAttribute("X"))

'

Beim Debuggen kommt dann eine Fehlermeldung. Diese kam vor dem Hinzufügen von Haralds Code noch nicht (s. Anhang)

Edit: Bei xmlLoad habe ich "fullname" statt "Pfad". Ich konnte es gerade nicht mehr ändern...

Gruß
Donkey
 

Anhänge

  • Fehler.PNG
    Fehler.PNG
    28,3 KB · Aufrufe: 9
Zuviel Werbung?
-> Hier kostenlos registrieren
Entwarnung :D Fehler gefunden und ausgemerzt.
Man darf en Pfad nicht mit Anführungszeichen angeben.
Puh, hat es lange gedauert, den Fehler zu finden. Der Fehlercode war leider nicht so aufschlussreich.

Vielen Dank euch beiden für eure Hilfe.
Schönes Wochenende!
 
Zurück
Oben