WINCCFlex Exceldatei mit Datum schreiben

sailor

Level-1
Beiträge
641
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich möchte ein Excel - file in WINCCFlex Script erstellen mit den Namen "Datum+ Zeitstempel.
Mit den Zeitstempel alleine wird die Datei richtig erstellt. Aber mit den Datum aus Now wird die Datei nicht erstellt.


Verzeichnis = "D:\Eigene Dateien\Desktop\"
Datei = CStr(Now)+Hex(CStr(SmartTags("Werte\Zeitstempel")(0)))

Wer weiss, warum?
Gruß
Sailor
 
Hallo,
ich kann dir da auch nur mit einer Spekulation dienen :
NOW ist ja ein zusammengesetztes Format, das Datum- und Uhrzeit-Informationen beinhaltet. Ich könnte mir vorstellen, dass das der Grund ist.
Versuch es doch mal mit DATE - das sollte eigentlich auch schon ein String sein ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Datum ist einfach zu zerteilen mit Datepart.
Hier ein Beispiel mit Format YYYY_M_D, z.B. "2012_3_13":
Code:
strPathAndFilename = "D:\Eigene Dateien\Desktop\" & CStr(DatePart("yyyy",Date)) & "_" & CStr(DatePart("m",Date)) & "_" & CStr(DatePart("d",Date)) & ".csv"

Uhrzeit weiss ich nicht.

N.B. Strings fügen man zusammen mit "&", nicht "+".
 
Nach ein wenig nachlesen.
Stunde und Minuten Zeit bekommt mant mit Hour(Now) und Minute(Now).
Wenn du einfach Now verwendest, bekommst du ein string mit irgendeinen Format wie es in Windows Regionaleigenschaften eingestellt ist. "2012-03-13 1:45PM" z.B.

Also dies sollte Datum und Uhrzeit in den Dateiname einbetten:
Code:
strPathAndFilename = "D:\Eigene Dateien\Desktop\" & CStr(DatePart("yyyy",Date)) & "_" & CStr(DatePart("m",Date)) & "_" & CStr(DatePart("d",Date)) & "_" & CStr(Hour(Now)) & "_" & CStr(Minute(Now)) & ".csv"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Jesper: Danke, das wars.

@Kai: Auf einen PC. Warum? Es sol eine .xslx werden, da jede Menge diverse Werte drin sind.

Mal ne andere Frage: Ich teste das Script unter WINCCFlex nur mit PLCSim von S7.
Da braucht das Script ca. 5 sek., um die Datei zu erstellen und 6000 Werte aus der Steuerung (hinterlegt in 3 WINCCFlex Arrays) abzuholen und in die .xslx-Datei zu schreiben.
Was meint ihr, wie lange es dauert, wenn ne "lebendige" CPU 315 dranhängt?

Es grüßt
Sailor
 
Zuletzt bearbeitet:
Ich schreibe zu .csv Dateien und dann nur eine Zeile pro Schreibvorgang. Dies funktioniert zuverlässig.
Keine Erfahrung mit .xslx. 6000 Werte ist schon etwas. Kann auch bei Kommunikationsbegrenzungen liegen. Ein S7 CPU hat eine Grenze bei 244 Bytes das man auf einmal lesen kann.
edit: Und ob es eine Ähnliche Grenze bei PLCSIM gibt, keine Ahnung.
 
Du meinst, das ich ein Array mit 2000 Werten gar nicht auslesen kann?
Ich lese auch in einer Schleife immer 3 Werte in eine Zeile allerdings eben 2000 mal.
.xslx ist Excel 2010.
Gruß
Sailor
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man kann mehr als 244 bytes auslesen.
Aber dann wandelt WinCC Flex es in mehrere lesevorgänge.
Z.B. wenn man ein gepufferte Trendkurve aktualisert, dann sieht man aber wie der Kurve aufzeichnet in Teilen von 120 INTs jede Sekunde (oder wie Schnell man den Tag aktualiserzeit eingestellt hat).

Was passiert wenn man ein ARRAY grösser als 244 Bytes in ein Skript einlest ?
Ich vermute das die erste 244 Bytes werden auf einmal eingelest, egal ob man nur 3 Werte addressiert in den Skript.
Die nachfolgene Werte behalten die alten Werte von den vorigen mal das den ARRAY addresiert wurde.
Ich wurde dies sorgfältig testen auf eine reale CPU.
Bitte das Ergebnis hier melden. Es wurde mich interessieren.
 
Sorry, ich hab derzeit keine CPU am Tisch.
Vielleicht gibts ja ein paar Zaungäste, die das Ding auf ne CPU laden könnten.
Jasper, vielleicht wird das Arrayelement ja jedesmal aktualisiert, wenn mann es direkt (SmartTags...) anspricht und nicht über den Umweg über eine Script-Variable.

