Trendkurve archivieren

c.wehn

Level-2
Beiträge
609
Reaktionspunkte
47
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo leute,

ich habe mir eine bitgetriggerte Trendkurve im WinCC flexible 2008 programmiert.
Das funktioniert auch alles wunderbar, habe mir die Themen hier im Forum durchgelesen und es irgendwie hinbekommen!

Mein Problem ist jetzt...

Wie exportiere ich diese Daten wieder in eine CSV-Datei ?

Ich hab das ganze gemacht weil mir die Archivierung von WinCC Flexible zu langsam ist... in einem DB weggespeichert... kann diese Kurve auch wieder ins Flexible aufrufen.

Brauch sie aber auch als File um sie auszuwerten!

Weiss jemand wie das geht?


MFG CHW
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja so etwas habe ich schonmal gemacht,
Allerdings mit einzelnen Wörter, hier habe ich allerdings mehrere Arrays mit vielen vielen Doppelworten...
Ich dachte eigentlich da gäbe es noch was einfacheres mit den vorhandenen Flexible Funktionen.
Kann ich denn im VB Script die Arrays einfach auflösen lassen und in's Excel schreiben oder muss ich dann jede Variable im Array anlegen?
Wenn ich das mit dem VB Script lösen muss bräuchte ich aufjedenfall etwas hilfe. Allein würde ich mich da glaube ich zeitlich total verrennen.
 
Eine Variable, die Flex als Array kennt (also Anzahl der Elemente > 1), kannst du im Script auch so verwenden.

Helfen wäre auch nicht so das Thema. Leg' doch einfach mal los, steck den Rahmen ab und poste dein Script. Dann wird dir hier schon geholfen ... ;)

Gruß
Larry
 
Hallo, habe mich jetzt einfach mal versucht.
Leider bin ich in VB absolut kein Profi...
Die Datei erstellt er mir...

Jetzt dachte ich das ich mit dem Part For i=..... den Pointer hochsetzen kann und die Variablen einfach von Excel nach A 0-400 reinladen kann... das würde mir erstmal genügen... Nur finde ich keine beispiele wie ich das anstellen kann...

jemand eine idee?

Code:
On Error Resume Next
 
Dim appExcel , fs , wbExcel , wsExcel
Dim Verzeichnis , Datei
Dim Zeile
Dim Niederhalterdruck
Dim i
'------------------------------------------------------------------------------
' Variablen-Zuweisungen ...
Verzeichnis = "c:\Archiv\"
Datei = "1.xls"
'------------------------------------------------------------------------------
' Pointer auf Tabelle laden
Set appExcel = CreateObject ("EXCEL.Application")
Set fs = CreateObject ("Scripting.FileSystemObject")
'------------------------------------------------------------------------------
' Objekte erzeugen
' prüfe ob datei existiert. wenn nicht erzeugen.
If Not fs.FileExists (Verzeichnis + Datei) Then
    appExcel.Workbooks.Add
    appExcel.ActiveWorkbook.SaveAs(Verzeichnis + Datei)
End If
 
Set wbExcel = appExcel.Workbooks.Open (Verzeichnis + Datei)
Set wsExcel = wbExcel.Worksheets("Tabelle1")
 
' Zelle lesen und um 1 erhöhen
'Zeile = wsExcel.Range("D1") = SmartTags("Kurvebübertragung.Kurvenuebertragung_1")
 
' Zelle beschreiben
'wsExcel.Cells (Zeile , 1) = Niederhalterdruck
'wsExcel.Cells (Zeile , 2) = Time
'wsExcel.Range("D1") = Zeile 
 
 For i=0 To 400 Step +4
     Niederhalterdruck="Kurvenpuffer.P_Niederhalter("&CStr(i)&")"
     wsExcel.Cells (Zeile , 1)= Niederhalterdruck
Next
 
' Tabelle abspeichern
wbExcel.Close True 'false
appExcel.Quit ()
 
'------------------------------------------------------------------------------
' verwendeten Speicher wieder freigeben
Set wsExcel = Nothing
Set wbExcel = Nothing
Set fs = Nothing
Set appExcel = Nothing
Set Verzeichnis = Nothing
Set Datei = Nothing
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich fände es so ganz schick :
Code:
For i=0 To 400 Step +4 
   Niederhalterdruck=SmartTags("Kurvenpuffer.P_Niederhalter")(i)
   wsExcel.Cells (Zeile , 1) = Niederhalterdruck
Next
... unter der Voraussetzung, dass "Kurvenpuffer.P_Niederhalter" deine Array-Variable ist.

Du solltest aber bitte auch noch Folgendes beachten : Ein in Flex deklariertes hat als erstes Index-Feld immer (0). Um es für deine Schleife passend zu habe müßte dass Array in Flex also 401 Elemente haben - ist das so ?

Willst von dem Array wirklich nur jedes 4. Element abspeichern ?

Gruß
Larry
 
Hallo, danke erstmal... bin leider nichtmehr im Büro weil ich mal wieder um 13.00 gesagt bekomme das ich das Wochenende eine IBN machen muss...

Nein, ich wollte eigentlich jedes Element des Arrays abspeichern...

In den Variablen stehen die Arrayelemente tatsächlich mit 401 dort.
Im DB ist es eben von 0 - 400 und dann gehts eben weiter mit 404 - ...

Dieses Kurvenpuffer.P_Niederhalter ist einer meiner Arrayelemente, es liegt in einem DB auf der SPS ab... es sind in diesem fall REAL werte.
 
Also dann sollte der Code so aussehen :
Code:
For i=0 To 400    wsExcel.Cells (Zeile , i) = SmartTags("Kurvenpuffer.P_Niederhalter")(i) Next

Die von dir ursprünglich eingebaute Schrittweite in der Schleife (Step) hat nichts mit der Breite Variablen von Step7 her zu tun - da kümmert sich Flex (bei richtiger Deklaration - in deinem Fall ja REAL) schon selber drum ...



Dann ein schönes In-Betrieb-nehmen ...

Gruß
Larry
 
Zuletzt bearbeitet:
... und die Zellen deines Excel-Sheet sind mit Nullen gefüllt ?

Ist die von mir editierte Variable denn überhaupt die Kurven-Variable ?
Zeigst du die auch an und wenn ja, hast du in der Anzeige dann sinnvolle Werte drin stehen ?
Wenn du sie nicht anzeigst, wie hast du die Aktualisierung eingestellt ? Wie kommt dann die Kurve von der SPS zur Visu ?
Hast du, wenn du dir den DB in der SPS anschaust, darin sinnvolle Werte stehen ?
Welchen Wert hat "Zeile" in deinem Script ? Läßt du die Schleifenvariable (i) mit in die Zellenadressierung einfliessen ? In deinem Codebeispiel, dass ich einfach so übernommen habe (mein Fehler, sorry), geht die gar nicht mit ein ...

Vielleicht doch noch mal so :
Code:
[B][COLOR=#ff0000]Zeile = 4[/COLOR][/B]
For i=0 To 400 
   wsExcel.Cells (Zeile , 1[COLOR=#ff0000][B]+i[/B][/COLOR]) = SmartTags("Kurvenpuffer.P_Niederhalter")(i)
Next
Gruß
Larry
 
Ah... super... jetzt wo Zeile = 4 ist habe ich was im Excel-Sheet drinne stehen.

Wenn ich das nun richtig erkannt habe funktioniert das so

Zeile = 4 bedeutet Variable "Zeile" bekommt wert 4... er schreibt ja auch in die 4. Zeile....

dann schreibt er in Zeile 4, und schreibt von A - XYZ von links nach rechts die Werte...
Wie bekomme ich das hin das er die werte untereinander Also quasi in A1-401 schreibt?

Dann müsste ich hinkommen zumindestens fürs erste =)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... einfach umdrehen :
Code:
[B][COLOR=#ff0000]Zeile = 4[/COLOR][/B]
For i=0 To 400 
   wsExcel.Cells ([B][COLOR=#ff0000]1+i , [/COLOR][/B]Zeile) = SmartTags("Kurvenpuffer.P_Niederhalter")(i)
Next

Eine Zelle in Excel wird ja immer durch 2 Werte adressiert (Zeile und Spalte bzw. Row und Column was ja das gleiche ist). In Excel selbst kannst du natürlich "B7" hinschreiben. In einem als Schleife durchlaufenden Script wäre die Adressierung mit Cells die sinnvollste Variante und da wir aus "B7" dann Cells(7,2).

Werte hast du nun in deinen Zellen (wenn auch nicht in den richtigen) stehen ?

Gruß
Larry
 
okay, also ist quasi die Adressierung in:

wsExcel.Cells (n , n)

("Zeile", "Spalte") Aber die Spalte ist nicht wie in Excel mit Buchstaben sondern auch mit Zahlen vergeben...

Bsp: (1,5) =E1
(3,2) =B3

So hab ichs nun verstanden, wollte es nur für die Nachwelt festhalten.
Danke!

(verwirrend!)


Ja ich hab die Werte drinstehen (Die sind auch mit dem DB gleich!)
 
Warum verwirrend ?
Eigentlich ist das "E2" nur ein Kunst-Konstrukt für die "reguläre" Excel-Verwendung, ohne das man programmiert.
Wenn du das aber so ansprechen möchtest, so geht das auch. Das wäre dann der Befehl Range, der dann als Ziel einen von dir vorher zusammengestezten String erwartet - also etwa so :
Code:
meineZelle = "B" + trim(str(i))
wsExcel.Range(meineZelle) = deinWert

Gruß
Larry
 
Zurück
Oben