kerbal.ruвики сборки «Оператор»
Оператор / Вики / Связь и сеть

Диагностика связи

Почему пропало управление и не уходит наука: уровни управления, расчёт горизонта, где смотреть в сейве и логе, чек-лист от дешёвых проверок к дорогим.

Связь ломается тихо. Игра не пишет «твоя сеть настроена неправильно» — она просто перестаёт слушаться, и это выглядит как десяток разных багов: не идёт WASD, не ставится манёвр, серая кнопка «Передать». Причина при этом почти всегда одна.

Эта статья — про то, как за пять минут отличить «я за горизонтом» от «у меня сломана сеть», не гадая.

Один корень, три симптома

Что видишь На самом деле
WASD и Shift/Ctrl не работают, аппарат «залип» нет связи
«Управление заблокировано» при попытке поставить манёвр нет связи
Кнопка «Передать» серая или наука не уходит нет связи
Кнопки SAS работают, аппарат разворачивается по «за движением» связи всё ещё нет — это частичное управление

Последняя строка сбивает с толку сильнее всего. Аппарат реагирует на SAS — значит, он «живой», значит, дело не в связи? Нет. Именно так выглядит частичное управление.

Уровни управления

У каждого аппарата игра держит внутреннее состояние. В сохранении оно лежит открытым текстом:

CommNetVessel
{
    controlState = ProbePartial
    canComm = True
}
Значение Что означает Что работает
ProbeFull беспилотник со связью всё
ProbePartial беспилотник без связи только SAS: «за движением», «против движения», нормаль. Ни WASD, ни тяги, ни манёвров, ни передачи науки
Probe / None беспилотник без связи и без разрешения на частичное управление ничего
KerbalFull на борту экипаж всё, связь не нужна

Строка canComm = True не означает наличие связи. Она означает «на борту есть работающий передатчик» — то есть антенна цела, развёрнута и запитана. Аппарат может быть полностью исправен и при этом ни с кем не соединён.

Разницу между «нет управления совсем» и «частичное управление» задаёт настройка сложности:

CommNetParams { requireSignalForControl = False }

При False беспилотник без связи сохраняет SAS вместо того, чтобы окаменеть. Удобно — но именно из-за этого потеря связи перестаёт быть очевидной. Подробнее про эту и соседние галочки — в Настройки: сложность и моды.

Проверка первая: а видно ли станцию

Половина случаев — обычная геометрия. Аппарат ушёл на другую сторону планеты, и Кербин закрывает ЦУП.

Понадобятся широта, долгота и высота аппарата. Они есть в сейве в блоке VESSEL:

lat = 1.9953
lon = 3.5773
alt = 251283

Угловое расстояние между подспутниковой точкой и станцией:

cos d = sin(φ₁)·sin(φ₂) + cos(φ₁)·cos(φ₂)·cos(λ₁ − λ₂)

Предельный угол, на котором станция ещё видна из-за шара:

θ = arccos(R / r_станции) + arccos(R / r_аппарата)

где R — радиус тела, r — расстояние от центра. Для станции на поверхности первое слагаемое обнуляется, и остаётся просто arccos(R / (R + h)).

Кербин, R = 600 км, аппарат на 251 км:

θ = arccos(600 / 851,3) = 45,2°

Всё, что дальше 45° по дуге, — за горизонтом. Координаты ЦУПа: 0,1° ю. ш., 74,6° з. д.

Реальная граница чуть шире расчётной: две настройки сложности, occlusionMultiplierVac = 0,9 и occlusionMultiplierAtm = 0,75, уменьшают радиус тела при проверке видимости. Формула выше даёт консервативную оценку — если по ней станция видна, она видна точно.

Полезные числа для низких орбит Кербина:

Высота Радиус видимости Доля витка со связью с одной станцией
100 км 30,3° ~17 %
250 км 45,2° ~25 %
500 км 56,9° ~32 %
1000 км 67,7° ~38 %
2863 км (кеостационар) 80,0° постоянно над своей точкой

Отсюда очевидное: один спутник на низкой орбите со связью только через ЦУП имеет канал примерно четверть времени. Это не поломка, это физика. Лечится либо ожиданием, либо включением остальных наземных станций, либо созвездием (Созвездия и покрытие).

Период низкой орбиты — около 44 минут на 250 км, так что ждать в худшем случае минут двадцать.

Проверка вторая: сеть вообще настроена?

Если по геометрии станция видна, а связи нет — дело в конфигурации. Идём в сейв, в SCENARIO { name = CNCCommNetScenario }, и смотрим наземные станции. Каждой нужен блок Frequencies с частотой, совпадающей с частотой аппарата. Пустой список = станция глухая. Разбор этой ловушки и как её чинить — в Частоты и наземные станции.

Быстрая проверка по KSP.log, без ковыряния в сейве:

