VBS Script um Daten aus CPU an NAS zu senden

don_looney

Level-1
Beiträge
94
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Moin zusammen

Ich habe ein Problem mit einem Script in WinCC TIA V13 SP1 UP1. Zuvor habe ich schon viele Threads hier im Forum, genau so wie auf der Siemens Homepage angeschaut. Ich habe vorher noch nicht wirjlich viel Kontakt mit VBS gehabt, deswegen frage ich hier jetzt mal nach.
In meinem Script lege ich einen Ornder auf dem NAS Laufwerk an wenn dieser noch nicht vorhanden ist.
Danach möchte ich in diesem Ordner eine Datei erstellen.
Ich bekomme es einfach nicht hin in dem Ordner der erstellt wurde eine Datei zu erstellen.
Momentan ist der Code so gestaltet, dass die Datei dann im Verzeichnis vor dem erstellten Ordner angelegt wird. Das funktioniert soweit auch.

Genutzt wird eine 319-3 PN/DP CPU und ein TP 700 Comfort HMI

Ich wäre für jede Hilfe dankbar.

Hier der Code:

/////////////////////////////////////////////////////////////////////
Dim fdatei, fordner, path, path2, ordner

'Fehlerausgabe initialisieren

SmartTags("Datensatz_NAS.Fehler_Objekt_erstellen") = False
SmartTags("Datensatz_NAS.Fehler_Objekt_oeffnen") = False
SmartTags("Datensatz_NAS.Fehler_Daten_schreiben") = False
SmartTags("Datensatz_NAS.Fehler_Ordner_nicht_vorhanden") = False
SmartTags("Datensatz_NAS_Fehler_Ordner_erstellen") = False
SmartTags("Datensatz_NAS_Fehler_Ordner_nicht_vorhanden") = False

'Datenbaustein für Fehleranalyse rücksetzen

If SmartTags("Daten_init") = True Then
SmartTags("Daten_init") = False
Err.Clear
Exit Sub
End If

'path = "\\nas\daten\"& CStr(Year(Date)) & "_" & CStr(Month(Date)) & "_" & CStr(Day(Date)) &"__" & CStr(Hour(Time)) &"_" & CStr(Minute(Time)) &"_" & CStr(Second(Time)) & ".csv"
path = "\\nas\daten\" & CStr(Year(Date)) & "_" & CStr(Month(Date)) & "_" & CStr(Day(Date)) & ".csv"
path2 = "\\nas\daten\"
ordner = "\\nas\daten\"& CStr(Year(Date)) & "_" & CStr(Month(Date)) & "_" & CStr(Day(Date))

'Error Routine - Fehlerroutine

On Error Resume Next

'Ordner für Datum erstellen

Set fordner = CreateObject("Filectl.Filesystem")

If fordner.dir(ordner) = "" Then fordner.mkdir(ordner)

If Err.Number <> 0 Then
SmartTags("Datensatz_NAS_Fehler_Ordner_erstellen") = True
Err.Clear
Exit Sub
End If

fordner.Close
Set fordner = Nothing

'If fdatei.dir(ordner) = "" Then
' SmartTags("Datensatz_NAS_Fehler_Ordner_nicht_vorhanden") = True
'End If

'Create object - Objekt erstellen

Set fdatei = CreateObject("Filectl.File")

'If Err.Number <> 0 Then
' SmartTags("Datensatz_NAS.Fehler_Objekt_erstellen") = True
' Err.Clear
' Exit Sub
'End If
Err.Clear

'Open the textfile - Öffnen der Textdatei

fdatei.open path , 2

If Err.Number <> 0 Then
SmartTags("Datensatz_NAS.Fehler_Objekt_oeffnen") = True
Err.Clear
Exit Sub
End If

'Write values into the textfile
fdatei.LinePrint ("Datensatz1; " & SmartTags("Datensatz_NAS.Nummer1") & ";")
fdatei.LinePrint ("Datensatz2; " & SmartTags("Datensatz_NAS.Nummer2") & ";")

If Err.Number <> 0 Then
SmartTags("Datensatz_NAS.Fehler_Daten_schreiben") = True
Err.Clear
Exit Sub
End If

'Close file - Datei schließen
fdatei.Close
Set fdatei = Nothing
//////////////////////////////////////////////////
 
Dein "NAS" ist ein Ordner auf ein Server irgendwo ?
Das TP700 Panel muss zuerst in das Netzwerk eingebunden werden. Bist du so weit ?
PN/DP hat ein Checkliste erstellt:
http://www.sps-forum.de/faq/35006-von-panel-auf-pc-ueber-lan-zugreifen.html

edit: Aha, so weit bisst du doch.

Es antwortet nicht deine Frage, aber du machst jeden Tag ein neuen Ordner und ein neuen Datei. Warum genügt es nicht mit ein neuen Datei pro Tag in denselben Ordner ?
Es ist ja nicht so schlimm wenn es eine Menge Dateien gibt mit unterschiedliche Namen die von den Datum generiert sind. So mache ich es selber.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Don :p,

ich hatte gewisse Schwierigkeiten, deinen Code zu lesen, da zum einen die Einrückung fehlt und zum anderen deine auskommentierten Zeilen nur schwer zu erkennen waren.

Nichtsdestotrotz hier meine Hinweise:
+ In deiner ursprünglichen Pfadangabe fehlt m.E. ein Backslash zwischen dem Ordner- und dem Dateinamen.
+ Ich würde die Variablen etwas eindeutiger benennen, 'fordner' und 'ordner' z.B. lassen sich nur schwer unterscheiden.

Gruß, Fred
 
