Dušan Ferbas Programování Mosaic 5. 6. 2023 12:41 2. 6. 2023 19:25

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

M.B. 2. 6. 2023 16:29

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
Dušan Ferbas 2. 6. 2023 19:25

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ý.