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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Skript Schreibt nicht in den DB

  1. #1
    Registriert seit
    12.05.2014
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    WinCC flexible Runtime für PC
    SPS S7-300

    Hallo,

    ich habe ein Problem was wie folgt schildert, das Skript was ich geschrieben habe funktioniert im Test modus zu 100%.

    Aber sobald ich es auf den Rechner lade schreibt mir mein String(String hat 100 zeichen) nicht mehr in meinen DB.
    Könnte mir bitte jemand einen Tip geben woran das liegen könnte.

    Vielen Dank
    Zitieren Zitieren Skript Schreibt nicht in den DB  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.311
    Danke
    932
    Erhielt 3.323 Danke für 2.685 Beiträge

    Standard

    Könntest Du uns mal 'ne Glaskugel leihen?
    Oder das Skript zeigen?
    Was meinst Du mit "Test modus"?
    Gibt es Fehlermeldungen? Hast Du eine Meldeanzeige, wo Du Fehlermeldungen der Klasse System sehen kannst?
    Wird das Skript überhaupt aufgerufen? Läuft das Skript auch komplett durch ohne Abbruch? Mache Dir mal Debug-/Testausgaben in das Skript rein:
    Code:
    ShowSystemAlarm "Skript xyz gestartet"
    ...
    ShowSystemAlarm "Skript xyz tut jetzt dies ..."
    ...
    ShowSystemAlarm "Skript xyz tut jetzt das ..."
    ...
    ShowSystemAlarm "Skript xyz beendet"
    Woher weißt Du, daß das Skript nicht schreibt? Bist Du sicher daß der String den richtigen Inhalt hat? Schreibe mal mit dem PG alles 0 in den DB, und später mal alles 16#FF - wird es durch irgendwas anderes überschrieben?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    umi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.05.2014
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    getestet habe ich das Programm mit WinnCC flexible Runtime Simulator und da hat alles so funktioniert wie es sollte, sprich csv Datei wurde erstellt und auch reingeschrieben. nur in der Anlage macht er es nicht außer das eine Fehlermeldung kommt das in Zeile 12 in Variablen_schreiben ein Fehler ist. Was auch okay ist da er ja nix schreiben kann wenn die csv auch nicht da ist. Wenn ich mir den String online anschaue wird nicht hinein geschrieben oder kann nicht schreiben ich weis es nicht. der String hat eine länge von 100 zeichen.






    Archiv_erstellen Typ: Function
    'Erstellt eine neue Archivdatei und liefert den Pfadnamen zurück
    '
    Dim fso, f, ts, Header, FName, Datum, Zeit
    'Datums und Zeit als String erzeugen
    Datum = CStr(DatePart("d",Date)) & "_" & CStr(DatePart("m",Date)) & "_" & CStr(DatePart("yyyy",Date))
    Zeit = CStr(DatePart("h",Now)) & "_" & CStr(DatePart("n",Now))
    'Dateinamen erzeugen
    FName = Ablagepfad & Dateiname & "_" & Datum & "_" & Zeit & ".csv"
    'Tabellenkopf zusammenstellen
    Header = "Zeit;Variable;Wert" & Chr(10)
    'FileSystemObject erstellen
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Prüfen ob das Verzeichnis vorhanden ist
    If Not fso.FolderExists(Ablagepfad) Then
    SetBit SmartTags("Pfad not OK")
    Else
    ResetBit SmartTags("Pfad not OK")
    End If
    ' Wenn Datei noch nicht vorhanden ist, dann wird eine Datei erzeugt
    If Not fso.FileExists(FName) Then
    fso.CreateTextFile FName

    'File Objekt erzeugen
    Set f = fso.GetFile(FName)
    'Datei zum anhängen öffnen
    Set ts = f.OpenAsTextStream(8, -2)
    'Pfad- & Dateiname und Tabellenkopf in die Datei schreiben
    ts.WriteLine(FName)
    ts.WriteLine(Header)
    'Datei schließen
    ts.Close

    End If
    'Pfad der erzeugten Datei zurückliefern
    Archiv_erstellen =FName



    'Schreibt die Variablen Druck,Temperatur und Sollwert an das Ende einer
    'vorher erzeugten Archivdatei
    '

    Variablen_schreiben Typ:Sub

    Dim fso, f, ts, Datum, Zeit
    Datum = CStr(DatePart("d",Date)) & "." & CStr(DatePart("m",Date)) & "." & CStr(DatePart("yyyy",Date))
    Zeit = CStr(DatePart("h",Now)) & ":" & CStr(DatePart("n",Now)) & ":" & CStr(DatePart("s",Now))
    'FileSystemObject erstellen
    Set fso = CreateObject("Scripting.FileSystemObject")
    'File Objekt erzeugen
    Set f = fso.GetFile(FName)
    'Datei zum anhängen öffnen
    Set ts = f.OpenAsTextStream(8, -2)
    ' Werte der Variablen in die Archivdatei schreiben (Parameter "TagName"z.B. Tag_01)
    ts.WriteLine(Datum & " " & Zeit & ";" & "Druck" & ";" & CStr(SmartTags("DB_MW.Druck1")))
    ts.WriteLine(Datum & " " & Zeit & ";" & "Temperatur" & ";" & CStr(SmartTags("DB_MW.Temperatur_Mittelwert1")))
    ts.WriteLine(Datum & " " & Zeit & ";" & "Sollwert" & ";" & CStr(SmartTags("Daten Autoklave.SW_Temp_Programm_akt")))
    ts.WriteLine(Datum & " " & Zeit & ";" & "Sollwert Grenze Max" & ";" & CStr(SmartTags("DB_GW.GW_Berechnet_Temp_Max")))
    ts.WriteLine(Datum & " " & Zeit & ";" & "Sollwert Grenze Min" & ";" & CStr(SmartTags("DB_GW.GW_Berechnet_Temp_Min")))

    'Datei schließen
    ts.Close

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.793
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    ist ein bißchen unübersichtlich, dein Script - vor Allem wenn man nicht weiß, welches Script gemeint ist ...
    Wo ist die Variable "Ablagepfad" definiert und was genau beinhaltet sie ?
    Wenn du die übergibst ... hast du berücksichtigt, dass da ggf. am Ende ein Blackslash (\) stehen muß ?

    Gruß
    Larry

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.311
    Danke
    932
    Erhielt 3.323 Danke für 2.685 Beiträge

    Standard

    Zitat Zitat von umi Beitrag anzeigen
    nur in der Anlage macht er es nicht außer das eine Fehlermeldung kommt das in Zeile 12 in Variablen_schreiben ein Fehler ist.
    Könntest Du uns auch noch verraten wie die Fehlermeldung lautet oder ist das geheim?
    Welche Zeile ist denn die Zeile 12? Diese hier?
    Code:
    Set ts = f.OpenAsTextStream(8, -2)
    Wie lautet denn der Dateiname der Datei welche Du im Skript "Variablen_schreiben" schreiben willst? Wo kommt FName her? Wie/wo/wann wird das Skript "Variablen_schreiben" aufgerufen?
    Kann es sein, daß der Ablagepfad bzw. die ganze Ordnerstruktur auf dem RT-PC an der Anlage nicht existiert? Dann mußt Du diese Ordnerstruktur erst erzeugen. Das Erstellen einer Datei erzeugt keine Ordner. Eigentlich müßte da aber auch ein Fehler im Skript "Archiv_erstellen" kommen und außerdem "Pfad not OK" sollte True werden:
    Code:
    'Prüfen ob das Verzeichnis vorhanden ist
    If  Not fso.FolderExists(Ablagepfad) Then 
     SetBit SmartTags("Pfad not OK")
    Else
     ResetBit SmartTags("Pfad not OK")
    End If
    ' Wenn Datei noch nicht vorhanden ist, dann wird eine Datei erzeugt
    If Not fso.FileExists(FName) Then
       fso.CreateTextFile FName  '<--- hier sollte ein Fehler kommen, wenn das Verzeichnis nicht vorhanden ist
    Irgendwie ist das nicht logisch, das Vorhandensein einer Datei zu prüfen und der Versuch diese Datei zu erzeugen, wenn schon der Ablageordner garnicht existiert...
    (außerdem: Tagnamen mit Leerzeichen sind nicht so toll)

    Zitat Zitat von umi Beitrag anzeigen
    Aber sobald ich es auf den Rechner lade schreibt mir mein String(String hat 100 zeichen) nicht mehr in meinen DB.

    Irgendwie sehe ich nicht, wo Du in einen String in einem DB schreibst bzw. schreiben willst.


    PS: zum übersichtlichen Einfügen von Programmcode in einen Forumsbeitrag bitte die CODE-Tags benutzen (der #-Button im Beitragseditor).

    Harald
    Geändert von PN/DP (13.05.2014 um 10:08 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    umi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.05.2014
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,
    die Variable Ablagepfad ist ein Eingabe/Ausgabe(Sting) in der Viso darin steht zum bsp: D:\abc\ und wenn ich mir das online Anschaue steht das auch drin. Der Ablagepfad ist auch vorhanden.
    Oben im Text sind es ja 2 Scripte. Im Script Variablen_schreiben kommt auch die Fehler Meldung der er mit der Zeile Set f = fso.GetFile(FName) ein Problem hat was ja klar ist weil die CSV Datei nicht da ist. Aus irgendwelchen gründen würd die csv Datei nicht erzeugt. Was mir aufgefallen ist das wenn ich im sage das er das Archiv erstellen soll`, er nicht den Dateinamen erzeugt. Aber in der Simulation macht er das alles...
    Oder Liegt es daran das es ein WinCC PC ist und kein Panel und ich die falschen befehle nehme?

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.311
    Danke
    932
    Erhielt 3.323 Danke für 2.685 Beiträge

    Standard

    Zitat Zitat von umi Beitrag anzeigen
    Oder Liegt es daran das es ein WinCC PC ist und kein Panel und ich die falschen befehle nehme?
    Wenn Deine Skripte auf Deinem Erstell-PC funktionieren, dann hast Du die richtigen File-Funktionen benutzt, dann funktionieren diese File-Funktionen auch auf dem RT-PC an der Anlage. Es sei denn, der RT-PC wäre ein Panel oder PC unter Windows CE. Doch dann würdest Du schon beim "Set fso = CreateObject(..." eine Fehlermeldung mit Skriptabbruch bekommen.

    Wie ich in Beitrag #2 schon schrieb:
    Um ein Skript zu debuggen sollte man am besten testhalber Debug-/Testausgaben mit der Systemfunktion ShowSystemAlarm in das Skript einbauen. Dann sieht man z.B. wenn das Skript garnicht an bestimmten Programmstellen ankommt. Damit kann man sich auch den Wert von Variablen ausgeben lassen:
    Code:
    If Not fso.FileExists(FName) Then
      ShowSystemAlarm "Datei '" & FName & "' nicht gefunden"
      ...
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    umi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.05.2014
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    ich habe die Variable Datei erstellen dies ist eine Real zahl, wenn 2 dann Archiv_erstellen bei Grenzen habe ich die Oberregrenze auf 1 und die grenze prüfen bei den Ereignissen wird bei Obergrenze überschritten die Archiv_erstellen bearbeitet
    Code:
    Rückgabewert=Dateiname DB201DBB388(String100)
    Ablagepfad=Ablagepfad DB201Dbb346(String40)
    Dateiname=Auftrag DB201DBB304(String40)
    PfadnotOK=PfadnotOK M27.0
    Den Dateinamen erzeugt er sich selber auf Auftragsnummer und dem Datum.
    Code:
    'Dateinamen erzeugen
    FName = Ablagepfad & Dateiname & "_" & Datum & "_" & Zeit & ".csv"
    Der Ablage Ordner ist vorhanden.

  9. #9
    umi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.05.2014
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hallo die Fehler Meldung kommt bei
    Code:
    'File Objekt erzeugen
    Set f = fso.GetFile(FName)

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.311
    Danke
    932
    Erhielt 3.323 Danke für 2.685 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von umi Beitrag anzeigen
    hallo die Fehler Meldung kommt bei
    Code:
    'File Objekt erzeugen
    Set f = fso.GetFile(FName)
    Die GetFile-Methode benutze ich nicht um Dateien zu lesen oder zu schreiben.
    Wenn ich mit WinCCflex Logs in csv- oder allgemein Textdateien schreibe, dann mache ich das etwa so:
    Code:
    ' Ausgabedatei für Append öffnen und eine Zeile anhängen
    Const ForAppending = 8
    Dim fso, f, outfile
    
    On Error Resume Next 'Dateioperations-Fehler auffangen
    
    outfile = SmartTags("System\LogFilename") 'z.B. "C:\Logs\logfile.txt"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(outfile, ForAppending, True) 'True: Erstellen, falls noch nicht vorhanden
    
    If Err.Number <> 0 Then
      ShowSystemAlarm "Fehler # " & Hex(Err.Number) & " beim Öffnen '" & outfile & "': " & Err.Description
      Exit Sub
    End If
    
    ' eine Zeile an die Datei anhängen
    f.WriteLine "Temperatur zu hoch: " & SmartTags("Sensorwert1") & "°C"
    f.Close
    
    ' Fehler beim Datei-Schreiben oder -Schließen?
    If Err.Number <> 0 Then
      ShowSystemAlarm "Fehler # " & Hex(Err.Number) & " beim Schreiben '" & outfile & "': " & Err.Description
      ' Exit Sub
    End If
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Buskoppler schreibt/liest nicht von den Klemmen
    Von ssommera im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 03.02.2011, 17:45
  2. Antworten: 61
    Letzter Beitrag: 18.11.2008, 18:09
  3. daveReadBytes schreibt nicht in den Buffer (Excel VBA)
    Von Martin Glarner im Forum Hochsprachen - OPC
    Antworten: 20
    Letzter Beitrag: 02.12.2005, 10:21
  4. Antworten: 1
    Letzter Beitrag: 18.11.2005, 16:36

Lesezeichen

Berechtigungen

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