-> Hier kostenlos registrieren
Hallo,
ich verwende folgendes Script um an einem TP277 SPS-Prozesswerte auf einen USB-Stick zu sichern:
Ich teste das Script gerade heftig, d.h. 1 Sekunde nach der Antwort des Scriptes ("USBArchiv\Trigger" = 0) setze ich den Trigger per SPS wieder und starte damit das Script (Ereignis "Obergrenze überschritten"). Für die Triggervariable habe ich sogar ein sichtbares Ausgabefeld projektiert. Das Script läuft max. 5000 Zyklen, dann reagiert die Visu nicht mehr auf den Anstoß- Trigger bleibt high.
1. Fehlen mir ein paar Ideen um dei Fehler näher einzugrenzen.
2. Ist es eigentlich unnötig, die Datei nach jedem Schreiben zu schließen.
Könnte ich die Systembelastung dadurch verringern, dass ich die Geschichte in 3 Scripte aufteile?
Script 1- Prüfen ob die Datei vorhanden ist und öffnen bzw. erstellen und Headerzeile schreiben (einmalig, Datei bleibt offen!)
Script 2- Werte in die geöffnete Datei schreiben (wie sieht der Code dafür aus?)
Script 3- Datei schließen (einmalig z.B.beim Beenden der Runtime)
Danke für Eure Unterstützung
StGo
ich verwende folgendes Script um an einem TP277 SPS-Prozesswerte auf einen USB-Stick zu sichern:
Code:
'ACHTUNG: WinCE!!!
'-----------------------------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------------------------
'Globale Deklarationen/ Initialisierung
Dim DateiSystemObjekt
Dim DateiObjekt
Set DateiSystemObjekt = CreateObject("filectl.filesystem")
Set DateiObjekt = CreateObject("filectl.file")
'-----------------------------------------------------------------------------------------------------
'Abfrage Archivlaufwerk (USB-Stick) vorhanden?
Dim Archivlaufwerk
Archivlaufwerk = "STORAGE CARD USB"
If DateiSystemObjekt.dir(Archivlaufwerk) <> "" Then
'ShowSystemAlarm "USB steckt"
SmartTags("USBArchiv\USBStickOk") = True
Else
'ShowSystemAlarm "USB nicht da"
SmartTags("USBArchiv\USBStickOk") = False
SmartTags("USBArchiv\USBErgebnis") = 2
SmartTags("USBArchiv\USBTrigger") = 0
Exit Sub
End If
'-----------------------------------------------------------------------------------------------------
'Dateiname des Tagesarchives aufbauen
Dim Dateiname
Dim ZeitSPS
ZeitSPS =CStr(SmartTags("Standardvariablen\DatumUhrzeit")) 'Rückgabeformat TT.MM.JJ HH:MM:SS
Dateiname = Mid(ZeitSPS,7,2) & "_" & Mid(ZeitSPS,4,2) & "_" & Left(ZeitSPS,2) & ".csv"
'Zeitstempel für Werteeintrag aufbauen
Dim Zeitstempel
Zeitstempel = Right(ZeitSPS,8)
'-----------------------------------------------------------------------------------------------------
'Tagesarchiv erstellen (falls nicht vorhanden) + beschreiben
Dim PfadDatei
PfadDatei = Archivlaufwerk & "\" & Dateiname
Dim NamePW_1 'Name Prozesswert...
Dim PW_1 'Prozesswert...
Dim NamePW_2 'Name Prozesswert...
Dim PW_2 'Prozesswert...
Dim NamePW_3 'Name Prozesswert...
Dim PW_3 'Prozesswert...
Dim NamePW_4 'Name Prozesswert...
Dim PW_4 'Prozesswert...
Dim NamePW_5 'Name Prozesswert...
Dim PW_5 'Prozesswert...
Dim NamePW_6 'Name Prozesswert...
Dim PW_6 'Prozesswert...
Dim NamePW_7 'Name Prozesswert...
Dim PW_7 'Prozesswert...
Dim NamePW_8 'Name Prozesswert...
Dim PW_8 'Prozesswert...
Dim NamePW_9 'Name Prozesswert...
Dim PW_9 'Prozesswert...
Dim NamePW_10 'Name Prozesswert...
Dim PW_10 'Prozesswert...
Dim NamePW_11 'Name Prozesswert...
Dim PW_11 'Prozesswert...
Dim NamePW_12 'Name Prozesswert...
Dim PW_12 'Prozesswert...
Dim NamePW_13 'Name Prozesswert...
Dim PW_13 'Prozesswert...
Dim NamePW_14 'Name Prozesswert...
Dim PW_14 'Prozesswert...
Dim NamePW_15 'Name Prozesswert...
Dim PW_15 'Prozesswert...
Dim NamePW_16 'Name Prozesswert...
Dim PW_16 'Prozesswert...
Dim NamePW_17 'Name Prozesswert...
Dim PW_17 'Prozesswert...
Dim NamePW_18 'Name Prozesswert...
Dim PW_18 'Prozesswert...
Dim NamePW_19 'Name Prozesswert...
Dim PW_19 'Prozesswert...
Dim NamePW_20 'Name Prozesswert...
Dim PW_20 'Prozesswert...
Dim NamePW_21 'Name Prozesswert...
Dim PW_21 'Prozesswert...
Dim NamePW_22 'Name Prozesswert...
Dim PW_22 'Prozesswert...
Dim NamePW_23 'Name Prozesswert...
Dim PW_23 'Prozesswert...
Dim NamePW_24 'Name Prozesswert...
Dim PW_24 'Prozesswert...
NamePW_1 = "p_K_K_E"
PW_1 = SmartTags("Istwerte\p_K_K_E")
NamePW_2 = "p_K_K_A"
PW_2 = SmartTags("Istwerte\p_K_K_A")
NamePW_3 = "p_K_S"
PW_3 = SmartTags("Istwerte\p_K_S")
NamePW_4 = "p_K_SDW"
PW_4 = SmartTags("Istwerte\p_K_SDW")
NamePW_5 = "p_Oe_OeS"
PW_5 = SmartTags("Istwerte\p_Oe_OeS")
NamePW_6 = "p_Oe_K1"
PW_6 = SmartTags("Istwerte\p_Oe_K1")
NamePW_7 = "p_Oe_K2"
PW_7 = SmartTags("Istwerte\p_Oe_K2")
NamePW_8 = "p_Oe_K3"
PW_8 = SmartTags("Istwerte\p_Oe_K3")
NamePW_9 = "p_Oe_K4"
PW_9 = SmartTags("Istwerte\p_Oe_K4")
NamePW_10 = "t_K_K_E"
PW_10 = SmartTags("Istwerte\t_K_K_E")
NamePW_11 = "t_K_K_E"
PW_11 = SmartTags("Istwerte\t_K_K_E")
NamePW_12 = "t_K_K_A"
PW_12 = SmartTags("Istwerte\t_K_K_A")
NamePW_13 = "t_K_S"
PW_13 = SmartTags("Istwerte\t_K_S")
NamePW_14 = "t_K_V_A"
PW_14 = SmartTags("Istwerte\t_K_V_A")
NamePW_15 = "t_K_GK_A"
PW_15 = SmartTags("Istwerte\t_K_GK_A")
NamePW_16 = "Ist_HRV"
PW_16 = SmartTags("Istwerte\Ist_HRV")
NamePW_17 = "Soll_HRV"
PW_17 = SmartTags("Stellwerte\Soll_HRV")
NamePW_18 = "Ist_EV1"
PW_18 = SmartTags("Istwerte\Ist_EV1")
NamePW_19 = "Soll_EV1"
PW_19 = SmartTags("Stellwerte\Soll_EV1")
NamePW_20 = "Ist_EV2"
PW_20 = SmartTags("Istwerte\Ist_EV2")
NamePW_21 = "Soll_EV2"
PW_21 = SmartTags("Stellwerte\Soll_EV2")
NamePW_22 = "t_S_GK_E"
PW_22 = SmartTags("Istwerte\t_S_GK_E")
NamePW_23 = "t_S_GK_A"
PW_23 = SmartTags("Istwerte\t_S_GK_A")
NamePW_24 = "t_S_V_E"
PW_24 = SmartTags("Istwerte\t_S_V_A")
If DateiSystemObjekt.dir(PfadDatei) = "" Then
'Datei nicht vorhanden --> Datei erstellen und Header schreiben
DateiObjekt.open(PfadDatei), 2
DateiObjekt.LinePrint "Uhrzeit" & ";" & _
NamePW_1 & ";" & _
NamePW_2 & ";" & _
NamePW_3 & ";" & _
NamePW_4 & ";" & _
NamePW_5 & ";" & _
NamePW_6 & ";" & _
NamePW_7 & ";" & _
NamePW_8 & ";" & _
NamePW_9 & ";" & _
NamePW_10 & ";" & _
NamePW_11 & ";" & _
NamePW_12 & ";" & _
NamePW_13 & ";" & _
NamePW_14 & ";" & _
NamePW_15 & ";" & _
NamePW_16 & ";" & _
NamePW_17 & ";" & _
NamePW_18 & ";" & _
NamePW_19 & ";" & _
NamePW_20 & ";" & _
NamePW_21 & ";" & _
NamePW_22 & ";" & _
NamePW_23 & ";" & _
NamePW_24
DateiObjekt.Close
End If
'Datei erneut öffnen und Prozesswerte schreiben
DateiObjekt.open(PfadDatei), 8
DateiObjekt.LinePrint Zeitstempel & ";" & _
PW_1 & ";" & _
PW_2 & ";" & _
PW_3 & ";" & _
PW_4 & ";" & _
PW_5 & ";" & _
PW_6 & ";" & _
PW_7 & ";" & _
PW_8 & ";" & _
PW_9 & ";" & _
PW_10 & ";" & _
PW_11 & ";" & _
PW_12 & ";" & _
PW_13 & ";" & _
PW_14 & ";" & _
PW_15 & ";" & _
PW_16 & ";" & _
PW_17 & ";" & _
PW_18 & ";" & _
PW_19 & ";" & _
PW_20 & ";" & _
PW_21 & ";" & _
PW_22 & ";" & _
PW_23 & ";" & _
PW_24
SmartTags("USBArchiv\USBErgebnis") = 1
SmartTags("USBArchiv\USBTrigger") = 0
DateiObjekt.Close
Ich teste das Script gerade heftig, d.h. 1 Sekunde nach der Antwort des Scriptes ("USBArchiv\Trigger" = 0) setze ich den Trigger per SPS wieder und starte damit das Script (Ereignis "Obergrenze überschritten"). Für die Triggervariable habe ich sogar ein sichtbares Ausgabefeld projektiert. Das Script läuft max. 5000 Zyklen, dann reagiert die Visu nicht mehr auf den Anstoß- Trigger bleibt high.
1. Fehlen mir ein paar Ideen um dei Fehler näher einzugrenzen.
2. Ist es eigentlich unnötig, die Datei nach jedem Schreiben zu schließen.
Könnte ich die Systembelastung dadurch verringern, dass ich die Geschichte in 3 Scripte aufteile?
Script 1- Prüfen ob die Datei vorhanden ist und öffnen bzw. erstellen und Headerzeile schreiben (einmalig, Datei bleibt offen!)
Script 2- Werte in die geöffnete Datei schreiben (wie sieht der Code dafür aus?)
Script 3- Datei schließen (einmalig z.B.beim Beenden der Runtime)
Danke für Eure Unterstützung
StGo