grep "CommNet Constellation" KSP.log | grep -v "extended/retracted"

Что должно быть в здоровой сети:

Stock CommNet Home 'Kerbin: KSC' added      ← станция зарегистрирована
Added g-station freq: 0                     ← и получила частоту
CommNet Vessel 'X' has the single freq 0 of 9036576 power   ← аппарат вещает

Есть первая строка, есть третья, нет второй — сеть настроена наполовину, и это гарантированное «нет связи» независимо от орбиты.

Проверка третья: железо аппарата

Реже, но случается.

Что смотреть Где в сейве Норма
Антенна развёрнута ModuleDeployableAntenna { deployState } EXTENDED
Передатчик работает ModuleDataTransmitter { canComm } True
Частота антенны CNConstellationAntennaModule { Frequency, InUse } совпадает со станцией, InUse = True
Электричество ресурс ElectricCharge не ноль

Электричество стоит проверять отдельно: передача науки стоит 12–24 ЭЧ на пакет, и мелкий зонд успевает высадить батарею в ноль посреди передачи. Симптом — передача начинается и замирает. См. Энергетика и тепло.

Отдельная ловушка: у зондовых ядер часто вообще нет антенны, а встроенные (тип INTERNAL) добивают на 5 км — этого хватает только на стыковку. Разбор железа — в Антенны: выбор и дальность.

Чек-лист

По возрастанию трудозатрат. Останавливайся на первом, что не сошлось.

  1. Индикатор в углу экрана. Пусто или красное — связи нет, дальше по списку. Зелёное — проблема не в связи.
  2. Карта, режим сети. Видно ли линию до станции? Через кого идёт цепочка?
  3. Геометрия. Посчитай угол до ЦУПа. Больше радиуса видимости — просто перемотай время.
  4. Лог. grep "Added g-station freq" KSP.log — если пусто, чини частоты станций (Частоты и наземные станции).
  5. Сейв, блок аппарата. controlState, deployState, Frequency, ЭЧ.
  6. Ангар. «Помощник антенн» покажет мощность и предельную дальность до постройки следующего аппарата — большинство проблем ловится ещё там.

Наука: что нужно, чтобы данные ушли

Передача — отдельная операция со своими условиями, и связь тут только первое из них.

  1. Канал до ЦУПа. Без него кнопка не работает вообще.
  2. Электричество на все пакеты.
  3. Коэффициент передачи прибора (xmitDataScalar). Единица — уходит вся ценность, 0,3 — только треть, остальное можно получить лишь физическим возвратом аппарата. Разбор по приборам — в Научные приборы сборки.
  4. Не передавалось раньше. Повторная передача того же эксперимента в той же ситуации даёт долю от прежней.

Собранные, но не переданные данные лежат прямо в сейве и никуда не деваются:

ScienceData
{
    subjectID = barometerScan@KerbinInSpaceHigh
    data = 12
    title = Данные атмосферного давления из космоса высоко над Кербином
}

Это удобно: потерял связь после сбора — данные целы, дождёшься витка и передашь. Как выжимать из этого максимум — в Наука: как собирать эффективно.

Кто на что влияет

Связь в «Операторе» трогают шесть модов, и путать их зоны ответственности — верный способ чинить не то.

Мод За что отвечает Может сломать связь?
CommNet Constellation частоты, наземные станции, их апгрейд да — главный подозреваемый
Antenna Helper расчёты в ангаре и круги покрытия на карте нет, только показывает
JX2 Antenna сверхдальние антенны под OPM нет, добавляет детали
Near Future Exploration фазированные решётки, микроретрансляторы, точечные антенны нет, добавляет детали
Science Relay передача науки с аппарата на аппарат нет, но добавляет свой путь передачи
kOS архивный том 0: требует связи — или нет, смотря по настройке нет; см. ниже

Про kOS стоит знать отдельно: в сейве есть параметр

kOSConnectivityParameters { connectivityHandler = PermitAllConnectivityManager }

PermitAllConnectivityManager — архив доступен всегда, связь не нужна. CommNetConnectivityManager — архив работает только при живом канале, и скрипт, пишущий лог в 0:, упадёт при потере связи. Если играешь со вторым вариантом, пиши телеметрию в локальный том 1: — подробности в Телеметрия: разбирать полёт по числам.

Science Relay заслуживает упоминания как обходной путь: он позволяет слить данные на другой свой аппарат, у которого связь есть. В логе это видно строкой [Science_Relay] Connected vessels detected for science transmission: N. Ноль — передавать некому, работает только обычный путь до ЦУПа.

Правило, которое экономит вечера: прежде чем винить мод, проверь геометрию и частоты. В нашей практике каждый случай «непонятного бага со связью» оказывался одним из этих двух.

Связанные статьи