Format DATE in real oder INt wandeln

jensel

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

ich habe ein riesen Problem ich lese die CPU Zeit aus und zerlege dies dann mit den S7 Bausteinen in Uhrzeit und in das Datum.
Speicher mir dann das Datum im Format D#2011-5-10 ab mit hilfe einen Fifospeichers so erfasse ich Füllstände am Tag.

Jetzt kommt mein Problem ich möchte dieses Datum (D#2011-5-10)mit den gehörigen Füllständen in WinCC anzeigen.
Die Füllstände sind kein Problem das sind ja schon INT.

Wie kann ich denn das Format Date in INT oder Real wandeln das WinCC mir diese anzeigt.
Oder gibt es einen Trick das WinCC das So kann??

Danke schon mal für eure mithielfe.
(PS. hab hier schon ein SCl Programm dafür getestet.Dieses ist aber immer 1nen Tag zurück und ab 2012 einen Tag vor)
 
WinCC (ohne flex) kennt von Haus aus die Datentypen DATE oder auch DATE_AND_TIME nicht. Diese müsstest du z.B. als Strukturvariable anlegen, was dementsprechend viele Tags verbraucht.

Für DATE_AND_TIME gibt es hier ein Beispiel:
http://support.automation.siemens.com/WW/view/de/35947176

Aber wenn du einen fortlaufenden Fifo mit festem Zeitraster hast wird doch eigentlich kein Zeitstempel benötigt, denn die Zeiten ergeben sich aus der Position im Fifo.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aha dies ist sehr hielreich wollte aber die Zeit nicht mit hoch nehmen sondern nur das datum und cih weiß nicht wie ich diese auslesen kann den die anzeige ist ja tage seit 1.1.1990
 
Dann lass es doch beim Typ "DATE". In WinCC legst du die Variable dann vom Typ Integer an, und musst diese dann mit einem kleinen C oder VB-Skript mit den entsprechenden Zeitfunktionen in einen in WinCC darstellbaren Typ oder String zurückrechnen. Ist zwar blöd, aber bei WinCC geht das nicht anders.

Einen direkten Weg gibt es von WinCC aus für diesen Typ nicht. Du müsstest die Daten schon entsprechend hochbringen, z.B. das Datum als drei einzelne Integer-Variablen (Jahr, Monat, Tag).
 
aha ja das mit den Script ist noch so einfach hab das lange lange schon nicht mehr gemacht.Hast du reinzufällig ein script was das kann.
Oder eine idee wie man date teilt steh tzrzeit nur noch auf den schlauch
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit einer C-Funktion könnte man das so machen:
Code:
char *GetS7DateString(int S7DATE )
{
    /* Wandelt den S7 Datentyp DATE in einen String vom Aufbau DD.MM.YYYY
     * Der Datentyp DATE gibt die Anzahl an Tagen seit dem 1.1.1990 an.
     */

    char *Datum;
    struct tm *mt;
    time_t t;

    Datum = SysMalloc(12);
    
    t = 631152000L; /* Unixzeit: 1.1.1990 00:00:00 */
    t += S7DATE * (24*60*60);
    mt = gmtime(&t);
    sprintf(Datum, "%02d.%02d.%04d", mt->tm_mday, mt->tm_mon + 1, mt->tm_year + 1900); 

    return Datum;
}
 
gut werde das mal testen morgen oder ich mache es einfach speichre nicht nur das datum sondern auch die zeit ab also in format Time_and_date und mach das dann so wie du es vorhin gepostet hast mit der Siemens anleitung mal sehen wie ich das löse
 
Zurück
Oben