# Kurve als CSV speichern



## Steff_F (13 Oktober 2008)

Hallo,
ich habe folgendes Problem.

Mit WinCC flexible habe ich eine Kurvenanzeige mit 5 Kurven projektiert. Die Übertragung erfolgt Bitgetriggert. Jede Kurve besteht aus 999 Integer - Werten, die über einen Weckalarm in einem DB abgelegt wurden, insgesamt also aus 4995 Integern.

Um diese Kurve auch in MS - Excel bearbeiten zu können sollen die Werte in eine Tabelle einer CSV - Datei gespeichert werden. 
Kennt jemand eine Möglichkeit ohne diese Variablen in WinCC flexible anzulegen?

Mit Variablen aus WinCC flexible funktioniert es mit Hilfe eines Scripts. Möchte aber nicht die ganzen Variablen anlegen müssen.

Gruß
Stefan


----------



## DELTALOGIC Support (13 Oktober 2008)

Guten Morgen,

wie wäre es mit unserem ACCON-S7-EasyLog?

Das ist eine eigenständige Software, mit der Sie Daten aus der SPS auslesen und in einer CSV Datei speichern können.

Bernhard Götz


----------



## Steff_F (13 Oktober 2008)

Hallo Herr Götz,

ihre Software sieht sehr interessant aus. Da ich diese Anwendung doch nur einmalig für mein Abschlussprojekt zum Techniker benötige würde ich dieses gerne mit einer Freeware oder bereits in VinCC flexible enthaltenen Möglichkeit realisieren.

Gruß

Stefan Frick


----------



## Larry Laffer (13 Oktober 2008)

Steff_F schrieb:


> Mit Variablen aus WinCC flexible funktioniert es mit Hilfe eines Scripts. Möchte aber nicht die ganzen Variablen anlegen müssen.


 
Hallo,
womit hast du denn da ein Problem ?
Du mußt doch nur für jede Kurve die Variable benutzen, die du in der Visu sowieso schon als Kurvenvariable benutzt hast (also das ARRAY mit den Kurvenwerten). Für 5 Kurven sind das also 5 Variablen, die du dann im Script entsprechend verarbeitest ...

Zu dem Thema gibt es auch ein paar schöne Beispiele im Forum ...
Stichwort "Kurvenanzeige"

Gruß
LL


----------



## Sandman (13 Oktober 2008)

Mahlzeit 

Wenn Du es in Flexible realisieren willst musst Du auch die Variablen angelegt haben um diese zu archivieren! Umgehen kannst Du das nur mit der vorgeschlagenen Lösung... obwohl ich mir selbst bei einem Preis von 400€ für das kleine Programm die arbeit machen würde und die Variablen in Flexible schnell anlegen würde.


----------



## Steff_F (13 Oktober 2008)

> Du mußt doch nur für jede Kurve die Variable benutzen, die du in der Visu sowieso schon als Kurvenvariable benutzt hast (also das ARRAY mit den Kurvenwerten).


 
Hallo, 

es war mir nicht bekannt, dass man im Script das ARRAY verarbeiten kann.
Werde es mal testen.

Gruß


----------



## Larry Laffer (13 Oktober 2008)

...
du mußt nur beachten, dass das Array mit dem Index 0 beginnt (und wenn es 999 Elemente hat mit dem Index 998 aufhört).

Gruß
LL


----------



## Steff_F (13 Oktober 2008)

Hallo,

leider bin ich mit VB ein totaler Anfänger und habe keine Anleitung gefunden wie ich die ARRAY Elemente in die CRV Datei bekomme.
In den Anleitungen bei Siemens wird nur beschrieben wie man Int und String abspeichern kann. Für das Speichern meiner anderen Daten konnte ich mir hierfür eine Musterlösung von Siemens so anpassen, dass es auf meine Anwendung passt. 

Dataset = CStr(Now) & ";" & CStr(SmartTags("Prot.Messung[1].P_Sys")) & ";" & CStr(SmartTags("Prot.Messung[1].PST")) & …….

Hierbei wird jede einzelne Variable in eine Zelle geschrieben.

Wie müsste der Befehl aussehen um die Inhalte des ARRAY[0..998] einer Messreihe in eine Zeile oder Spalte einer CSV – Datei zu schreiben?

Bin für jede Hilfe dankbar.

Gruß


----------



## Larry Laffer (13 Oktober 2008)

... mal so aus der Hüfte geschossen :
	
	



```
Daten = [FONT=Times New Roman][SIZE=3]CStr(Now)  +  ";" [/SIZE][/FONT]
for i = 0 to 998
   Daten = Daten + [FONT=Times New Roman][SIZE=3]CStr(SmartTags("Prot.Messung[[B][COLOR=red]i[/COLOR][/B]].P_Sys"))  + ";"[/SIZE][/FONT]
next
```
Gruß
LL


----------



