Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Scriptproblem

  1. #1
    Registriert seit
    17.09.2007
    Beiträge
    52
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute

    ich habe ein MP277

    und dieses Script, welches ich mit DINO´s Hilfe erstellt habe.

    Mein Problem ist das die Datei nicht erstellt wird.
    Vielleicht hat ja einer von euch ne Idee. Das Script wird bei Wertänderung von der Variable "DB 010 - Anlagen DB.Datenarchiv1" aufgerufen.

    Code:
    'Skript "DatenArchivierung von Marco" / DI - 15.02.2011
    '=========================================================================================
     
      Dim ArchivSystemObjekt, ArchivDateiObjekt, DateiName, DateiTitel, TabellenKopf
     
    ' File(SystemObject) erstellen
    ' ----------------------------
      Set ArchivSystemObjekt = CreateObject("FileCtl.FileSystem")
      Set ArchivDateiObjekt = CreateObject("FileCtl.File")
     
    ' Archivierungspfad und Dateiname zusammensetzen
    ' ----------------------------------------------
      DateiName = "\Storage Card MMC\" 
                                                                                      &_ 
                 SmartTags("DB 010 - Anlagen DB.Archivname") &"_"&_ 
                SmartTags("DB 010 - Anlagen DB.Batchnummer")     &_ 
                 ".csv" 
     
    ' Datei öffnen bzw. erstellen, wenn sie noch nicht existiert
    ' ----------------------------------------------------------
      ArchivDateiObjekt.open DateiName, 8                                                                                    
     
    ' Vorkopf schreiben
    ' -----------------
    ' If ArchivSystemObjekt.FileLen(DateiName) = 0 Then (ist eine Möglichkeit)
     
     If SmartTags > 2 Then
     
                ' Dateititel zusammenstellen
                ' ---------------------------
                  DateiTitel =  Chr(10)& _ 
                         "Zaehlerarchiv;"
     
     
                ' Tabellenkopf zusammenstellen
                ' ----------------------------
                  TabellenKopf =         "Datum / Zeit;"                  & _
                                  "12.050.005 - Temp. Heizmantel;" & _
                                  "12.050.004 - Temp. Produkt;"    & _
                                  "12.050.001 - Druck Behälter;"   & _ 
                                  "12.050.007 - Drehzahl Rührwerk;"
                ' Vorkopf schreiben
                ' ----------------- 
                   ArchivDateiObjekt.lineprint  Chr(10)&("Dateiname:;" & DateiName)
                   ArchivDateiObjekt.lineprint (DateiTitel)                                                
                   ArchivDateiObjekt.lineprint ("Produktname:;" & SmartTags("DB 010 - Anlagen DB.Datensatzname"))
                   ArchivDateiObjekt.lineprint ("BatchNr.:;"    & SmartTags("DB 010 - Anlagen DB.Batchnummer"))
        ArchivDateiObjekt.lineprint(TabellenKopf)                                                    
     End If
     
    ' Werte der Variablen in die Archivdatei schreiben
    ' ------------------------------------------------
      ArchivDateiObjekt.lineprint(CStr(Now)                                      & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[1]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[2]"))   & ";"     &_     
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[3]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[4]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[5]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[6]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[7]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[1]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[2]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[3]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[4]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[1]"))         & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[2]"))         & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[3]"))         & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[4]"))         & ";") 
    ' Datei schließen
    ' ---------------
      ArchivDateiObjekt.Close
     
    ' Triger rücksetzen
    ' -----------------
      SetValue SmartTags("DB 010 - Anlagen DB.Datenarchiv1"), 0
     
    ' Verwendeten Speicher wieder freigeben
    ' -------------------------------------
      Set ArchivDateiObjekt  = Nothing
      Set ArchivSystemObjekt = Nothing
    Gruß Marco
    Zitieren Zitieren Scriptproblem  

  2. #2
    Registriert seit
    31.08.2010
    Beiträge
    50
    Danke
    2
    Erhielt 10 Danke für 10 Beiträge

    Standard

    Code:
     If SmartTags > 2 Then
    wenn die Zeile so da steht, wird sie wohl das Skrpt stören, weil du da wohl was verschluckt hast.

    Kleiner Vorschlag an dieser Stelle:
    Code:
    If ArchivSystemObjekt.FileLen(DateiName) = 0 Then   
       ArchivDateiObjekt.lineprint(Kopf...)     
    End If
    Hast du geprüft ob das Skript auch abgearbeitet wird?

  3. #3
    skyvan ist offline Benutzer
    Themenstarter
    Registriert seit
    17.09.2007
    Beiträge
    52
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    es wird bis zu erstellen der Datei abgearbeitet und dann hört es auf zu arbeiten.

    da steht drin

    If SmartTags("DB 010 - Anlagen_DB.Datenarchiv1") > 2 Then

    Gruß Marco
    Geändert von skyvan (09.08.2011 um 21:59 Uhr)

  4. #4
    Registriert seit
    31.08.2010
    Beiträge
    50
    Danke
    2
    Erhielt 10 Danke für 10 Beiträge

    Standard

    Code:
      DateiName = "\Storage Card MMC\"  &_ 
       CStr(SmartTags("DB 010 - Anlagen DB.Archivname")) &"_"&_ 
       CStr(SmartTags("DB 010 - Anlagen DB.Batchnummer"))     &_ 
       ".csv"
    Würd ich dann nochmal vorschlagen
    Es ist vllt auch noch hilfreich ne Abfrage für die eingelegte Speicherkarte einfügen
    Code:
    HilfsVariable = filesystem.dir ("\Storage Card MMC") 
    If HilfsVariable = "" Then 'Ablagepfad nicht vorhanden 
    Call ShowSystemAlarm ("Keine Speicherkarte vorhanden") 
    Else ... Datei Schreiben
    End If

  5. #5
    skyvan ist offline Benutzer
    Themenstarter
    Registriert seit
    17.09.2007
    Beiträge
    52
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi Samiel

    so sieht der Code jetzt aus

    leider erstellt er die Datei immernoch nicht.

    Keine Ahnung woran es liegt bin langsam am Ende mit meinem Latein.

    Code:
    'Skript "DatenArchivierung von Marco" / DI - 15.02.2011
    '=========================================================================================
     
      Dim ArchivSystemObjekt, ArchivDateiObjekt, DateiName, DateiTitel, TabellenKopf
     
    ' File(SystemObject) erstellen
    ' ----------------------------
      Set ArchivSystemObjekt = CreateObject("FileCtl.FileSystem")
      Set ArchivDateiObjekt = CreateObject("FileCtl.File")
     
    ' Archivierungspfad und Dateiname zusammensetzen
    ' ----------------------------------------------
      DateiName = "\Storage Card MMC\" &_ 
               CStr (SmartTags("DB 010 - Anlagen DB.Archivname")) &"_"&_ 
              CStr (SmartTags("DB 010 - Anlagen DB.Batchnummer")) &_ 
                ".csv" 
     
    ' Datei öffnen bzw. erstellen, wenn sie noch nicht existiert
    ' ----------------------------------------------------------
      ArchivDateiObjekt.open DateiName, 8                                                                                    
     
    ' Vorkopf schreiben
    ' -----------------
    If ArchivSystemObjekt.FileLen(DateiName) = 0 Then '(ist eine Möglichkeit)
      ArchivDateiObjekt.lineprint ("Datum / Zeit;"                  & _
                                  "12.050.005 - Temp. Heizmantel;" & _
                                  "12.050.004 - Temp. Produkt;"    & _
                                  "12.050.001 - Druck Behälter;"   & _ 
                                  "12.050.007 - Drehzahl Rührwerk;")
     End If
     If SmartTags("DB 010 - Anlagen DB.Datenarchiv1") > 2 Then
     
                ' Dateititel zusammenstellen
                ' ---------------------------
                  DateiTitel =  Chr(10)& _ 
                         "Zaehlerarchiv;"
     
     
                ' Tabellenkopf zusammenstellen
                ' ----------------------------
                  TabellenKopf =         "Datum / Zeit;"                  & _
                                  "12.050.005 - Temp. Heizmantel;" & _
                                  "12.050.004 - Temp. Produkt;"    & _
                                  "12.050.001 - Druck Behälter;"   & _ 
                                  "12.050.007 - Drehzahl Rührwerk;"
                ' Vorkopf schreiben
                ' ----------------- 
                   ArchivDateiObjekt.lineprint  Chr(10)&("Dateiname:;" & DateiName)
                   ArchivDateiObjekt.lineprint (DateiTitel)                                                
                   ArchivDateiObjekt.lineprint ("Produktname:;" & SmartTags("DB 010 - Anlagen DB.Datensatzname"))
                   ArchivDateiObjekt.lineprint ("BatchNr.:;"    & SmartTags("DB 010 - Anlagen DB.Batchnummer"))
        ArchivDateiObjekt.lineprint(TabellenKopf)                                                    
     End If
     
    ' Werte der Variablen in die Archivdatei schreiben
    ' ------------------------------------------------
      ArchivDateiObjekt.lineprint(CStr(Now)                                      & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[1]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[2]"))   & ";"     &_     
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[3]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[4]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[5]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[6]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.Maschinen[7]"))   & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[1]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[2]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[3]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.IO[4]"))          & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[1]"))         & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[2]"))         & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[3]"))         & ";"     &_
                                           CStr (SmartTags("Zähler\DB 010 - Anlagen DB.Zaehler.NIO[4]"))         & ";") 
    ' Datei schließen
    ' ---------------
      ArchivDateiObjekt.Close
     
    ' Triger rücksetzen
    ' -----------------
      SetValue SmartTags("DB 010 - Anlagen DB.Datenarchiv1"), 0
     
    ' Verwendeten Speicher wieder freigeben
    ' -------------------------------------
      Set ArchivDateiObjekt  = Nothing
      Set ArchivSystemObjekt = Nothing
    wo sollte der Code für die Speicherkarte rein?

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.207
    Danke
    927
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Zitat Zitat von skyvan Beitrag anzeigen
    ich habe ein MP277

    und dieses Script, welches ich mit DINO´s Hilfe erstellt habe.

    Mein Problem ist das die Datei nicht erstellt wird.
    Hallo Marco,

    ist es das erste Mal, daß Du per Script eine Datei erzeugen willst?
    Vielleicht solltest Du nicht gleich alles auf einmal wollen, sondern erst mal mit den Basics anfangen.
    Dein Script ist einfach zu lang, um eventuelle Fehler ohne reales Testen zu finden.
    Warum Deine Datei nicht erstellt wird kann viele Ursachen haben.

    Vermutlich wird Deine Scriptbearbeitung unsaft mit einem Runtime-Fehler abgebrochen.
    Damit Du die Fehlermeldungen auch siehst, mach in ein Bild eine Meldeanzeige und/oder in die Vorlage ein Meldefenster rein für die Meldeklasse "System".

    Da Du vermutlich ohne Scriptdebugger arbeitest, schreibe testweise Debug-Ausgaben in das Script rein, z.B. mit "ShowSystemAlarm <meldetext>".

    Schreibe zuerst nur das Grundgerüst des Scriptes und teste es.
    Danach ersetze den festen Dateiname durch Deinen variablen Dateiname aus Smarttags und teste wieder.
    Ersetze nach und nach alle konstanten Strings durch den Inhalt Deiner Smarttags und erweitere das Script und teste wieder...
    Code:
    Const ForAppend = 8
    Dim ArchivDateiObjekt, MCslot, DateiName 
    
    MCslot = "\Storage Card MMC"
    DateiName = "test.txt"  'hier später den Dateiname dynamisch zusammenstellen
    
    If Not FolderExist(MCslot) Then
        ShowSystemAlarm "Keine Memorycard gefunden. Kann '" & DateiName & "' nicht speichern."
        ' Exit Sub
    Else
        DateiName = MCslot & "\" & DateiName
        Set ArchivDateiObjekt = CreateObject("FileCtl.File")
        ArchivDateiObjekt.Open DateiName, ForAppend
        ArchivDateiObjekt.LinePrint "Hello World!"
        ArchivDateiObjekt.LinePrint "Produktname: " & SmartTags("DB 010 - Anlagen DB.Datensatzname")
        ArchivDateiObjekt.Close
    
        ShowSystemAlarm "Datei '" & DateiName & "' erfolgreich gespeichert."
    End If
    Die Function FolderExist(Path) - welche prüft, ob ein angegebener Ordner existiert oder eine MemoryCard im angegebenen Slot steckt - findest Du in diesem FAQ: Protool/WinCCflex Daten lesen / schreiben mit VB-Script

    Möglichkeiten, warum die Datei nicht erstellt wird:
    - das Script wird gar nicht aufgerufen
    - beim Erstellen der FileCtl-Objekte geht was schief
    - es ist keine Memorycard gesteckt oder wird vom Panel nicht erkannt
    - die Pfadangabe ist nicht korrekt
    - der Dateiname enthält "\", die Ordner existieren aber nicht
    - der Dateiname enthält unzulässige Zeichen
    - das WinCE mag den Dateiname aus anderen Gründen nicht
    - die Datei existiert, kann aber nicht zum Schreiben geöffnet werden
    - das Script wird vor dem Erstellen der Datei durch einen Runtime-Error abgebrochen
    - ...

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    skyvan (10.08.2011)

  8. #7
    skyvan ist offline Benutzer
    Themenstarter
    Registriert seit
    17.09.2007
    Beiträge
    52
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Harald

    wie du schon richtig vermutet hast ist es das erste Script was ich erstellen muß was eine Datei erzeugt.

    Wie es immer ist beschäftigt man sich erst immer dann damit wenn die Zeit schon abgelaufen ist.

    Warum bei mir der z.B. der Aufruf "If Not FolderExist" als fehlerhaft angezeigt wird ist mir zum Beispiel auch ein Rätsel.

    Gruß Marco

  9. #8
    Registriert seit
    26.03.2009
    Ort
    Bayern
    Beiträge
    10
    Danke
    2
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo Marco,

    wenn ich mich richtig erinnere, gibt es die Funktion FolderExist unter WinCE (MP277) nicht.

    Mit dem Erstellen von Dateien unter WinCE hatte ich auch schon ein Problem und zwar wurde mit dem Aufruf
    Code:
    ArchivDateiObjekt.open DateiName, 8
    keine neue Datei erzeugt sonder nur eine vorhandene geöffnet um etwas anzuhängen.

    Da damals die Zeit auch kanpp war, habe ich zu erst geprüft ob die Datei bereits existiert und etwas angehängt werden soll, oder ob eine neue Datei erstellt werden muß.
    Code:
     'Datei öffnen
     'Prüfen ob Datei vorhanden
     If ArchivDateiObjekt.Dir("\Storage Card MMC\Archiv.csv") = "" Then
     ArchivDateiObjekt.open "\Storage Card MMC\Archiv.csv", 2
     Else
     ArchivDateiObjekt.open "\Storage Card MMC\Archiv.csv", 8 
     End If
    Es gibt bestimmt eine bessere Lösung aber da es wie immer schnell gehen musste, war das okay.

    Wenn das funktioniert, würde ich als nächstes den Dateinamen variabel gestalten und dann weiter testen.

    Gruß

    Benny
    Geändert von BennoM (10.08.2011 um 08:24 Uhr) Grund: Grammatik nix gut

  10. Folgender Benutzer sagt Danke zu BennoM für den nützlichen Beitrag:

    skyvan (10.08.2011)

  11. #9
    skyvan ist offline Benutzer
    Themenstarter
    Registriert seit
    17.09.2007
    Beiträge
    52
    Danke
    14
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi BennoM

    Danke erst einmal. Ich werde es sofort einmal testen


    Gruß Marco

  12. #10
    Registriert seit
    26.03.2009
    Ort
    Bayern
    Beiträge
    10
    Danke
    2
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Marco,

    mir ist gerade aufgefallen das in meinem Beispiel noch ein Fehler drin ist.
    Die Dir Funktion gehört zum FileSystem-Objekt und nicht zum File-Objekt

    So sollte es funktionieren:

    Code:
     'Datei öffnen
     'Prüfen ob Datei vorhanden
     If ArchivSystemObjekt.Dir("\Storage Card MMC\Archiv.csv") = "" Then
     ArchivDateiObjekt.open "\Storage Card MMC\Archiv.csv", 2
     Else
     ArchivDateiObjekt.open "\Storage Card MMC\Archiv.csv", 8 
     End If
    Sorry

    Gruß

    Benny

Ähnliche Themen

  1. Scriptproblem WinCCflex
    Von Monty im Forum HMI
    Antworten: 1
    Letzter Beitrag: 10.04.2007, 17:25

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •