-> 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.c...objaction=csview&extranet=standard&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
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.c...objaction=csview&extranet=standard&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