Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: WinCC Prof. Umwandlung string nach DateTime

  1. #1
    Registriert seit
    02.07.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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ß
    Zitieren Zitieren WinCC Prof. Umwandlung string nach DateTime  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    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

  3. #3
    Uke ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.07.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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

    Aber vielleicht kann mir mit der Info noch jemand helfen.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    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).

  5. #5
    Uke ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.07.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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?

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    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 ?

  7. #7
    Uke ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.07.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es ist mir nach weiterer Forschung und weiterem Testen gelungen!

    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.

Ähnliche Themen

  1. Step 7 DateTime nach Time und Date wandeln
    Von energystar im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 20.05.2015, 10:23
  2. Umwandlung Protool nach WinCC
    Von Michael85 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 14.01.2014, 14:16
  3. WinCC - Datentyp Datetime
    Von ddb im Forum HMI
    Antworten: 1
    Letzter Beitrag: 17.09.2008, 10:01
  4. c#, sql, string, datetime, bool(bit)
    Von vierlagig im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 20.10.2007, 21:51
  5. Umwandlung INT nach TIME
    Von manas im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.09.2007, 20:02

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •