Script erzeugt keine Datei

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, habe ein script geschrieben, welches mit daten von meiner Anlage mitloggen soll. Es funktioniert auch super, wenn ich die WINCC felx runtime auf meinem Notebook laufen lasse. Auf dem Rechner, wo sie jedoch in wirklichkeit läuft, wird lediglich einverzeichnis erstellt. Eine datei wird nicht erzeugt.

Hatte jemand schon mal so ein problem? Habe adminrechte und die dateianzeige steht auf alle dateien anzeigen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier der Code

Hier mein Quellcode

Code:
Dim fso, fs, datum, zeit, datei, datei_1, textfile1, Sollwerte

Sollwerte = SmartTags("Status_Allgemein\Freigabe_Schritt")

Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = CreateObject("WScript.Shell")

If Not fso.FolderExists("C:\SPSLogbook") Then fso.CreateFolder("C:\SPSLogbook")
    

datei = "C:\SPSLogbook\SPS_Logdaten_vom_" & Date & ".txt"
datei_1 = "C:\SPSLogbook\SPS_Logdaten_vom_" & Date - 365 & ".txt"

If Not fso.FileExists (datei) Then
    If fso.FileExists (datei_1) Then
        fso.DeleteFile(datei_1)
    End If
    Set textfile1 = fso.CreateTextFile(datei, True)
    textfile1.WriteLine "SPS Logdaten vom " & Date 
    textfile1.WriteLine "Folgende Variablen werden in dem Logfile gesichert:"
    textfile1.WriteLine "Werte X1 ; Werte Z1 ; Werte Z2 ; Werte Z3 ; Werte Z4 ;"
    textfile1.WriteLine 
    textfile1.Close
End If

If fso.FileExists (datei) Then
    Set textfile1 = fso.OpenTextFile(datei, 8)
    If Sollwerte Then
    textfile1.WriteLine Time&"; SETPOS X1:;        "& SmartTags("Achse_X1\Daten.Achse_X1.Status.Sollposition")&";"_
    & "    SETPOS Z1:;        " & SmartTags("Achse_Z1\Daten.Achse_Z1.Status.Sollposition")&";"_ 
    & "    SETPOS Z2:;        " & SmartTags("Achse_Z2\Daten.Achse_Z2.Status.Sollposition")&";"_ 
    & "    SETPOS Z3:;        " & SmartTags("Achse_Z3\Daten.Achse_Z3.Status.Sollposition")&";"_ 
    & "    SETPOS Z4:;        " & SmartTags("Achse_Z4\Daten.Achse_Z4.Status.Sollposition")&";"
    textfile1.WriteLine Time&"; Luftkissen außen:;    "    & SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Sichtbarkeit_Button.S_B_Luftkissen_aussen")&";"_
    & "    Luftkissen innen:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Sichtbarkeit_Button.S_B_Luftkissen_innen")&";"_
    & "    Werkst. gelöst:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Werkstueck_loesen")&";"_
    & "    Werkst. gespannt:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Werkstueck_spannen")&";"_
    & "    Zentrierung unten:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentrierung_ab")&";"
    textfile1.WriteLine Time&"; Zentrierung1 gelöst:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor1_loesen")&";"_
    & "    Zentrierung1 gespannt:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor1_spanne")&";"_
    & "    Zentrierung2 gelöst:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor2_loesen")&";"_
    & "    Zentrierung2 gespannt:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor2_spanne")&";"_
    & "    Zentrierung oben:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentrierung_auf")&";"
    textfile1.WriteLine
    textfile1.Close
    Else
    textfile1.WriteLine Time&"; ACTPOS X1:;        "& SmartTags("Achse_X1\Daten.Achse_X1.Status.Istposition")&";"_
    & "    ACTPOS Z1:;        "& SmartTags("Achse_Z1\Daten.Achse_Z1.Status.Istposition")&";"_ 
    & "    ACTPOS Z2:;        "& SmartTags("Achse_Z2\Daten.Achse_Z2.Status.Istposition")&";"_ 
    & "    ACTPOS Z3:;        "& SmartTags("Achse_Z3\Daten.Achse_Z3.Status.Istposition")&";"_ 
    & "    ACTPOS Z4:;        "& SmartTags("Achse_Z4\Daten.Achse_Z4.Status.Istposition")&";"    
    textfile1.WriteLine Time&"; Luftkissen außen:;    "    & SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Sichtbarkeit_Button.S_B_Luftkissen_aussen")&";"_
    & "    Luftkissen innen:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Sichtbarkeit_Button.S_B_Luftkissen_innen")&";"_
    & "    Werkst. gelöst:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Werkstueck_loesen")&";"_
    & "    Werkst. gespannt:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Werkstueck_spannen")&";"_
    & "    Zentrierung unten:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentrierung_ab")&";"
    textfile1.WriteLine Time&"; Zentrierung1 gelöst:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor1_loesen")&";"_
    & "    Zentrierung1 gespannt:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor1_spanne")&";"_
    & "    Zentrierung2 gelöst:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor2_loesen")&";"_
    & "    Zentrierung2 gespannt:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentriervor2_spanne")&";"_
    & "    Zentrierung oben:;    "& SmartTags("Status_Allgemein\Daten.Status_Allgemein.Status_Allgemein.Status_Endlagen.Endl_Zentrierung_auf")&";"
    textfile1.WriteLine
    textfile1.Close    
    End If
