TIA Werte aus Excel in Array

SPS_Seb

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe einen Temperaturverlauf über 24 h in Excel und will diese Werte in ein Array in der Steuerung schreiben.
Der Verlauf besteht aus 144 Werten (alle 10 min ein Wert).

Nach einer weile suchen hab ich hier im Forum auch eine Lösung über ein VB-Skript gefunden, die nach kleineren Anpassungen auch funktioniert:

Code:
Dim objExcelApp
Dim objWorkbooks
Dim objSheet
'zuweisen der Excel-Applikation
Set objExcelApp = CreateObject ("excel.application")
    
'zuweisen der Excel-Datei
Set objWorkbooks = objExcelApp.Workbooks
    
'vorhandene Tabelle öffnen
objWorkbooks.Open ("C:\Test\Tagesgang.xlsx")

'Auswahl der Tabelle 1
Set objSheet = objWorkbooks.Item(1).Worksheets(1)

With objSheet
        'übertragen von Temperaturwerten
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(0)= .cells(2,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(1)= .cells(3,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(2)= .cells(4,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(3)= .cells(5,3).value 
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(4)= .cells(6,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(5)= .cells(7,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(6)= .cells(8,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(7)= .cells(9,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(8)= .cells(10,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(9)= .cells(11,3).value
        HmiRuntime.SmartTags("Licht_Temp_6_01_Temperaturwerte")(10)= .cells(12,3).value
End With
objWorkbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing

End Sub

Hier mal als Beispiel mit 11 Werten.

Jetzt hab ich nur drei Probleme mit dieser Lösung:
1. Es ist/war ein bissl zu aufwändig die 144 Zeilen zu tippen und meine VB-Kenntnisse sind zu gering um zu wissen wie es einfacher geht:confused:
2. Ich musste alle 10 oder 11 Werte ein "End With" machen das sonst Excel abschmiert
3. Die 144 Werte müssen in 2 Skripte aufgeteilt werden und nacheinander eingelesen werden, da sonst wieder Excel abschmiert

Wäre super wenn mir von Euch jemand helfen könnte vor allem das Problem mit der Auslastung (also das Excel sich nicht aufhängt) zu lösen.
Vieleicht gibts ja irgendwie ne Möglichkeit immer 10 Werte einzulesen, warten bis diese geschrieben sind und dann die nächsten einzulesen..?

Ich nutze TIA-Portal V13 SP1.

Danke schonmal für Eure Hilfe
Grüße
Seb
 
Hallo,

um Schreibaufwand zu sparen, kannst du eine do--Loop Schleife verwenden. Nach x Werten wartest du dann eine bestimmte Zeit ab.
Das notwendige delay kannst über Zeit-/Datumfunktionen realisieren. Hier im Forum gibt es bestimmt genug Beispiele dafür.
 
Hallo,

danke euch erstmal für die Antworten.
Das mit der do loop Schleife werd ich mir mal anschauen und ausprobieren.

Ja es könnte natürlich auch die Runtime sein die sich verabschiedet.
Das Skript wird nur einmal auf Knopfdruck aufgerufen aber da müssen dann eben alle Werte eingelesen werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vermute, daß das Problem damit zusammenhängt, daß bei WinCC Advanced jeder Zugriff auf ein SmartTags-Arrayelement das gesamte Array liest oder schreibt und dadurch gerne Kommunikationsüberlastungen verursacht. Vermutlich mußt Du das SmartTags-Array zunächst komplett in ein lokales Array des VBS-Sub einlesen und dieses an Excel übergeben. Ob das bei TIA-WinCC auch in der Gegenrichtung Sub-->SmartTag geht weiß ich nicht (WinCC flexible konnte das nicht).

Harald
 
Das Verabschieden äußert sich so, dass nicht alle Werte in das Array geschrieben werden und die Excel Datei geöffnet bleit. Also als ob das Skript nicht bis zum Ende bearbeitet wird.

Eine lokale Array Variable klingt gut das pobiere ich nachher gleich mal aus.

Danke Euch
Grüße Seb
 
So jetzt läufts

Code:
Dim objExcelApp
Dim objWorkbooks
Dim objSheet
Dim j 
Dim Zaehler_Cell
Dim Temp_Array (143)
'zuweisen der Excel-Applikation
Set objExcelApp = CreateObject ("excel.application")
    
'zuweisen der Excel-Datei
Set objWorkbooks = objExcelApp.Workbooks
    
'vorhandene Tabelle öffnen
objWorkbooks.Open ("C:\Test\Tagesgang.xlsx")

'Auswahl der Tabelle 1
Set objSheet = objWorkbooks.Item(1).Worksheets(1)

For j = 0 To 143 
With objSheet
        'übertragen
        Temp_Array(j)= .cells(j+2,3).value
End With
Next

    SmartTags("IDB_6L_1_Kurvensteuerung_Temp") = Temp_Array
    
objWorkbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing        

End Sub

Danke für die Hilfe
Seb
 
Zurück
Oben