Hier die Schleife:

Do Until b >=2000

'Schleifenindex
b= b+1

'Wert schreiben aus 3 WINCCFlex-Arrays: Werte_weg, Werte_FU, Werte_Zeitstempel mit je 2000 Elementen
val_a = SmartTags("Werte\Werte_weg")(b)
val_b = SmartTags("Werte\Werte_FU")(b)
val_c = Hex(SmartTags("Werte\Zeitstempel")(b))

' Zelle beschreiben
wsExcel.Cells (b, 1) = val_a
wsExcel.Cells (b, 2) = val_b
wsExcel.Cells (b, 3) = val_c

Loop


Gruß
Sailor
 
Kann nicht sagen ob das Skript beim ersten ARRAY Variabel Zugang den Skript aufhaltet bis den ganzen ARRAY eingelest ist, oder es lest nur die ersten 244 Bytes.
 
Hallo,
3 Sachen noch einmal dazu :
- um in eine Excel-Datei hineinschreiben zu können muss auch auf dem Zielsystem (also wo die Runtime daruf läuft) Excel installiert sein.
- das Schreiben von Daten in eine Excel-Datei kann unter Umständen sehr viel Zeit in Anspruch nehmen, da du immer Excel benutzt um in die Excel-Datei zu schreiben. Das ist alles unnötig beim Nutzen von CSV-Dateien - das läuft dort sehr viel schneller.
- das mit den 6000 Datensätzen halte ich für sehr sportlich. Natürlich bekommst du die Daten irgendiwe in deine Visu hinein - ob die aber konsistent sind und somit alles Datensätze, die die Visu gerade in ihrem Array hat mit denen der SPS übereinstimmen möchte ich hier mal stark bezweifeln. Das kannst du eigentlich nur sicherstellen wenn du die Daten über Tools wie AGLink (oder LibnoDave) abholst - und selbst da könnte es ggf. problematisch sein / werden.

Ich denke, du arbeitest da "ein bißchen an deiner Visu und deren Möglichkeiten vorbei.

Gruß
Larry
 
Do Until b >=2000

'Schleifenindex
b= b+1

'Wert schreiben aus 3 WINCCFlex-Arrays: Werte_weg, Werte_FU, Werte_Zeitstempel mit je 2000 Elementen
val_a = SmartTags("Werte\Werte_weg")(b)
val_b = SmartTags("Werte\Werte_FU")(b)
val_c = Hex(SmartTags("Werte\Zeitstempel")(b))

' Zelle beschreiben
wsExcel.Cells (b, 1) = val_a
wsExcel.Cells (b, 2) = val_b
wsExcel.Cells (b, 3) = val_c

Loop

Bei der Verwendung von Arrays in WinCC flexible ist nach dem Benutzerhandbuch für WinCC flexible 2008 (Seite 144) folgendes zu beachten:

Erhöhte Systemauslastung und Performanceeinbußen

Bei einem Lesezugriff oder Schreibzugriff auf ein einzelnes Arrayelement werden immer
alle Arrayelemente der Arrayvariablen gelesen oder geschrieben. Daher dauert bei großen
Arrays die Datenübertragung von und zur Steuerung generell länger als bei einem
elementaren Datentyp. Dies kann die Kommunikation überlasten und dadurch stören

Verwendung in Skripten

Aus den gleichen Performancegründen verwenden Sie in Skripten zum Ändern von Array
immer interne, temporäre Array.

1. Am Anfang des Skriptes kopieren Sie das PLC-Array in ein internes Array.

2. Während das interne Array durch das Skript bearbeitet wird, belasten Sie dadurch nicht
die Datenübertragung zur Steuerung

ID18796010 Benutzerhandbuch WinCC flexible 2008 Compact / Standard / Advanced

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
um variablen sicher aktuell in der visu zu haben muss man diese über eine rezeptur lesen. mit dem rückgabewert 4 beim einlesen der rezeptur sind alle variablen gelesen. alles andere ist mehr oder weniger zufall.
aber das wurde schon mehrfach im forum beschrieben.
 
Der Kai wird dir hier wahrscheinlich nicht antworten - von dem habe ich schon seit einigen Jahren nichts mehr gelesen.
Ganz grundsätzlich solltest du dich nicht an einen ur-alten Thread hängen ... und dann solltest du dir auch "ein bißchen" mehr Mühe mit deiner Frage geben.
Aber vielleicht hilft dir das hier weiter :
Protool/WinCCflex/TIA Daten lesen / schreiben mit VB-Script

Gruß
Larry
 
Zurück
Oben