End If
 
Ich glaube es fehlt ein OpenAsTextStream in deine Code.

Hier ist ein Beispiel wie ich ein Datei erzeugt:
Code:
Set fso = CreateObject("Scripting.FileSystemObject")
 
[mehr code ... ...]
 
If Not fso.FileExists(SmartTags("strALARMLOG_WriteFileName")) Then
  fso.CreateTextFile SmartTags("strALARMLOG_WriteFileName")
  Set f = fso.GetFile(SmartTags("strALARMLOG_WriteFileName"))
  Set ts = f.OpenAsTextStream(8, -2)
  ts.WriteLine strHeader
  ts.WriteLine strFullLine
  ts.Close
 Else
  Set f = fso.GetFile(SmartTags("strALARMLOG_WriteFileName"))
  Set ts = f.OpenAsTextStream(8, -2)
  ts.WriteLine strFullLine
  ts.Close
End If
Es fehlt auch On Error Resume Next mit dazugehöriger Fehlerauswertung in deiner Code.
 
:-(

Ich habe jetzt auch statt dem create folgende zeile:

Set textfile1 = fso_OpenTextFile(datei, 8,True)


aber er erstellt einfach die Datei nicht. finde es nur Komisch, dass er es auf der Runtime, welche auf dem Laptop läuft macht. also kann doch der quellcode nicht falsch sein, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist Deine Methode:
Code:
Set textfile1 = fso.CreateTextFile(datei, True)

Das ist meine Methode:
Code:
fso.CreateTextFile(datei, True)
Set f = fso.GetFile(datei)
Set textfile1 = f.OpenAsTextStream(8, -2)

Ich kann nicht erklären warum dein Code lauft auf ein PC und nicht auf ein andere PC.
Mein Code Beispiel habe ich am laufen auf sehr vielen PC's.
 
geht auch nicht

Das funktioniert bei mir auch nicht.
Und auch wenn ich die datei nicht öffnen würde. müsste sie doch nach dem Create da sein. oder? echt komisch.

scheiß siemens. ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok

OK, das ist ja nur ne Fehlerauswertung, wenn nichts erzeugt wird, oder? aber es wird ja nichts erzeugt, das kann ja daran nicht schuld sein. oder liege ich da falsch?
 
On Error Resume Next mit Fehlerauswertung gibt dir ein Fehler nummer und ein Erklärung was schief geht.
Grundsätslich soll man IMMER On Error Resume Next und Fehlerwauswertung programmieren. Besonders beim zugriff auf äussere Objekte, wie Dateien, Ordnern, Netzwerklaufwerke usw.
 
Script

Hi,

probiere doch in dem Script eine Datei mit einem festen Namen (Test123.txt) zu erzeugen und zu verwenden. Evtl. passt mit der Namensbildung etwas nicht.. User Rechte noch mal überprüfen!

V.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätslich soll man IMMER On Error Resume Next und Fehlerwauswertung programmieren. Besonders beim zugriff auf äussere Objekte, wie Dateien, Ordnern, Netzwerklaufwerke usw.
*ACK*

Zusätzlich sollte man in der Vorlage ein Meldefenster für System-Meldungen und in einem Bild eine Meldeanzeige (die auch System-Meldungen anzeigt) einbauen, damit man die Runtime-Errors aus den Skripten auch sieht und den genauen Meldetext in aller Ruhe lesen kann.

Gruß
Harald
 
Hallo Benson,
nach meiner Meinung benutzt du die falschen Methoden. Bei mir sieht so etwas ungefähr so aus :
Code:
[SIZE=2][COLOR=#0000ff]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Const[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000] ForReading = 1, ForWriting = 2, ForAppending = 8[/COLOR][/SIZE]
 
If[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Not[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] fs.FileExists (Ziel_Datei) [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Set[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] f = fs.OpenTextFile(Ziel_Datei , ForWriting, [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]true[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]f.WriteLine " - Log-Daten Anlage " & [/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000]a_Anlage_Nummer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] & " - "[/SIZE]
[SIZE=2]f.WriteLine " "[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Else[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Set[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] f = fs.OpenTextFile(Ziel_Datei , ForAppending)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][/COLOR][/SIZE]
 
[SIZE=2][SIZE=2]f.Write Left(Date,6) & Right(Date ,2) & " - " & Left(Time,5) & " - "[/SIZE]
[SIZE=2]f.WriteLine Log_Text[/SIZE]
[SIZE=2]f.Close [/SIZE]
[/SIZE]
... also der Schlüssel sollte OpenTextFile statt dem von dir verwendeten CreateTextFile sein ...

Gruß
LL
 
Zuletzt bearbeitet:
Runtime-Error ?

Hallo Bensen,

bist Du sicher, daß Dein Script überhaupt bis zum CreateTextFile() kommt und nicht schon vorher mit einem
Runtime-Error abbricht? Hast Du mal Test/Schritt-Ausgaben in Dein Script eingefügt?

Kannst Du eventuelle Runtime-Error-Meldungen sehen? (siehe Beitrag #10 von Jesper und Beitrag #12 von mir)

Ich kann mich dunkel erinnern, daß fso.FolderExists() manchmal keine String-Konstante in der Klammer mag.

Probiere doch mal das:
Code:
' ...

folder = "C:\SPSLogbook"
If Not fso.FolderExists(folder) Then fso.CreateFolder(folder)

' ...
Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK funktioniert

Hey, es funktioniert jetzt. das problem war, dass ich im dateinamen, die funktion date drin hatte. bei mir auf dem Rechner war es kein Prblem, jedoch ist das Betriebssystem des Anlagenrechners auf Engisch und da wird das Datum nicht durch nen Punkt, sondern durch nen / getrennt. das macht netürlich bei dem Dateinamen Probleme.
 
Ist der Danke Button defekt?

Sag mal Bensen,
was mir und anderen aufgefallen ist, das du hier
Hilfestellung auf sehr hohen nivau bekommst und
dich dafür nicht mal richtig bedankst.
Schau mal bei den Kollegen die sich mit den antworten
sehr viel Mühe gegeben haben, da unten gibt es zwei
Knöpfe, drücke den linken das ist der "Danke" Button,
den ohne Feedback macht das ganze keinen Spaß.

Gruß Helmut.
 
Sag mal Bensen,
was mir und anderen aufgefallen ist, das du hier
Hilfestellung auf sehr hohen nivau bekommst und
dich dafür nicht mal richtig bedankst.
Schau mal bei den Kollegen die sich mit den antworten
sehr viel Mühe gegeben haben, da unten gibt es zwei
Knöpfe, drücke den linken das ist der "Danke" Button,
den ohne Feedback macht das ganze keinen Spaß.

Gruß Helmut.
*ACK* Helmut.

Das ist mir auch schon aufgefallen.
@Besen Deine Statistik stimmt einfach nicht.
In den letzten Wochen habe ich nur Fragen von Dir gesehen, habe auch selber Dir schon gerne geholfen.
Aber bei gut 200 Fragen ein Danke das passt einfach nicht.
Nicht das es irgendjemand was bringt wenn Du den Button drückst, aber es ist einfach eine nette Geste, und darum wurde das hier auch wahrscheinlich eingeführt.
 
Nicht das es irgendjemand was bringt wenn Du den Button drückst, aber es ist einfach eine nette Geste, und darum wurde das hier auch wahrscheinlich eingeführt.

Im Prinzip habt ihr natürlich Recht - man sollte die "Danke"-Geschichte aber nicht überbewerten. Letztlich kann man sich da auch nichts dafür kaufen und ich sehe es auch als Genugtuung, wenn ich erfolgreich helfen konnte. Mal kommt ein Danke - mal nicht ... c'est la vie ... ;)
 
Zurück
Oben