Форум АО "ВЗЛЕТ"

Приборы ЗАО "Взлет" => Отдел программистов => Тема начата: frolov_evgeny от 24.08.2010, 08:23:34



Название: Формирование адреса в запросе архива ТСРВ-010М
Отправлено: 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.

Спасибо!


Название: Re: Формирование адреса в запросе архива ТСРВ-010М
Отправлено: frolov_evgeny от 24.08.2010, 10:03:50
Разобрался. Отбой :)