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

Ergebnis 1 bis 8 von 8

Thema: Zahlen in Datum

  1. #1
    Registriert seit
    22.03.2011
    Beiträge
    54
    Danke
    2
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo,

    kurze frage ich möchte zahlen 1 bis 365 (entsprechen die anzahl von tagen im jahr) den entsprechenden datum zuorden. also ist zum bsp. der 1.1.2011 = 1 und so weiter...

    Die zahlen (1 bis 365) kann ich mittels eines sliders verändern. dies dient dazu das ich werte die gemessen wurden mittels sliders anzeigen kann und das entprechende datum!

    hoffe ich konnte es einigermaßen gut erklären und das mir wer helfen kann

    mfg 4Josh
    Zitieren Zitieren Zahlen in Datum  

  2. #2
    4Josh ist offline Benutzer
    Themenstarter
    Registriert seit
    22.03.2011
    Beiträge
    54
    Danke
    2
    Erhielt 5 Danke für 5 Beiträge

    Standard

    bräuchte eigentlich nur den umgekehrten baustein (DAY_OF_YEAR) aus der oscat321.lib wenn es so einen gibt ! den der wandelt das datum in eine Zahl (INT)

    hoffe mir kann wer helfen

    mfg

  3. #3
    Registriert seit
    15.02.2011
    Ort
    Stromness, Scotland, UK
    Beiträge
    339
    Danke
    25
    Erhielt 34 Danke für 33 Beiträge

    Standard

    Das ist der Code von Oscat, villeicht hilft es dir...


    Code:
    DAY_OF_YEAR := UDINT_TO_INT((DATE_TO_UDINT(idate) / UDINT#86400) MOD UDINT#1461);
    IF DAY_OF_YEAR > 729 THEN
        IF DAY_OF_YEAR > 1095 THEN DAY_OF_YEAR := DAY_OF_YEAR - 1095; ELSE DAY_OF_YEAR := DAY_OF_YEAR - 729; END_IF;
    ELSIF DAY_OF_YEAR > 364 THEN
        DAY_OF_YEAR := DAY_OF_YEAR - 364;
    ELSE
        DAY_OF_YEAR := DAY_OF_YEAR + 1;
    END_IF;
    
    
    (*
    DAY_OF_YEAR := DWORD_TO_INT((DATE_TO_DWORD(idate) - DATE_TO_DWORD(YEAR_BEGIN(YEAR_OF_DATE(idate)))) / 86400) + 1;
    *)

  4. #4
    Registriert seit
    15.02.2011
    Ort
    Stromness, Scotland, UK
    Beiträge
    339
    Danke
    25
    Erhielt 34 Danke für 33 Beiträge

    Standard

    Das ist der Code von Oscat, villeicht hilft es dir...


    Code:
    DAY_OF_YEAR := UDINT_TO_INT((DATE_TO_UDINT(idate) / UDINT#86400) MOD UDINT#1461);
    IF DAY_OF_YEAR > 729 THEN
        IF DAY_OF_YEAR > 1095 THEN DAY_OF_YEAR := DAY_OF_YEAR - 1095; ELSE DAY_OF_YEAR := DAY_OF_YEAR - 729; END_IF;
    ELSIF DAY_OF_YEAR > 364 THEN
        DAY_OF_YEAR := DAY_OF_YEAR - 364;
    ELSE
        DAY_OF_YEAR := DAY_OF_YEAR + 1;
    END_IF;
    
    
    (*
    DAY_OF_YEAR := DWORD_TO_INT((DATE_TO_DWORD(idate) - DATE_TO_DWORD(YEAR_BEGIN(YEAR_OF_DATE(idate)))) / 86400) + 1;
    *)

  5. #5
    4Josh ist offline Benutzer
    Themenstarter
    Registriert seit
    22.03.2011
    Beiträge
    54
    Danke
    2
    Erhielt 5 Danke für 5 Beiträge

    Standard

    mh... naja brauche genau diesen baustein anders herum ! also ich geben eine zahl und der baustein wandelt es mir in ein datum um !

    mfg

  6. #6
    Registriert seit
    15.02.2011
    Ort
    Stromness, Scotland, UK
    Beiträge
    339
    Danke
    25
    Erhielt 34 Danke für 33 Beiträge

    Standard

    jaja, scho klar... Es sollte dir nur als Denkanstoss herhalten. Hier nochmals ein umgekehrtes Beispiel...

    codesys speichert die datentypen DATE und DT als 32 wert in sekunden seit 1.1.1970.
    TIME und TOD wird in millisekunden als 32 Bit wert gespeichert.
    Mathematische operationen sind mit diesen datentypen nur bedingt möglich.

    du kannst aber alle datentypen entsprechend wandeln:
    time_to_udint macht dir aus T#1s exakt den wert 1000 den du dann als udint beliebig teilen oder multiplizieren kannst.

    nehmen wir nun an du möchtest die tage aus TIME berechnen dann:
    tage := time_to_udint(tx) / 86400000;
    ein tag hat 24*60*60 sekunden und nochmals 100 wegen den millisekunden.
    das ganze mit auflösung in gleitpunktzahl wäre:
    tage := time_to_real(tx) / 86400000.0;

    beispiel dt in tage:
    tage := dt_to_real(tx) / 86400.0;
    ein tag sind 86400 sekunden
    (http://www.sps-forum.de/archive/index.php/t-42265.html) -> letzter Post...

  7. #7
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Sollte doch gehen wenn du den 01.01 nimmst und date_add aus oscat!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #8
    4Josh ist offline Benutzer
    Themenstarter
    Registriert seit
    22.03.2011
    Beiträge
    54
    Danke
    2
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    jo also hab gestern noch bis halb 12 dran earbeitet am ende ... kann es kaum glauben hat es funktioniert hab einfach den baustein date_ADD geommen!
    dort bei idate den ersten ersten 2011 eingetragen und bei days den slider von 0 bis 365 eingetragen!
    Damit sich das Jahr mit ändert hab ich mir einen kleinen Baustein geschrieben der ein signal gibt wenn ein jahreswechsel stadtgefunden hat. Dieses signal wird durch ein ctu gezählt und der cv wert des bausteins an den date_add weitergegeben !


    Danke nochmal

Ähnliche Themen

  1. Zusammenfügen von Zahlen
    Von HTL im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 16.05.2009, 09:23
  2. Division von INT Zahlen
    Von HonestAnnie im Forum Simatic
    Antworten: 58
    Letzter Beitrag: 16.07.2008, 23:31
  3. BCD-Zahlen verwandeln
    Von Dr. Holsten im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 10.10.2007, 11:08
  4. BCD zahlen in der s7 314
    Von Hobby programmierer im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 01.12.2005, 05:46
  5. BCD Zahlen in DB, Step7 V.5
    Von Sh4gr4th im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 04.11.2005, 14:06

Lesezeichen

Berechtigungen

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