# Uhrzeit und Datum in Char Variable speichern



## Kutschi (28 Juli 2013)

Hallo,

ich brauche ja Hilfe von C Profis. Ich würde gerne in WinCC das aktuelle Datum und die Uhrzeit in einer Char Varibale schreiben. Das Skript sollte mit einem Trigger ausgelöst werden. Diese gewonnenen Char Variable mit Datum und Uhrzeit benötige ich im Report Designet am online Trend Control für die Anfangs und Endzeit.

ich hoffe mir kann jemand weiterhelfen. Mit C Programmierung tue ich mir doch etwas schwer.

danke
Kutschi


----------



## RONIN (31 Juli 2013)

https://support.automation.siemens....=cseus&aktprim=0&extranet=standard&viewreg=WW

Hier steht alles!

 Ist in vbs ebenfalls einfach: SmartTags("MeinString") = CStr(Now)


----------



## Kutschi (31 Juli 2013)

Hi,

das sieht ja schon ma sehr gut aus. Aber meine C oder VbS Kenntnisse sind doch sehr eingeschränkt. Wie bekomme ich die Daten die ja laut Siemens Support dann im Word Format vorliegen in die Char Variable. 
Diese sollte folgender Massen aussehen "20.07.2013 15:30:30".


----------



## PN/DP (31 Juli 2013)

```
'VBS: Datum-String formatieren "31.12.2008 01:59:59" unabhängig von den regionalen Einstellungen

Dim ts, sts

ts = Now   'oder: ts = SmartTags("MeinString")
sts = Right("0" & DatePart("d", ts), 2) & "." & Right("0" & DatePart("m", ts), 2) & "." & DatePart("yyyy", ts) & " " _
      & Right("0" & DatePart("h", ts), 2) & ":" & Right("0" & DatePart("n", ts), 2) & ":" & Right("0" & DatePart("s", ts), 2)
```

Harald


----------



## Kutschi (2 August 2013)

Danke Harald,

Könntest Du die Zeilen etwas erklären. Von VBS habe ich noch ar keine Ahnung. Ist da schon eine Char Variable dabei die ich dann verwenden kann? Muss ich eine noch als interne Variable im WinCC anlegen?

Markus


----------



## PN/DP (3 August 2013)

*Systemzeit zu Datum-String formatieren "31.12.2008 01:59:59"*


```
'VBS: Systemzeit zu Datum-String formatieren "31.12.2008 01:59:59" unabhängig von den regionalen Einstellungen

Dim ts, sts

ts = Now
sts = Right("0" & DatePart("d", ts), 2) & "." & Right("0" & DatePart("m", ts), 2) & "." & DatePart("yyyy", ts) & " " & _
      Right("0" & DatePart("h", ts), 2) & ":" & Right("0" & DatePart("n", ts), 2) & ":" & Right("0" & DatePart("s", ts), 2)
SmartTags("MeinString") = sts
```

Der VBS-Code erzeugt aus der aktuellen Systemzeit des Computers einen String in der Form "31.12.2008 01:59:59".
Dazu wird mit der Now-Funktion die Systemzeit in die temporäre Variable ts geschrieben und dann mit Hilfe der DatePart-Funktion die einzelnen Datumsteile aus ts zum String zusammengesetzt sowie die Trennzeichen eingefügt.
Am Ende liegt der String in der temporären Variable sts und kann weiterverarbeitet werden oder auch einer WinCC-Variablen zugewiesen werden ( SmartTags("MeinString") = sts ).
Right("0" & DatePart(...), 2) hängt eine Vor-Null vor das Datumsteil und schneidet dann die letzten 2 Zeichen heraus, damit die Datums- und Zeitangaben immer mit 2 Ziffern in den String kommen (0 bis 9 --> "00" .. "09", 10 bis 59 --> "10" .. "59").

Genaueres siehe die Hilfe zu den VBS-Funktionen: Now, DatePart, Right

So sollte es auch in C-Script funktionieren (nicht getestet):

```
//C: Systemzeit zu Datum-String formatieren "31.12.2008 01:59:59" unabhängig von den regionalen Einstellungen

#pragma code("kernel32.dll")
VOID GetLocalTime(SYSTEMTIME *lpst);
#pragma code();
SYSTEMTIME ts;
char sts[20];

GetLocalTime(&ts);
sprintf(sts, "%02d.%02d.%04d %02d:%02d:%02d", ts.wDay, ts.wMonth, ts.wYear, ts.wHour, ts.wMinute, ts.wSecond);
SetTagChar("MeinString", sts);
```

Harald


----------



## Kutschi (5 August 2013)

Hallo,

Danke für die Hilfe bis jetzt. Das klappt ja schon ganz gut was ich da jetzt gebaut habe. Wofür ist denn die Zeile #pragma code() ? Besteht die Möglichkeit von ts.whour eine Stunde abzuziehen?

Gruß
Markus


----------



## PN/DP (5 August 2013)

Kutschi schrieb:


> Wofür ist denn die Zeile #pragma code() ?


#pragma code() beendet den Deklarationsblock für Funktionen aus externen DLL.
siehe WinCC Hilfe oder Systemhandbuch WinCC V7.2 Scripting: VBS, ANSI-C, VBA




> Besteht die Möglichkeit von ts.whour eine Stunde abzuziehen?


Wozu soll das gut sein? Willst Du die Sommerzeit aus der PC-Zeit 'rausrechnen - dazu müßtest Du wissen, ob Sommerzeit ist ... besser wäre vielleicht, GetSystemTime() statt GetLocalTime() zu nutzen.

In VBS würde ich versuchen (ungetestet)

```
ts = DateAdd("h", -1, Now)
```
Wie man das im WinCC-C rechnen kann weiß ich nicht.

Harald


----------

