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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
...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.
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
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...
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.
Danke.
Aber ich wollte schon das Format mit den Stunden, Minuten und Sekunden (sprich "12h15m33s") beibehalten.
Das muss doch auch gehen ?!
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);
...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:
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
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