frolov_evgeny
Гость
|
|
« : 24.08.2010, 08:23:34 » |
|
День добрый! Подскажите, пожалуйста, начинающему программисту как рассчитать 16-битный адрес в запросе архива ТСРВ-010М. В документации для часового архива написано:
Adr = StartAdr + ((AbsDay ·24 + H) mod ArchiveSize) · RecordSize AbsDay = (Y - 1) ·365 + ((Y - 1) div 4) + DayInYear DayInYear = Days[M-1] + D + (M>2)LeapYear LeapYear = (Y mod 4 == 0)(Y mod 100 != 0) + (Y mod 400 == 0) Days[] = {0,31,59,90,120,151,181,212,243,273,304,334}
где ArchiveSize – размер архива (часового - 1428 записи) RecordSize – размер записи (часовой - 42 байта) StartAdr – адрес начала массива записей (часового - 2048 (0х0800)) H (0-23), D (1-31) ,M (1-12), Y (0-99) – час, день, месяц, год записи; mod - возвращает остаток от деления; div –возвращает результат деления нацело.
Для примера берем сегодняшнюю дату - 24.08.2010 11 часов утра, программа "Монитор Взлет ЭМУ" выдает запрос часового архива в виде:
00 00 30 08 83 DE 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 9B
То есть адрес в запросе = 0х83DE.
Если можно - напишите по шагам с подстановкой конкретных чисел в каждой строке алгоритма расчета, что/куда, чтобы в конце получилось 0х83DE.
Спасибо!
|