.
Чтобы пользователь мог при необходимости легко определить текущее значение E time, FILE time или Unix time или изменить хранимую дату на основе этих значений - логично добавить в нулевой блок HClock поля ED ( 2 слова == Int32 ), E0 ( 3 слова == Int48 ) и LeapSeconds ( 1 слово == Int16 ), содержащие номер дня от начала эры, число секунд от начала эры и число високосных секунд UTC. Поля ED и E0 доступны для чтения и записи, поле LS - только для чтения.
000034 000036 - ED - Int32 - Номер дня от начала эры ( -1 == 31.12.-1 | 1 == 01.01.01 ) в диапазоне: -106751992 .. +106751992 или 0, если контроллер не поддерживает это поле или оно не должно измениться при записи. При записи игнорируется, если хотя бы одно из предыдущих полей даты ( год, месяц, день ) было записано.
000040 000042 000044 000046 - E0 - Int64 - Число секунд с момента начала эры ( -1 == 31.12.-1 23:59:59 | 0 == 01.01.01 00:00:00 | 1 == 01.01.01 00:00:01 ) в диапазоне: -9223372036854 .. +9223372036854 или 0x8000000000000000 ( 0x0000 0x0000 0x0000 0x8000 ), если контроллер не поддерживает это поле или оно не должно измениться при записи. При записи игнорируется, если хотя бы одно из предыдущих полей даты или времени ( кроме поля номера миллисекунды в текущей секунде ) было записано.
000050 - LS - Read Only - Величина високосной коррекции секунд в значении полей E0 и E6. Если контроллер рассчитывает значения E0 и E6 без учёта високосных секунд UTC - это поле должно быть нулевым.
...
Для полноты спецификации полезно также иметь 64-разрядное поле E6, содержащее число микросекунд с момента начала эры.
000052 000054 000056 000060 - E6 - Int64 - Число микросекунд с момента начала эры в диапазоне: -0x7FFFFFFFFFFF .. +0x7FFFFFFFFFFF или 0x8000000000000000 ( 0x0000 0x0000 0x0000 0x8000 ), если контроллер не поддерживает это поле или оно не должно измениться при записи. При записи игнорируется, если хотя бы одно из предыдущих полей даты или времени было записано.




Ответить с цитированием