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

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

Thema: Skript Ablauf endet in "20015: Überlast"

  1. #1
    Registriert seit
    04.09.2013
    Beiträge
    44
    Danke
    11
    Erhielt 2 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Jungs,

    habe ein Skript geschrieben, dass je nach Entscheidung der Anlage "IO" oder "NIO" Teil bestimmte Funktionen ausführt. Es werden gewisse Temperaturen und Zeiten mithilfe von Rezepturen aus der CPU geholt und anschließend als csv File exportiert. Nach dem Export wird die File auf einen Netzwerk Server kopiert. Dieses Skript wird automatisch mit Wertänderung gestartet. Nun hat mir der Kunder erzählt, dass beim Betätigen der Übersichtstaste (Beim Klick wird ein Skript ausgeführt, dass je nach Werkzeug die zugehörige Seite aufruft) während eines Zykluses die Meldung 20015: Überlast Skript <Uebersicht> wird verworfen.

    Ich muss mir noch genauere Infos holen aber mein erster Verdacht währe, dass genau an diesem Zeitpunkt, wo das Skript für die Prozessverfolgung ausgeführt wird, die Übersichtstaste betätigt wurde. Da das Skript für die Prozessverfolgung aufgrund 3 "delay" (http://support.automation.siemens.co...ard&viewreg=WW) Funktionen ca. 6 sek dauert, könnte es doch sein, dass aufgrund der verwendeten Loop Funktion die anderen Skripte blockiert werden -> Aber laut Hilfe von Wincc Flex müssten diese Skripte doch in eine Warteschlange gereiht werden und nacheinander abgearbeitet werden.

    Laut Leistungsdaten des MP377 müsste es möglich sein bis zu 20 Skripte einzureihen. Hab mir auch schon überlegt die delay funktionen zu entfernen und das Skript fortzusetzen wenn die Rückgabevariablen der Systemfunktionen die korrekten Statuse liefern - weiß aber nicht so recht wie ich das realisieren könnte...

    Verwendet wird ein MP377

    Evt hat jemand eine Lösung und bedanke mich schon jetzt für Eure Hilfe!

    Hab mal einen kleinen Auszug vom Skript mitgeschickt:


    Dim status, Pfad, Teil, fso, t_root_path, File, f, fs, t_net_path_PICOS, t_net_path_Server, result, File_ext, seite

    If x_skript_fehler Then 'wenn Resum Skript ein ist wird bei einem Fehler das Skript weiter abgearbeitet
    On Error Resume Next
    End If

    GetDataRecordFromPLC "Prozessdatenverfolgung", 1, hmiOverwriteAlways, hmiOff, Null ' Werte von Steuerung holen

    x_nWait = 2 ' 2s warten
    Delay(x_nWait)

    If SmartTags("DB_Allgemein.Aktuell_WKZ_Anwahl") = 1 Then ' Je nach Werkzeug Pfad festlegen
    Pfad = "SMART Tuer links\"
    seite = "_L_"
    ElseIf SmartTags("DB_Allgemein.Aktuell_WKZ_Anwahl") = 2 Then
    Pfad = "SMART Tuer rechts\"
    seite = "_R_"
    End If

    If SmartTags("Teil_iO") = True Then ' Teile auswertung
    Teil = "IO"
    ElseIf SmartTags("Teil_NiO") = True Then
    Teil = "NIO"
    Else
    ShowSystemAlarm "Prozessdatenverfolgung fehlgeschlagen, Teil wurde vom System nicht beurteilt"
    End If

    File = Teil & seite & SmartTags("DB_Daten_sichern.Daten.Vortlaufende_Nr") & ".csv" ' Dateiname festlegen
    File_ext = Teil & seite & SmartTags("DB_Daten_sichern.Daten.Vortlaufende_Nr")

    t_root_path = Pfad & Teil & "\" ' Pfad zusammensetzen

    t_net_path_PICOS = SmartTags("DB_Ablagepfade.PICOS_Name") & SmartTags("DB_Ablagepfade.Pfad1") ' Netzwerk pfad definieren
    t_net_path_Server = SmartTags("DB_Ablagepfade.Server_Name") & SmartTags("DB_Ablagepfade.Pfad2")

    Set fs = CreateObject("filectl.filesystem") ' Filesystem anlegen

    If SmartTags("DB_Ablagepfade.Ablage_PICOS_aktiv") Then
    If fs.dir(t_net_path_PICOS & Pfad) = "" Then fs.mkdir(t_net_path_PICOS & Pfad) ' Prüfen ob Ordner vorhanden ist ansonsten anlegen
    If fs.dir(t_net_path_PICOS & Pfad & Teil & "\") = "" Then fs.mkdir(t_net_path_PICOS & Pfad & Teil & "\")
    End If

    If SmartTags("DB_Ablagepfade.Ablage_Server_aktiv") Then
    If fs.dir(t_net_path_Server & Pfad) = "" Then fs.mkdir(t_net_path_Server & Pfad) ' Prüfen ob Ordner vorhanden ist ansonsten anlegen
    If fs.dir(t_net_path_Server & Pfad & Teil & "\") = "" Then fs.mkdir(t_net_path_Server & Pfad & Teil & "\")
    End If

    ExportDataRecords "Prozessdatenverfolgung", 1, "\Storage Card MMC\" & t_root_path & File, hmiOverwriteAlways , hmiOff, SmartTags("x_ProzessdatenExport") ' Werte in Datei exportieren

    x_nWait = 2
    Delay(x_nWait)

    If SmartTags("DB_Ablagepfade.Ablage_PICOS_aktiv") Then
    If fs.dir(t_net_path_PICOS & t_root_path & File) = "" Then ' Prüfen ob die File schon vorhanden ist
    fs.filecopy "\Storage Card MMC\" & t_root_path & File, t_net_path_PICOS & t_root_path & File
    ShowSystemAlarm "Prozessdaten erfolgreich auf den Server (PICOS) kopiert"
    Else
    fs.kill(t_net_path_PICOS & t_root_path & File) ' Wenn ja dann die alte löschen
    fs.filecopy "\Storage Card MMC\" & t_root_path & File, t_net_path_PICOS & t_root_path & File
    ShowSystemAlarm "Prozessdaten auf dem Server (PICOS) schon vorhanden, Daten werden überschrieben"
    End If
    End If

    If SmartTags("DB_Ablagepfade.Ablage_Server_aktiv") Then
    If fs.dir(t_net_path_Server & t_root_path & File) = "" Then ' Prüfen ob die File schon vorhanden ist
    fs.filecopy "\Storage Card MMC\" & t_root_path & File, t_net_path_Server & t_root_path & File
    ShowSystemAlarm "Prozessdaten erfolgreich auf den Server (Boshoku) kopiert"
    Else
    fs.kill(t_net_path_Server & t_root_path & File) ' Wenn ja dann die alte löschen
    fs.filecopy "\Storage Card MMC\" & t_root_path & File, t_net_path_Server & t_root_path & File
    ShowSystemAlarm "Prozessdaten auf dem Server (Boshoku) schon vorhanden, Daten werden überschrieben"
    End If
    End If

    If SmartTags("Teil_NiO") = True Then ' Wenn Teil NIO ist

    StopLogging hmiAlarmLog,"Teilefehler" ' Meldearchiv exportieren
    CloseAllLogs
    ArchiveLogFile hmiAlarmLog, "Teilefehler","\Storage Card MMC\AlarmLog\Teilefehler\", hmiCopy
    OpenAllLogs
    StartLogging hmiAlarmLog, "Teilefehler"

    x_nWait = 2
    Delay(x_nWait)

    result = fs.Dir("\Storage Card MMC\AlarmLog\Teilefehler\*.csv") ' Archiv suchen

    fs.SetAttr "\Storage Card MMC\AlarmLog\Teilefehler\" & result ,0 ' Attribute auf 0 setzen

    If SmartTags("DB_Ablagepfade.Ablage_PICOS_aktiv") Then
    If fs.dir(t_net_path_PICOS & t_root_path & File_ext & "_Meldung.csv") = "" Then ' Ist das Archiv schon vorhanden
    fs.filecopy "\Storage Card MMC\AlarmLog\Teilefehler\" & result, t_net_path_PICOS & t_root_path & File_ext & "_Meldung.csv"
    Else
    fs.kill(t_net_path_PICOS & t_root_path & File_ext & "_Meldung.csv") ' dann löschen
    fs.filecopy "\Storage Card MMC\AlarmLog\Teilefehler\" & result, t_net_path_PICOS & t_root_path & File_ext & "_Meldung.csv"
    End If
    End If

    If SmartTags("DB_Ablagepfade.Ablage_Server_aktiv") Then
    If fs.dir(t_net_path_Server & t_root_path & File_ext & "_Meldung.csv") = "" Then ' Ist das Archiv schon vorhanden
    fs.filecopy "\Storage Card MMC\AlarmLog\Teilefehler\" & result, t_net_path_Server & t_root_path & File_ext & "_Meldung.csv"
    Else
    fs.kill(t_net_path_Server & t_root_path & File_ext & "_Meldung.csv") ' dann löschen
    fs.filecopy "\Storage Card MMC\AlarmLog\Teilefehler\" & result, t_net_path_Server & t_root_path & File_ext & "_Meldung.csv"
    End If
    End If

    fs.kill "\Storage Card MMC\AlarmLog\Teilefehler\*.csv" ' Archiv auf MMC Karte löschen

    End If

    Set fs = Nothing ' Filesystem zurücksetzen

    x_nWait = 2
    Delay(x_nWait)

    SmartTags("DB_Daten_sichern.Befehle_an_HMI.Sichere_Div") = 0 ' Steuerungsvariabel zurücksetzen
    Zitieren Zitieren Skript Ablauf endet in "20015: Überlast"  

  2. #2
    Registriert seit
    13.10.2007
    Beiträge
    12.032
    Danke
    2.787
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    jetzt mal ohne genauer zu schauen, aber du hast da sehr viele Wartezeiten drin
    beim überschlagen 8 sekunden, vielleicht steigt deshalb dein Script aus.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  3. #3
    Registriert seit
    04.09.2013
    Beiträge
    44
    Danke
    11
    Erhielt 2 Danke für 1 Beitrag

    Standard

    Wie gesagt habe diese eingebaut um die Funktionen zuvor abzuschließen. Ist keine elegante Lösung, wäre aber für jeden Verbesserungsvorschlag dankbar.
    Hat bis jetzt auch geklappt, der Fehler war bei uns noch nicht bekannt.

    Aber nur um es zu verstehen:
    Ist es möglich, dass die Meldung Überlast vom Panel aufgrund der delay Funktion ausgelößt wird, da sie sich gerade in einer Schleife befindet?
    Könnte die Zeit auch auf 1 sek verringern...

  4. #4
    Registriert seit
    13.10.2007
    Beiträge
    12.032
    Danke
    2.787
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    Du machst ja anscheinend auch noch zugriffe auf ein Server, wie lange läuft den dein Script.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  5. #5
    Registriert seit
    04.09.2013
    Beiträge
    44
    Danke
    11
    Erhielt 2 Danke für 1 Beitrag

    Standard

    Das Skript wird 1x pro Zyklus ausgeführt und wird mit den Verzögerungen etwa auf die von dir erwähnten 8 sek kommen. Also die csv File wird lediglich auf den Server kopiert, wobei die File nicht größer als 8KB ist. Aber ohne die delay Funktion läuft es nicht, da die Systemfunktionen einiges an Zeit benötigt bis sie fertig ist.

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo,
    die Überlast-Meldung kommt, weil deine Script-Abarbeitung kein weiteres Script mehr aufnehmen kann (also die 20 laufenden Scripte schon drin sind im Puffer).
    Wenn du in einem Script ein Delay in genannter Weise erzeugst dann blockierst du dein System (und damit alle anderen Scripte) zusätzlich. Es kann immer nur ein Script auf einmal laufen. Das System ist also nicht mehr reaktionsfähig.
    Kopieren auf den Server ist dann eine weitere "tolle" Sache. Es kann sein, dass dein Server-Zugriff "sau-schlecht" ist und dein Kopiervorgang sehr viel länger dauert, wie er lokal dauern würde.
    Du siehst, du hast da alle Möglichkeiten eingebaut, die man sich so einhandeln kann. Ich würde tatsächlich hingehen und das Konzept überdenken.
    Wofür z.B. das Delay ? Das läßt sich ganz sicher auch "schön" lösen.
    Wofür das Kopieren in dem Script auf den Server ? Ich kenne jetzt nicht die Möglichkeiten des MP's ... aber kann du das Kopieren nicht als Aufgabe an das Betriebssystem übergeben ?

    Gruß
    Larry

  7. #7
    Registriert seit
    04.09.2013
    Beiträge
    44
    Danke
    11
    Erhielt 2 Danke für 1 Beitrag

    Standard

    Danke erstmal für die Antworten!

    Leider kann ich mir hier beim besten Willen nicht vorstellen wieso der Puffer voll sein könnte, da sonst keine Skripte ausgeführt werden.

    Ich würde gerne die delay Funktion rausnehmen, da sie mir selbst nicht gefällt.
    Am Anfag lese ich die Rezpturwerte der Steuerung aus, da diese Funktion etwas Zeit benötigt habe ich eine delay Funktion hinzugefügt bevor ich mit dem Skript fortfahre. Gibt es hier die Möglichkeit mit dem Rückgabewert der Funktion GetDataRecordFromPLC etwas zu machen damit erst bei erfolgreichem einlesen fortgefahren wird?

    Wie meinst du das Larry, die Aufgabe an das Betriebssystem übergeben? z.B.: eine Batchdatei schreiben die den Kopiervorgang im WinCE übernimmt und diese einfach nach der Generierung der csv File starten?!

  8. #8
    Registriert seit
    13.10.2007
    Beiträge
    12.032
    Danke
    2.787
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    GetDataRecordfromPLC ist doch eine Rezepturfunktion und hat folgende Parameter

    Code:
    GetDataRecordfromPLC Rezepturnummer/-name , Datensatznummer/-name , überschreiben , Statusmeldung ausgeben , Bearbeitungsstatus (Ausgabe optional)
    Bearbeitungsstatus kannst du auswerten
    2 = aktiv
    4 = erfolgreich beendet
    12 = Fehler
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  9. #9
    Registriert seit
    04.09.2013
    Beiträge
    44
    Danke
    11
    Erhielt 2 Danke für 1 Beitrag

    Standard

    Könnte man hier gleich wie bei der delay Funktion eine Loop Schleife verwenden und anstatt mit der Systemzeit eine Wartefunktion mit dem Bearbeitungsstatus der Rezepturfunktion basteln?

    Vlt so:
    Dim i

    GetDataRecordFromPLC "Prozessdatenverfolgung", 1, hmiOverwriteAlways, hmiOff, Rezeptstatus

    Do
    If i = 0 Then
    i = i + 1
    End If

    Loop Until Rezeptstatus => 4

  10. #10
    Registriert seit
    13.10.2007
    Beiträge
    12.032
    Danke
    2.787
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hier mal vom PN/DP geklaut

    Code:
    Dim wrStat, rdStat
    
    ' Variable in SPS schreiben mit Fertigmeldung
    SetDataRecordTagsToPLC "WriteVar", SmartTags("Protokoll\Schreibstatus")
    ' in Schleife auf Ende Var-Schreiben warten
    Do
        wrStat = SmartTags("Protokoll\Schreibstatus")
    Loop While (wrStat And 4) = 0 ' 4=fertig OK / 12=abgebrochen mit Fehler
    
    ' wenn Schreiben ohne Fehler, dann Antwort (Protokoll-Datensatz) aus SPS lesen
    If wrStat = 4 Then
        ' Variablen aus SPS lesen mit Fertigmeldung
        GetDataRecordTagsFromPLC "Schichtprotokoll", SmartTags("Protokoll\Lesestatus")
        ' in Schleife auf Ende Var-Lesen warten
        Do
            rdStat = SmartTags("Protokoll\Lesestatus")
        Loop While (rdStat And 4) = 0 ' 4=fertig OK / 12=abgebrochen mit Fehler
    
        If rdStat = 4 Then
            ' gerade gelesene Variablen verarbeiten
            ' ...
        End If
    End If
    
    If wrStat <> 4 Or rdStat <> 4 Then
        ShowSystemAlarm "Fehler beim Lesen der Protokollwerte!"
    End If
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  11. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    daloeff (06.05.2014)

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 16.03.2012, 18:20
  2. Automatik Ablauf obwohl die Anlage "AUS" ist???
    Von Marco77 im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 20
    Letzter Beitrag: 15.01.2012, 19:35
  3. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  4. Mit Skript eine Schaltfläche "betätigen"
    Von Shettyman im Forum HMI
    Antworten: 3
    Letzter Beitrag: 21.07.2010, 10:10
  5. Hilfe "Skript" !!!
    Von SIsepp im Forum HMI
    Antworten: 4
    Letzter Beitrag: 29.08.2007, 06:49

Lesezeichen

Berechtigungen

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