zaitcev>> Работа двигателей от интеграторов ускорения точнее рассчётной. Я давно подметил, что так на всех верхних ступенях делают. Для этого и орбиталовский HAPS и рокетлабовский Curie. В общем это не криворукость в НПОЛ.
Naib> Ну ок. Тогда почему расчётное время отключения по таймеру настолько больше потребного? Если бы было 90 секунд до автоматической отсечки - станция бы уцелела.
Ну, как программист с опытом разработки ответственных систем реального времени я догадываюсь, что там могло быть.
Ситуация, собственно, стандартная: по наступлению некоторых условий (включая таймер) нам надо совершить необратимое действие. Например, активировать какую-нибудь пиротехнику. Или выключить двигатель навсегда.
Тут есть давно известное решение: заводится переменная, в которой хранится предельное значение счётчика времени (от некоторого момента tx), при котором активация исполнительного устройства произойдёт обязательно. Управляющий процесс регулярно активируется — ну, скажем, 5 раз в секунду или какая там точность нужна, и по превышению временем этой величины включает исполнительную цепь.
Другой процесс параллельно оценивает фактическую ситуацию, и по мере обновления данных прописывает туда более правильные значения. Причём величину можно только уменьшать - это важно! Иначе возможны ложные срабатывания.
И вот теперь, откуда 127 секунд. Понятное дело, при виде этого числа у всех программистов шерсть на загривке дыбом встала. Это максимальное значение численного типа "байт со знаком".
Очевидно, оно и было использовано в качестве того самого начального заведомо избыточного значения, это стандартная практика. Вот только, после этого оно никак не изменялось. После сообщений о неработоспособности высотомера стало понятно, почему. Борт не знал, где он находится, и не мог ничего рассчитать.
Ну байт потому, что на всех распространнённых архитектурах для него гарантируется атомарность: байт либо записывается в память целиком, либо не попадает туда вообще. Для многобайтовых значений это не так. Обычная программистская паранойя.
Кстати, знаковый байт — по той же самой причине. Беззнаковый имеет максисальное значение 255, но с ним традиционно ходят разные программистские ошибки, долго объяснять. Поэтому знаковый с максимальным значением 127 надёжнее.
PS: Ну и я действительно удивлён насчёт интегратора ускорения. При выдаче большого импульса за малое время — это действительно весьма точный метод, все пользуются. Почему не было отсечки по ΔV?
