PDA

Просмотр полной версии : Вопрос по чтению расширенных архивов


lers
25.07.2012, 05:42
Добрый день.

Если при чтении расширенных архивов воспользоваться формулой, которая приведена в документе Т10.06.59РД в пункте 5.3.2, считываются данные не за ту дату, для которой рассчитывался маркер.
Опытным путём выяснили, что данные считываются правильно если к полученному по формуле значению Т прибавить ещё 3. Скажите в чём может быть причина?

Вот код, которая применяется для расчёта маркера. Обратите внимание, что к значению t прибавляется ещё тройка. В этом случае данные считываются корректно.

int m = (dtRead.Month < 3) ? (dtRead.Month + 13) : (dtRead.Month + 1);
int y = (dtRead.Month < 3) ? (dtRead.Year - 1) : dtRead.Year;
int t = (int)(365.25F * y) + (int)(30.6F * m) + dtRead.Day - 694066 + 3;
int marker = t % 42;

gae
25.07.2012, 11:46
И программы ТЭКОН, и наши программы ЭВМ (например, Телемост, см. на сайте) в части чтения/записи расширенных архивов были написаны очень много лет назад, с тех пор ничего не менялось. Вопросов не возникало. Вы просто не учитываете принципы работы часовых архивов ТЭКОН, описанные в РЭ. Данные в расширенных архивах появляются только спустя 4 дня, до этого хранятся в простых часовых архивах, имеющих глубину 4 суток. По окончании каждых суток каждая страница простых часовых архивов "переталкивается" на бОльшую глубину, самая свежая очищается, а с последней страницы данные переносятся в расширенный архив. Таким образом, по маркеру текущей даты всегда будут храниться данные, сформированные 3 дня назад, вот откуда Ваша "эмпирическая тройка".