Salve a tutti ;-)
Sono in possesso di alcuni archivi wlk trasferiti tramite ftp dal WS-2, cercando di capire quali informazioni contenesse, mi sono trovato davanti ad un dubbio che vorrei chiarirmi...
Premetto che ho soltanto i file wlk, non ho né la stazione meteo né il WS-2, quindi non posso fare prove per chiarirmi il dubbio in autonomia ;-)
Consultando le specifiche del file wlk si vede che all'offset 0x14 inizia l'array "dayIndex" contenente 32 elementi, l'elemento 0 non è valido, quindi il primo giorno del mese (valido) si trova all'offset 0x1A
quindi avremo per i vari giorni del mese..
dayIndex[01] = inizio all'offset 0x1A
dayIndex[02] = inizio all'offset 0x20
....
....
dayIndex[28] = inizio all'offset 0xBC
dayIndex[29] = inizio all'offset 0xC2
dayIndex[30] = inizio all'offset 0xC8
dayIndex[31] = inizio all'offset 0xCE
ogni dayIndex è formato da 6Byte,
i primi 2Byte corrispondono a recordsInDay (includes any daily summary records)
gli altri 4Byte sono startPos (The index (starting at 0) of the first daily summary record)
Il primo Daily Summary Record inizia sempre all'offset 0xD4
Prendendo come esempio un archivio wlk con dati campionati ogni 30 minuti, mi aspetterei di avere all'interno del file 2009-01.wlk (aperto con un editor di testi esadecimale), trasferito tramite ftp dal WS-2, tutti i dati relativi al mese di gennaio, invece...
all'offset 0x1A del file 2009-01.wlk inizia il dayIndex[01]
recordsInDay del giorno 1 contiene correttamente 0x32
0x32 in decimale equivale a 50, cioè:
1 DailySummary1 +
1 DailySummary2 +
48 "WeatherDataRecord" (24 ore campionati ogni 30 minuti = 48) =
1+1+48 = 50 = 0x32 records in un giorno
ogni records occupa 88 Byte = 0x58 Byte
quindi 0x32 records * 0x58 Byte = 0x1130 Byte occupati dai records del giorno 1
startPos del giorno 1 contiene correttamente 0x0000 perché stiamo analizzando il primo giorno del mese.
DailySummary1 del giorno X inizia all'offset startPos( giorno X ) * 0x58 + 0xD4
quindi per il giorno 1 DailySummary1 inizierà all'offset 0xD4
all'interno di DailySummary1 c'è dataSpan (total # of minutes accounted for by physical records for this day) che inizia all'offset (offset del DailySummary1 in esame)+0x02 ed occupa due byte
per il giorno 1 dataSpan inizia all'offset 0xD6 e contiene correttamente 0x05A0 = 1440 minuti (un giorno completo)
tutti i giorni all'interno dell'archivio 2009-01.wlk sono corretti, tranne l'ultimo...
infatti mi ritrovo con
dayIndex[31] che inizia all'offset 0xCE
recordsInDay = 0x31 (invece che 0x32) 1 DailySummary1 + 1 DailySummary2 + 47 (invece di 48) "WeatherDataRecord"
startPos = 0x05DC
DailySummary1 per il giorno 31 inizia all'offset 0x05DC * 0x58 + 0xD4 = 0x20474
dataSpan per il giorno 31 inizia all'offset 0x20476 e contiene 0x0582 = 1410 minuti...
in poche parole nei wlk che ho a disposizione (campionati ogni 30 minuti) manca sempre l'ultimo "WeatherDataRecord" dell'ultimo giorno del mese... sia per i mesi con 30 giorni che per quelli con 31
Sto tralasciando qualcosa... o c'è un errore nella generazione di questi file wlk?
Segnalibri