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

Ergebnis 1 bis 6 von 6

Thema: WinCC flexible und Excel

  1. #1
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich will aus Flexible heraus auf eine Excel-Mappe zugreifen. Mit dem Button "Excel starten" wird Excel gestartet und die Tabelle1 geöffnet. Das klappt mit folgendem Code:

    Code:
    'Excel starten
    Dim appExcel, wbExcel, wsExcel
    Dim Verzeichnis, Datei
    Verzeichnis = "D:\WinCC flexible Archivdateien\"
    Datei = "Mappe1.xls"
    Set appExcel = CreateObject("Excel.Application")
    Set wbExcel = appExcel.workbooks.open(Verzeichnis + Datei)
    Set wsExcel = wbExcel.worksheets("Tabelle1")
    appExcel.application.visible = True
    Durch Betätigung des Button "Excel beenden" kann ich mittlerweile die Excel-Mappe schließen und Excel beenden. Ich habe die Anregung aus einem Beispiel von Volker entnommen:

    Code:
    'Excel beenden
    Dim appExcel, wbExcel, wsExcel
    Dim Verzeichnis, Datei
    Verzeichnis = "D:\WinCC flexible Archivdateien\"
    Datei = "Mappe1.xls"
    Set appExcel = GetObject(, "Excel.Application")
    Set wbExcel = appExcel.ActiveWorkbook
    Set wsExcel = wbExcel.worksheets("Tabelle1")
    appExcel.application.visible = True
    'Dialog zum Abspeichern der Excel-Mappe
    appExcel.DisplayAlerts=False  'Meldungen unterdrücken
    wbExcel.close
    appExcel.quit
    appExcel.DisplayAlerts=True   'Meldungen wieder aktivieren
    'Freigeben der Excel-Mappe, Freigen des Speichers
    Set wsExcel = Nothing
    Set wbExcel = Nothing
    Set appExcel = Nothing
    Nun möchte ich den sich ständig ändernden Drehzahlwert (MW20) von Flexible aus in die geöffnete Excel-Mappe schreiben. Da fehlt mir die Idee.
    Die Messwertaufzeichnung soll bei Betätigung eines weiteren Button ("Aufzeichnung starten") beginnen. Dabei sollen die Messwerte nach Möglichkeit direkt in die geöffnete Excel-Mappe geschrieben werden, und zwar untereinander fortlaufend in einer Spalte. Dazu bräuchte ich eine statische Lokalvariable oder eine globale Variable. Gibt es einen der beiden Typen in der Script-Umgebung von Flexible.
    In VB.Net würde ich bei Betätigung des Buttons "Aufzeichnung starten" einen Timer einschalten und dann in der Timer-Prozedur den Schreibvorgang in die Excel-Mappe programmieren.
    Hat jemand eine Idee, wie ich mein Problem lösen könnte.


    Gruß
    Earny
    Geändert von Earny (03.07.2010 um 21:49 Uhr)
    Zitieren Zitieren WinCC flexible und Excel  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo,
    natürlich gibt es die Möglichkeit, die Anwendung offen zu halten. Ich muß dir allerdings gestehen, dass das nicht so ohne ist. Da du Excel als COM-Objekt benutzt dauern Zugriffe darauf u.U. ziemlich lange.

    Ich hatte so etwas aber mal gemacht. Dabei ist GetObject der richtige Weg. Du musst dir in der Visu nur merkern (in einer Visu-internen Variablen), dass du Excel schon geöffnet hast. Ansonsten erzeugst du jede Menge neue Instanzen davon. Wenn du die Visu dann beendest musst du in einem Exit-Script dann dein Workbook schliessen und Excel beenden ...

    Gruß
    Larry

  3. #3
    Registriert seit
    04.01.2008
    Ort
    Wien
    Beiträge
    773
    Danke
    136
    Erhielt 39 Danke für 35 Beiträge

    Standard

    Hi, das hört sich sehr interessant an. Ich würde mich gerne in dieses Thema einarbeiten. Habt Ihr ein paar Stichwörter wie ich beginnen könnte?

    Stichwort getobject, Scripte usw
    irgendetwas ist ja immer...
    ING. Gerald Miedler

  4. #4
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo Larry,

    danke für die Anregung. Ich habe das umgesetzt und es funktioniert auch.
    Ich habe in Flexible 4 Button zum Steuern der Aufzeichnung in Excel:
    Ich habe bisher keine Absicherung gegen Fehlbedienungen, d.h. Betätigung der Buttons in der falschen Reihenfolge.

    Button "Excel starten"
    Code:
    'Excel starten
    Dim appExcel, wbExcel, wsExcel
    Dim Verzeichnis, Datei
    Verzeichnis = "D:\WinCC flexible Archivdateien\"
    Datei = "Mappe1.xls"
    Set appExcel = CreateObject("Excel.Application")
    Set wbExcel = appExcel.workbooks.open(Verzeichnis + Datei)
    Set wsExcel = wbExcel.worksheets("Tabelle1")
    'appExcel.application.visible = True
    Button "Aufzeichnung starten"
    Code:
    'Aufzeichnung starten
    SmartTags("AufzeichnungEin") = True
    SmartTags("Zeilenindex") = 0
    Button "Aufzeichnung stoppen"
    Code:
    'Aufzeichnung stoppen
    SmartTags("AufzeichnungEin") = False
    Button "Excel beenden"
    Code:
    'Excel beenden
    Dim appExcel, wbExcel, wsExcel
    Dim Verzeichnis, Datei
    Verzeichnis = "D:\WinCC flexible Archivdateien\"
    Datei = "Mappe1.xls"
    Set appExcel = GetObject(, "Excel.Application")
    Set wbExcel = appExcel.ActiveWorkbook
    Set wsExcel = wbExcel.worksheets("Tabelle1")
    'appExcel.application.visible = True
    'Dialog zum Abspeichern der Excel-Mappe
    'appExcel.DisplayAlerts = False  'Meldungen unterdrücken
    wbExcel.close
    appExcel.quit
    'appExcel.DisplayAlerts = True   'Meldungen wieder aktivieren
    'Freigeben der Excel-Mappe, Freigeben des Speichers
    Set wsExcel = Nothing
    Set wbExcel = Nothing
    Set appExcel = Nothing
    Code:
    'Aufzeichnen
    If SmartTags("AufzeichnungEin") = True Then
        Dim appExcel, wbExcel, wsExcel
        Dim Verzeichnis, Datei
        Zeilenindex = Zeilenindex + 1
        Verzeichnis = "D:\WinCC flexible Archivdateien\"
        Datei = "Mappe1.xls"
        Set appExcel = GetObject(, "Excel.Application")
        Set wbExcel = appExcel.ActiveWorkbook
        Set wsExcel = wbExcel.worksheets("Tabelle1")
        'appExcel.application.visible = True
        'Messwerte mit Zeitstempel in Excel-Tabelle schreiben
        wsExcel.cells(Zeilenindex,1) = SmartTags("Drehzahl")
        wsExcel.cells(Zeilenindex,2) = Now
    Else
        Exit Sub
    End If

    Das Ganze hat aber auch strukturelle Schwächen:

    1. Die Aufzeichnungsfrequenz darf nicht zu hoch gewählt werden. 100 ms geht auf meinem Rechner nicht. Selbst bei 500 ms kommt es gelegentlich zu Aussetzern. Erst ab 1 s werden dann alle Messwerte aufgezeichnet. Ich habe allerdings nicht sehr lange getestet.

    2. Ich muss mit dem Erfassungszyklus der Variable "Drehzahl" aufzeichnen. Habe ich einen Erfassungszyklus von 100 ms, so versucht Flexible mit 10 Hz in die Excel-Mappe zu schreiben - was es nicht schafft.
    Es scheint nicht möglich zu sein, eine zweite Variable "Drehzahl_5s" dem Speicher MW20 zuzuordnen. Das lässt wohl Flexible nicht zu. Es ist mir bisher nicht gelungen "Drehzahl_5s" aufzuzeichnen. Es gibt aber auch keine Fehlermeldung.

    Möglicherweise ist das Schreiben in eine csv-Datei, die dann später mit Excel geöffnet und bearbeitet wird, doch der bessere Weg.
    Der Zugriff von Flexible auf Excel über COM scheint doch recht langsam zu sein.
    Bemerkung: Beim Zugriff von VB.Net auf Excel habe ich ähnliche Erfahrungen gemacht. Auch hier ist es mir bisher nicht gelungen alle 100 ms einen Messwert in eine Excel-Tabelle mit Hilfe des COM zu schreiben.


    Gruß
    Earny

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo Earny,
    das ist das, was ich meinte.
    Für eine niedrige Aufzeichnungs-Frequenz ist das direkte Schreiben nach Excel schon OK - bei einer "hohen" Frequenz kannst du das vergessen. Ich persönlich hatte Schwierigkeiten mit Allem, was schneller als "alle 2 Sekunden" war - nicht immer aber immer öfter ...
    Irgendwann wird dann die Ausführung der Scripte sogar abgelehnt, weil der Aufgaben-Puffer voll ist ...

    Die CSV-Datei ist da tatsächlich die bessere Lösung.
    Viel Erfolg

    Gruß
    Larry

  6. #6
    Registriert seit
    01.05.2009
    Beiträge
    74
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also kann ich meinem Chef sagen wir brauchen auf jeden fall die lizenz für die archive damit das vernünftig läuft ??
    Geändert von santero (21.02.2011 um 09:23 Uhr)

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 17.03.2011, 09:47
  2. Wincc Flexible Daten nach Excel
    Von Poldi007 im Forum HMI
    Antworten: 1
    Letzter Beitrag: 12.05.2009, 06:02
  3. Antworten: 1
    Letzter Beitrag: 02.03.2009, 13:04
  4. WinCC flexible und Excel
    Von Fluffi im Forum HMI
    Antworten: 6
    Letzter Beitrag: 02.02.2008, 12:44
  5. Antworten: 0
    Letzter Beitrag: 17.07.2005, 12:31

Lesezeichen

Berechtigungen

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