WinCC Prof. Umwandlung string nach DateTime

Uke

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

ich habe ein Problem mit WinCC Professional V13 SP1:
Kann ich eine Variable des Types String in eine Variable des Typs DateTime umwandeln? Wie ist DateTime eigentlich aufgebaut. Konnte in der WinCC-Hilfe leider nichts dazu finden.

Der Hintergrund ist folgender:
Ich habe in einem Protokoll ein Kurvencontrol. Diesem sollen zum Zeitpunkt des Aufrufes Start- und Endzeitpunkt übergeben werden.
Diese Zeitpunkte liegen in einer csv-Datei vor und werden von dort ausgelesen. Dadurch habe ich sie als string-Variable vorliegen. In WinCC Klassik konnte ich diesen String einem Kurvencontrol als Start- und Endzeitpunkt übergeben (Das Projekt wurde migriert, wobei das alte Control nicht migriert werden konnte). Bei WinCC Prof. klappt die Stringübergabe bei mir nicht. Mit Variablen vom Typ DateTime klappt es.
Daher gehe ich davon aus, dass ich meinen String umwandeln muss, oder kann ich dem Kurvencontrol den Start- und Endzeitpunkt auch anders übergeben?

Zur Info: ich habe zwar schon viel mit WinCC Klassik zu tun gehabt. Aber dies ist mein ersten WinCC Prof.-Projekt.

Gruß
 
Hallo,
in der Visu müßtest du es so machen :
- zunächst den Aufbau des Strings kennen - am Besten wäre ja z.B. "TT.MM.JJJJ - HH:MM"
- nun den String in seine Bestandteile zerlegen - das ginge in meinem Beispiel z.B. mit Split - zuerst beim Bindestrich in Datum und Uhrzeit - dann beim "." bzw. ":" in die weiteren Teile.
- nun diese Teile in den DateTime-Wert umrechnen - handelt es sich hierbei um das Microsoft-DateTime dann wäre das ein Real mit Tagen im Vorkomma-Bereich + ein Offset und der Uhrzeit als Teiltag im Nachkommabereich (12:00 Uhr Mittags wäre dann 0,5).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erst mal Danke für die Antwort,

das mit dem Aufteilen des Strings ist nicht das Problem, das bekomme ich hin.
Die Frage ist eben genau, wie ist der Datentyp DateTime in WinCC Prof. aufgebaut. Ich weiss nicht, ob der dem Microsoft-DateTime entspricht. Auf alle Fälle sind die Variable 8 Byte groß.
Mittlerweile habe ich auch gesehen, das es eine Funktion SetTagDateTime gibt, die so definiert ist "BOOL SetTagDateTime(Tag Tag_Name, SYSTEMTIME value)"
Daher gehe ich davon aus, das SYSTEMTIME und DateTime gleich aufgebaut sind.

Nur leider weiss ich auch nicht, wie SYSTEMTIME in WinCC definiert ist :cry:

Aber vielleicht kann mir mit der Info noch jemand helfen.
 
Das sind 2 verschiedenen Paar Schuhe ...
Du spricht vom Siemens "DateAndTime" oder kurz "DT" - das ist ein 8 Byte langer BCD-String (die Zahlenwerte stehen in einer bestimmten Reihenfolge (siehe dazu die Step7-Hilfe) als BCD-Werte darin).
 
Wieso 2 Paar Schuhe? Verstehe ich jetzt leider nicht ganz.

Es geht um den Datentyp DateTime aus dem Variablenhaushalt in WinCC Prof. und um die WinCC-Funktion SetTagDateTime (gibt's auch als GetTagDateTime).
Mit SetTag... und GetTag... werden doch Variablen des entspechenden Datentypes geschrieben bzw. gelesen.
Wobei es ja durchaus möglich ist, dass das DateAndTime der S7 und das DateTime von WinCC genauso aufgebaut sind. Haben ja beide 8 Byte.

Mit diesem Aufbau bin ich gerade am testen. Bekomme aber bisher das SetTagDateTime noch nicht befriedigt. Hat das schon mal jemand verwendet?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
2 verschiedene Paar Schuhe bezogen auf den Datentyp - einmal der REAL-Wert und einmal der 8-Byte BCD-String ...

Da ich selbst WinCCProfessional nicht einsetze ... welche Funktionen stehen dir denn da zum Setzen dieser Geschichte zur Verfügung (außer SetTagDateTime - der scheint mir gemäß deiner Beschreibung dafür nicht geeignet zu sein) und wie werden die beschaltet ?
 
Es ist mir nach weiterer Forschung und weiterem Testen gelungen! :D

Der folgende Code bekommt einen Datum/Zeit-String übergeben (festgelegtes Format, siehe Code) und beschreibt damit eine (ebenfalls übergebene) Variable vom Typ DateTime. Mit dieser kann ich dann mein Kurvencontrol versorgen. (Funktion wird natürlich zweimal aufgerufen, für Start- und Endzeit)

Code:
#include "GlobalDefinitions.h" 
void StrToDateTime(char* StrDateTime, char* DateTimeVar)
{
//Die Funktion wandelt einen String in eine Variable vom Type "DateTime" um
//StrDateTime: String mit Datum+Zeit im Format "YYYY-MM-DD hh:mm:ss"
//DateTimeVar: Name der Variablen von Typ "DateTime"
char *tmp1, *tmp2, *tmp3, *tmp4, *tmp5, *tmp6;
char t1[5], t2[3], t3[3], t4[3], t5[3], t6[3];
SYSTEMTIME tmpTime;

tmp1=strtok(StrDateTime,"-");
tmp2=strtok(NULL,"-");
tmp3=strtok(NULL," ");
tmp4=strtok(NULL,":");
tmp5=strtok(NULL,":");
tmp6=strtok(NULL,".");

sprintf(t1,"%s",tmp1);
sprintf(t2,"%s",tmp2);
sprintf(t3,"%s",tmp3);
sprintf(t4,"%s",tmp4);
sprintf(t5,"%s",tmp5);
sprintf(t6,"%s",tmp6);

tmpTime.wYear = atoi(t1);
tmpTime.wMonth = atoi(t2);
tmpTime.wDay = atoi(t3);
tmpTime.wHour = atoi(t4);
tmpTime.wMinute = atoi(t5);
tmpTime.wSecond = atoi(t6);

SetTagDateTime(DateTimeVar, tmpTime);
}

Bei den atoi-Anweisung werden bei Übersetzten zwar Warnungen ausgegeben (conversation may loose information), die machen hier aber nichts aus.
 
Zurück
Oben