Format der TIME-Variablen

dietere
2007-09-27
2007-10-02
  • dietere - 2007-09-27

    Hallo,

    ich mache eine Substraktion von 2 TOD-Variablen und speichere diese Zeitdauer in einer TIME-Variable. Soweit so gut.

    Resultat wird wie folgt dargestellt: t#736m55s0ms

    Kann ich das Format beeinflussen ?

    Ich hätte lieber die Stunden dargestellt und brauch die Millisekunden nicht, also so ähnlich wie t#12h13m14s

    Geht das ?

    Grüsse,

    Dieter

     
  • mwatermann - 2007-09-27

    intern wird TIME als DWORD behandelt (in ms).

    zur umwandlung wirst du sicherlich was in der oscat.lib finden, ansonsten halt selber basteln... ist in diesem fall ja nicht sooo schwer...

    @dit:

    markier mal TIME in codesys und drück F1, hilft manchmal wunder...

     
  • Joachim Ueltzen - 2007-09-27

    Kannste mit TIME_TO_DWORD machen, und dann ein paar mal MOD und DIV, und dann haste den Wert in Stunden oder Minuten,... und für ne hübsche Visu packste dann die Werte in nen String, und dann sieht das auch ganz annehmbar aus.

     
  • dietere - 2007-09-27

    Danke.

    Aber ich wollte schon das Format mit den Stunden, Minuten und Sekunden (sprich "12h15m33s") beibehalten.

    Das muss doch auch gehen ?!

     
  • Joachim Ueltzen - 2007-09-27

    Ja, habs grad ma ausprobiert, musst noch nen TIME_TO_TOD vor die Variable setzen und dann haste wieder das Format.

    Var2 := TIME_TO_TOD (Var);

     
  • mwatermann - 2007-09-28

    ...deswegen der tipp, mal die hilfe aufzurufen. man kann natürlich auch direkt, ausser TIME, noch als TOD (TimeOfDate), D (DATE) und DT (DateAndTime) initialisieren.

    Auszug:

    Examples:
    DATE#1996-05-06
    d#1972-03-29
    Examples:
    TIME_OF_DAY#15:36:30.123
    tod#00:00:00
    Examples:
    DATE_AND_TIME#1996-05-06-15:36:30
    dt#1972-03-29-00:00:00
    
     
  • Pitsch52 - 2007-10-02

    Hallo

    Ich habe vor eineiger Zeit mal ne Funktion kreiert.

    Kann sicher noch verbessert werden. Für meine damalige Anwendung war es ausreichend.

    Definitions-Teil:**

    FUNCTION STD_Anzeige :STRING

    VAR_INPUT

    IN:TIME;
    

    END_VAR

    VAR

    TEMP1:DWORD;

    TEMP2:STRING;

    STUNDEN: UDINT;

    MINUTEN: BYTE;

    SEKUNDEN: BYTE;

    MILISEKUNDEN: WORD;

    strSTUNDEN: STRING;

    strMINUTEN: STRING;

    strSEKUNDEN: STRING;

    strMILISEKUNDEN: STRING;

    END_VAR

    Code-Teil:*

    TEMP1 := TIME_TO_DWORD(IN);

    IF TEMP1 >= 3600000 THEN

    STUNDEN := TEMP1 / 3600000;

    TEMP1 := TEMP1 MOD 3600000;

    END_IF

    IF TEMP1 >= 60000 THEN

    MINUTEN := DWORD_TO_BYTE(TEMP1 / 60000);

    TEMP1 := TEMP1 MOD 60000;

    END_IF

    IF TEMP1 >= 1000 THEN

    SEKUNDEN := DWORD_TO_BYTE(TEMP1 / 1000);

    TEMP1 := TEMP1 MOD 1000;

    END_IF

    IF TEMP1 >= 1 THEN

    MILISEKUNDEN := DWORD_TO_WORD(TEMP1);

    END_IF

    IF STUNDEN <> 0 THEN

    strSTUNDEN := CONCAT(DWORD_TO_STRING(STUNDEN), 'Std ');

    ELSE

    strSTUNDEN := '';

    END_IF

    IF MINUTEN <> 0 THEN

    strMINUTEN := CONCAT(DWORD_TO_STRING(MINUTEN), 'Min ');

    ELSE

    strMinuten := '';

    END_IF

    IF SEKUNDEN <> 0 THEN

    strSEKUNDEN := CONCAT(DWORD_TO_STRING(SEKUNDEN), 'Sek ');

    ELSE

    strSEKUNDEN := '';

    END_IF

    IF MILISEKUNDEN <> 0 THEN

    strMILISEKUNDEN := CONCAT(DWORD_TO_STRING(MILISEKUNDEN), 'Ms');

    ELSE

    strMILISEKUNDEN := '';

    END_IF

    TEMP2 := CONCAT(strSTUNDEN,strMINUTEN);

    TEMP2 := CONCAT(Temp2, strSEKUNDEN);

    STD_Anzeige := CONCAT(TEMP2, strMILISEKUNDEN);

    Viel Spass beim Ausprobieren!

    Mit freundlichen Grüssen! Pitsch

     

Log in to post a comment.