Převod datumu a času

Převod datumu a času

Příspěvekod -[PM]- » stř 29. dub 2009 13:57:12

Zdravim,

mám za úkol nastavovat datum a čas v Amití stanici z dotykového displaye, který komunikuje přes ModBus. Datum a čas je v Amitu zpracováván jako počet vteřin on půlnoci 1.1.1980. Display ovšem (podle toho co jsem zatim vyzkoumal) tento formát neumí a proto musím provést nějaký převod. Samozřejmostí je zachování přestupných roků. Neřešil už tu někdo podobný problém?

Předpokládám že celý problém řeší více, či méně komplikovaná matematická rovnice. Nejlepší by asi byl obousměrný algoritmus, kde na jedné straně stojí vteřiny od 1.1.1980 a na druhé straně je 6 čísel - hodiny, minuty, vteřiny, den, měsíc, rok.
Snažil jsem se záležitost gůglit... nic moc o tom napsáno není, maximálně tak problém Y2K...

díky za rady | kousky kódu...
_____________________________________________________________________________________
||| maca-mar.cz ||| skype: petrmilos ||| ICQ# 326013373 |||
Uživatelský avatar
-[PM]-
 
Příspěvky: 4
Registrován: pon 25. srp 2008 10:28:19
Bydliště: Jindřichův Hradec

Re: Převod datumu a času

Příspěvekod riha » čtv 30. dub 2009 11:10:20

Dobrý den,
celý převod lze řešit na straně řídicího systému AMiT. Do řídicího systému zašlete prostřednictvím šesti modbus registrů požadovaný čas. Tento převedete pomocí modulů StrFormat na řetězec. Řetězec poté převedete pomocí modulu StrParse na čas, v podobě počet vteřin od 1. 1. 1980. Celý kód by vypadal následovně:

Kód: Vybrat vše
//Převod na řetězec
StrFormat Time_Str, 0, Index_out, "", 11, -1, -1, -1, CAS[0,0], @StrFormat
StrFormat Time_Str, Index_out, Index_out, ".", 11, -1, -1, -1, CAS[1,0], @StrFormat
StrFormat Time_Str, Index_out, Index_out, ".", 11, -1, -1, -1, CAS[2,0], @StrFormat
StrFormat Time_Str, Index_out, Index_out, " ", 11, -1, -1, -1, CAS[3,0], @StrFormat
StrFormat Time_Str, Index_out, Index_out, ":", 11, -1, -1, -1, CAS[4,0], @StrFormat
StrFormat Time_Str, Index_out, Index_out, ":", 11, -1, -1, -1, CAS[5,0], @StrFormat

//Převod na čas v Db-Net formátu
StrParse Time_Str, 0, NONE, "", 56, -1, "", DBNetTime, @StrParse, 0.000


Pro zápis systémového času lze použít modul SetTime. Čas budete zapisovat pouze v případě, že je požadován zápis nové hodnoty. Výsledný kód by vypadal následovně:

Kód: Vybrat vše
//Kontrola změny
VarWStat CAS, @Cas_zmena, 0

//Zápis času do řídicího systému
If @Cas_zmena
   SetTime DBNetTime
EndIf


Co se týká získání systémového času z řídicího systému ve složkách, pro tyto účely lze použít modul GetTime.
Pokud potřebujete převést jakoukoliv jinou hodnotu, zadanou jako LONG proměnná (např časové plány, atd.) ve formátu počet vteřin od 1. 1. 1980 na složky času, lze využít modul ParseTime.
Zbyněk Říha
Technická podpora (support@amit.cz)
AMiT spol. s r.o.
Uživatelský avatar
riha
 
Příspěvky: 376
Registrován: čtv 10. dub 2008 12:46:00


Zpět na Algoritmy

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník

cron