## Steff_F (13 Oktober 2008)

Hallo,

mit der for - Schleife ist einleuchtend.
Allerdings wird die ARRAY Variable als Syntaxfehler angezeigt wenn ich „_" hinzufüge__
Name der ersten Messreihe: NormierteMessreihe.NormierteMesswerte_P (DB-Name.ARRAYname) 
Ich habe versucht „ “ an verschiedenen Stellen einzufügen aber bisher ohne Erfolg. 
i wurde deklariert.


Gruß_


----------



## Kai (13 Oktober 2008)

Hier mal ein kurzes Programmbeispiel für das Kopieren eines Datensatzes (ARRAY) in WinCC flexible in VBScript :


```
' Datensatz (ARRAY) kopieren
 
Dim i
 
For i = 0 To 9  
    SmartTags("Datensatz_2")(i) = SmartTags("Datensatz_1")(i) 
Next
```
 
Gruß Kai


----------



## Steff_F (13 Oktober 2008)

Danke für die tolle Hilfe!
Das abspeichern funktioniert jetzt. Musste nur den Code noch so ändern, dass die Variablen in eine Spalte geschrieben werden, weil Excel keine 999 Spalten anzeigen kann.

Dataset = CStr(Now) & ";" 
For i = 0 To 998
Dataset = Dataset & CStr(SmartTags("NormierteMessreihe.NormierteMesswerte_P")(i)) & Chr(10) & ";"
Next


Jetzt muss ich nur noch den Code so ändern, dass die anderen 4 Messreihen in den Spalten daneben abgelegt werden.

Gruß


----------



## Steff_F (13 Oktober 2008)

Hallo,

habe hier nochmals die fertigen Scripte zugefügt, fals nochmals jemand vor dem gleichen Problem stehen sollte.

Gruß


----------



## Larry Laffer (14 Oktober 2008)

... wenn du diese Werte in Excel weiter verwenden willst ...
Warum speicherst du dann nicht jede Kurve in eine Spalte und die Einzelwerte dann Zeilenweise untereinander ? Das würde dann in Excel die Sache etwas vereinfachen ...

Gruß
LL


----------



## JesperMP (14 Oktober 2008)

Das syntax ist wie so:

SmartTags("ODBC\FromDB\arrayToCDR")(0) = rst.Fields(0).Value

_ODBC\FromDB\arrayToCDR_ ist ein ARRAY Tag.

_rst.Fields_ ist ein VBS Array von typ ADO Recordset.


Ich vermute es wird funktionieren mit ein Index variabel:

SmartTags("ODBC\FromDB\arrayToCDR")(i) = rst.Fields(i).Value


Dies wird nicht funktionieren:
CStr(SmartTags("Prot.Messung[*i*].P_Sys")) 

So weit das ich weiss kann man nicht WinCC Flex ARRAYs erzeugen von STRUCTs oder UDTs. Nur "einfache" variabel typen wie INTs, DINTs oder REALs.

edit: Oho, ich hatte nicht gesehen das ihr es schon gelöst hatte.


----------



## Steff_F (14 Oktober 2008)

> ... wenn du diese Werte in Excel weiter verwenden willst ...
> Warum speicherst du dann nicht jede Kurve in eine Spalte und die Einzelwerte dann Zeilenweise untereinander ? Das würde dann in Excel die Sache etwas vereinfachen ...


 
Genau das mache ich ja jetzt, nachdem ich mein Script fertig habe. (Siehe Anhang oben)


```
Dataset = CStr(Now)  &  ";" 
For i = 0 To 998
   Dataset = Dataset & CStr(SmartTags("NormierteMessreihe.NormierteMesswerte_P")(i))& ";" &_
           CStr(SmartTags("NormierteMessreihe.NormierteMesswerte_P_DRV")(i))& ";" &_
           CStr(SmartTags("NormierteMessreihe.NormierteMesswerte_P_MST")(i))& ";" &_
           CStr(SmartTags("NormierteMessreihe.NormierteMesswerte_I")(i))& ";" &_        
           CStr(SmartTags("NormierteMessreihe.NormierteMesswerte_Q")(i)) & Chr(10) & ";"
 
Next
```
 
Funzt jetzt prima!
Die Datei wird auch automatisch mit aktuellem Datum und Auftragsnummer erzeugt.

Gruß


----------



## Integer (13 Januar 2009)

Genau so was wie Steff damals verwendet hat möchte ich auch anwenden.
Meine ergänzende Frage ist nur noch, funktioniert das mit dem speichern der Messwerten in ein CSV file auch mit einem CE Panel (MP377) oder nur auf PC mit Runtime Lizenz.


----------



## Larry Laffer (13 Januar 2009)

Hallo,
das sollte auch auf dem MP377 funktionieren. Du mußt hier nur beachten, dass durch WinCE andere VB-Befehle zum Einsatz kommen ...

Gruß
LL


----------