Es antwortet nicht deine Frage, aber du machst jeden Tag ein neuen Ordner und ein neuen Datei. Warum genügt es nicht mit ein neuen Datei pro Tag in denselben Ordner ?
Es ist ja nicht so schlimm wenn es eine Menge Dateien gibt mit unterschiedliche Namen die von den Datum generiert sind. So mache ich es selber.

Das Script ist nur ein Prototyp. Wenn es fertig ist werden in jedem Ordner sehr viele einzelne Datein liegen.
Ich wollte nur den allgemeinen Ablauf fertig haben um dann die Feinheiten zu programmieren.

@ Faust

Danke das du dir die Zeit genommen hast den Code durch zu sehen. Ich werd das mal ausprobieren. Hab vorhin nur schnell den Thread eröffnet weil ich kurz angebunden war.
Kann es jedoch erst am Freitag wieder testen.
Die Variablen werde ich mal umbeschriften.

Thx für die Antworten bis jetzt :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bekomme es einfach nicht hin in dem Ordner der erstellt wurde eine Datei zu erstellen.
Momentan ist der Code so gestaltet, dass die Datei dann im Verzeichnis vor dem erstellten Ordner angelegt wird. Das funktioniert soweit auch.

Hallo,
ich verstehe im Augenblick dein Problem nicht wirklich. Die beiden von mir zitierten Sätze widersprechen sich nach meiner Meinung.
Was funktioniert nun und was nicht ?
Willst du nur einmal am Tag eine Datei erstellen ? Oder willst du jeden Tag eine Datei erstellen in die dann fortlaufend (also in gewissen Zeitabständen) immer weitere Datenzeilen hinein geschrieben werden ?
Was mir auffällt ist : du machst einfach ein Open (forWriting) ohne zu überprüfen, ob es die Datei nicht bereits gibt - in dem Fall mußt du die Datei entweder vorher löschen oder ein Open for Appending (Parameter 8) machen um der bereits bestehenden Datei weitere Zeilen anzuhängen.

Gruß
Larry
 
Wie faust schon schrieb: da fehlt ein Backslash. So geht es besser:
Code:
ordner = "\\nas\daten\" & CStr(Year(Date)) & "_" & CStr(Month(Date)) & "_" & CStr(Day(Date))
path = ordner & "\" & CStr(Hour(Time)) & "_" & CStr(Minute(Time)) & "_" & CStr(Second(Time)) & ".csv"

Die ollen Unterstriche würde ich weglassen, dafür aber dafür sorgen, daß die Datumsteile immer zweistellig sind:
Code:
ordner = "\\nas\daten\" & CStr(Year(Date)) & Right("0" & CStr(Month(Date)), 2) & Right("0" & CStr(Day(Date)), 2)
path = ordner & "\" & Right("0" & CStr(Hour(Time)), 2) & Right("0" & CStr(Minute(Time)), 2) & Right("0" & CStr(Second(Time)), 2) & ".csv"

Beides ist unnötig:
Code:
[COLOR="#FF0000"]fordner.Close
Set fordner = Nothing[/COLOR]

Für Fehlerausgaben und Testausgaben zum Debuging verwende ich die Systemfunktion "ShowSystemAlarm" und eine Meldeanzeige.

Tip: Programmcode behält die Einrückungen, wenn man ihn beim Posten zwischen [CODE]-Tags einfügt - siehe der #-Button im Beitragseditor. Oder drücke unter diesem Beitrag "Zitieren", dann siehst Du die [CODE]-Tags vor und hinter dem Programmcode.
Code:
If Err.Number <> 0 Then
    ShowSystemAlarm "Fehler beim Erstellen des Ordners '" & ordner & "'"
    Err.Clear
    Exit Sub
End If

Harald
 
Hallo,
ich verstehe im Augenblick dein Problem nicht wirklich. Die beiden von mir zitierten Sätze widersprechen sich nach meiner Meinung.
Was funktioniert nun und was nicht ?
Willst du nur einmal am Tag eine Datei erstellen ? Oder willst du jeden Tag eine Datei erstellen in die dann fortlaufend (also in gewissen Zeitabständen) immer weitere Datenzeilen hinein geschrieben werden ?
Was mir auffällt ist : du machst einfach ein Open (forWriting) ohne zu überprüfen, ob es die Datei nicht bereits gibt - in dem Fall mußt du die Datei entweder vorher löschen oder ein Open for Appending (Parameter 8) machen um der bereits bestehenden Datei weitere Zeilen anzuhängen.

Gruß
Larry

Ich werde mehrmals am Tag Datein in dem Ordner für den jeweiligen Tag ablegen. Das Format der csv Datei ist noch nicht richtig. Es war nur ein Versuch das dass Script soweit läuft. Die Feinheiten
wollte ich später machen. Mir ging es erstmal um die Funktion.

@ PN/DP

Danke für die genauen Angaben zu meinem Code :) Ich werde es am Freitag ausprobieren und meine Erkenntnisse dann posten.
Vielen Dank schon mal an alle die sich dem Thema annehmen.

Ich bin noch nicht so fit mit VBS :ROFLMAO:


Ich habe es gerade getestet und es funktioniert wunderbar. Vielen Dank.
Eine Frage habe ich jedoch noch zu der Fehlerroutine. Ich hatte es erst auch mit einer Fehlerausgabe versucht als Meldefenster.
Nur weiß ich nicht genau wie ich dieses Meldefenster der Fehlerausgabe dem Script zuweise, deswegen bin ich auf einen DB umgestiegen.
Wäre nett wenn mir das jemand erklären könnte.
 
Zuletzt bearbeitet:
Zurück
Oben