Dobrý den,
zajímá mne, zda se dá jednodušeji zjistit čas, jak dlouho Foxtrot běží? A teto pak zobrazit proměnnou ve web makeru.
Co udělá následující kód, když bude rozsah > 24h? Pojede čas znovu od nuly nebo to přeteče s chybou?
VAR
upTimeStart : DATE_AND_TIME;
upTime : TIME;
END_VAR
IF System_S.S2_3 OR System_S.S2_4 THEN
upTimeStart := GetDateTime();
END_IF
upTime := SUB_DT_DT(GetDateTime(), upTimeStart);
Odpovědi 2
Dobrý den,
čas přeteče přibližně po 24 dnech 20 hodinách 31 minutách a začne na záporných hodnotách, což vyplývá z implementace založené na znamenkovém čtyřbajtovém integeru, ve kterém se drží časový úsek jako počet milisekund.
Algoritmus je možné modifikovat s požitím typu LONGTIME, který je definován v knihovně TimeLib. Tento typ je struktura, kde je počet dní oddělen od času (0-24h), takže dokáže vyjádřit dlouhé časové intervaly.
Upravený algoritmus:
PROGRAM prgUpTimeTest VAR upTimeStart : DATE_AND_TIME; upTime : LONGTIME; END_VAR IF System_S.S2_3 OR System_S.S2_4 THEN upTimeStart := GetDateTime(); END_IF; upTime := SUB_DT_DT_LONG(GetDateTime(), upTimeStart); END_PROGRAM
Děkuji za radu. Chodí to.
Ve Webmakeru je to potřeba trochu zašantit, ale účel to plní.
Tento dotaz je vyřešený.