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

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

Thema: WinCCFlex2008- Variablenarchivierung per Script (zum X.Mal...)

  1. #1
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    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
    Zitieren Zitieren WinCCFlex2008- Variablenarchivierung per Script (zum X.Mal...)  

  2. #2
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.629
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Du hast kein ON ERROR RESUME NEXT oder ERR Auswertung. Warum ?
    Jesper M. Pedersen

  3. #3
    StGo ist offline Benutzer
    Themenstarter
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Du hast kein ON ERROR RESUME NEXT oder ERR Auswertung. Warum ?
    Ich baue gerade ein paar Fehlerbehandlungen ein, um der Geschichte näherzukommen.

    StGo

  4. #4
    StGo ist offline Benutzer
    Themenstarter
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Nachdem ich nun einen Sack voll ON ERROR verteilt habe und dabei nichts sehe,
    habe ich jetzt in die erste Skriptzeile eine SPS-Variable gelegt, die ich hochzähle, um zu überwachen ob das Script überhaupt startet, wenn es dann nicht funktioniert --> Skript wird nicht gestartet, WinCCflex verschläft das Ereignis- warum?
    Trigger "Obergrenze überschritten" an einer mit 100ms zyklisch fortlaufend aktualisierten Variablen, die ich auch extra noch sichtbar in ein Bild gezogen habe.
    Auch eine Verlängerung der Pausenzeit nach erfolgreicher Abarbeitung des Skripts bis zum erneuten Start auf 2s bringt keine Verbesserung...

    Verwirrt
    StGo

  5. #5
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.629
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Du brauchst nur einmal den ON ERROR RESUME NEXT.

    Dazu musst du ein Anzahl ERR Auswertungen verteilen nach Geschmack.
    Jesper M. Pedersen

  6. #6
    StGo ist offline Benutzer
    Themenstarter
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Danke JesperMP, so habe ich es ja auch gemacht. Aber ich kriege keinen Fehler, weil das Skript einfach nur nicht startet --> Aktuell läuft es seit 2 Stunden, das hatte ich schon lange nicht mehr (Bild mit der Triggervarablen angewählt).

    StGo

  7. #7
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.629
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Ein Test konnte sein das Du den Skript mit ein Button startet.
    Nachdem das den Skript nicht mehr per Wertänderung über den Variabel ausgeführt wird, und du den Button betätigst, kommt es dann ein Systemmeldung wenn das Skript nicht ausgeführt wird ?
    Jesper M. Pedersen

  8. #8
    StGo ist offline Benutzer
    Themenstarter
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Das ist ziemlich mühselig, aktuell ist das Skript nach 10.840 Zyklen stehen geblieben. Ich archiviere momentan alle Meldungen, inkl. Systemmeldungen --> Kein Eintrag. Für mich sieht es wirklich so aus, als ob das Panel das Ereignis verschläft.

    StGo

  9. #9
    StGo ist offline Benutzer
    Themenstarter
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hatte jetzt nun endlich wieder Zeit, mich der Scriptproblematik zu widmen...
    Habe zusätzlich eine einfache "Fangschaltung" programmiert, um zu überwachen ob mein Script aussteigt oder das Panel das Triggerereignis verschläft.
    Fangschaltung:
    2. (konventionelle) Aktion an der Triggervariable: "ErhoeheWert".
    Ergebnis: TP277 sieht das Triggerereignis nicht --> Projektiert sind 132 Variablen, alle (bis auf die im und am Script) zyklisch bei Verwendung, Zeitraster 100ms für ca. die Hälfte der Variablen, sonst größer.
    Nach erfolgreicher Verarbeitung des Scripts (Trigger Reset) warte ich in der SPS 1s, bis ich erneut triggere.

    Kann es sein, das die quasi "interne" Änderung meines Triggers auf 0 im Script manchmal nicht bemerkt wird??? Ich stelle die Triggerei wohl mal um...

    Gruß StGo

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... ich könnte mir bei einem TP vorstellen, dass 132 Variablen in 1 Sekunde wegschreiben ganz schön knapp werden könnte ...
    Zeitraster 100ms für die Variablen belastet das TP dann noch zusätzlich ganz schön ... Vielleicht schau du dir das noch mal an ...

    Gruß
    Larry

Ähnliche Themen

  1. Ausgang defekt - zum 2. mal
    Von ssound1de im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 29.10.2010, 09:54
  2. wieder mal: DB-Werte per Script in Excel
    Von Jelly im Forum Programmierstrategien
    Antworten: 17
    Letzter Beitrag: 20.04.2010, 10:55
  3. Schrittkettenprogrammierung (zum x-ten Mal ;) )
    Von DerPraktikant im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 09.12.2008, 07:32
  4. Script zum Ausblenden von Objekten
    Von mercury_26 im Forum HMI
    Antworten: 8
    Letzter Beitrag: 25.04.2008, 09:11
  5. Sicherlich zum 100. mal
    Von Deep Blue im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 18.09.2007, 00:19

Lesezeichen

Berechtigungen

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