Якщо ви розробляєте програмне забезпечення, яке торкається Link 16, рано чи пізно ви перестаєте говорити про хвилеформи й починаєте говорити про повідомлення. Хвилеформа дає вам часовий слот; J-серія — це те, що ви в нього вкладаєте. Каталог J-повідомлень — це та частина Link 16, яку інженерна команда насправді реалізує, тестує й налагоджує о третій ночі, коли трек не з'являється на картинці. Це польовий довідник по цьому каталогу: структура J-слова, серії, що мають значення, та патерни кодеків, які не дають протоколу отруїти вашу доменну модель.
1. що таке J-серія
J-серія — це бінарний каталог повідомлень фіксованого формату Link 16, визначений у MIL-STD-6016 та віддзеркалений у НАТО стандартом STANAG 5516. «TADIL-J» — це давніша американська назва того ж самого: Tactical Digital Information Link, J-серія — і ви досі побачите її в старіших специфікаціях інтерфейсів та програмній документації. Коли кажуть, що платформа «J-сумісна», мають на увазі, що вона вміє кодувати й декодувати цей каталог.
Каталог організований у серії, пронумеровані від J2 до J31, кожна з яких групує повідомлення за функцією: розташування, спостереження, керування інформацією, озброєння, керування, статус та вільний текст. Кожне повідомлення — це фіксований бітовий розклад: без префіксів довжини, без тегів полів, без самоопису. І кодер, і декодер тримають у коді карту полів MIL-STD-6016, а біти на проводі без неї нічого не означають. Ця жорсткість і є суттю: вона усуває накладні витрати на кожне повідомлення, що важливо, коли ваш транспортний бюджет — лише частка слота TDMA. Якщо ви вперше стикаєтесь із носієм під каталогом, наш роз'яснювач про тактичні лінії передачі даних Link 16 охоплює хвилеформу, тайминг TDMA та архітектуру мережі, на яких їде J-серія.
2. структура слова
Атомарна одиниця J-серії — це 70-бітне слово. Кожне слово несе 70 бітів вмісту повідомлення плюс парність та біти, які термінал додає для слота — але на рівні повідомлення ви мислите 70-бітними словами. J-повідомлення — це послідовність цих слів у визначеному порядку: початкове слово, нуль або більше розширювальних слів та нуль або більше слів продовження.
Початкове слово несе мітку повідомлення — пару полів, які ідентифікують повідомлення як, скажімо, J3.2 — плюс перший блок корисного навантаження. Перші п'ять бітів початкового слова — це формат слова та структура мітки; мітка (5-бітна Label та 3-бітна Sub-Label) повідомляє декодеру, яку серію та повідомлення він читає, а отже, як інтерпретувати кожен біт, що йде далі. Розширювальні слова несуть обов'язкові додаткові поля, які не вмістилися в початкове слово. Слова продовження несуть необов'язкові поля, кожне з яких позначене номером формату слова продовження (Continuation Word Format Number), щоб декодер знав, який необов'язковий блок він розбирає.
Слова пакуються в слоти TDMA згідно зі структурою пакування, що використовується — Standard Double Pulse, Packed-2 або Packed-4 — які обмінюють стійкість до завад на ємність, вміщуючи відповідно 3, 6 або 12 слів на слот. Запасні біти трапляються часто: там, де MIL-STD-6016 резервує поле для майбутнього використання, воно має передаватися як нуль та ігноруватися при прийомі. Неправильна обробка запасних значень та значень «no statement» — одне з найпоширеніших джерел хибних декодувань.
3. серія J2
Серія J2 — це PPLI — Precise Participant Location and Identification (точне визначення розташування та ідентифікація учасника) — і це серцебиття мережі Link 16. Кожен активний учасник періодично транслює власний PPLI, щоб усі інші знали, де він, хто він і що він може. PPLI — це те, як мережа самоорганізується: відносна навігація, ідентифікація та керування мережею — усе спирається на нього.
Повідомлення J2 розподілені за доменом платформи. J2.0 — це непрямий-інтерфейсний PPLI, що використовується підрозділами, ретрансльованими в мережу; J2.2 — повітряний PPLI; J2.3 — надводний (морський) PPLI; J2.5 — наземний PPLI. Кожне несе позицію, швидкість, ідентичність та поля можливостей учасника, відповідні його домену. Причина, чому кожен підрозділ транслює власний PPLI, а не відстежується іншими, — це цілісність: учасник є авторитетним джерелом власної позиції та ідентичності, що усуває цілий клас кореляційної неоднозначності. Коли підрозділ зникає з картинки, перше, що перевіряє оператор, — чи досі надходить його PPLI.
4. серія J3
Серія J3 несе спостереження — треки, що складають тактичну картину об'єктів, які не повідомляють власний PPLI. Там, де J2 — це «ось я», J3 — це «ось щось, що я бачу». Серія розподілена за доменом треку: J3.2 — повітряні треки, J3.3 — надводні (морські) треки, J3.5 — наземна точка та наземний трек. Існують також J3.0 (опорна точка), J3.1 (точка надзвичайної ситуації), J3.4 (підводний), J3.6 (космічний трек) та J3.7 (продукт радіоелектронної боротьби).
Кожне повідомлення спостереження несе номер треку, позицію, курс і швидкість, а також поля ідентичності та якості треку, що керують рішеннями оператора. Track Quality — це невелике ціле число, що підсумовує впевненість у позиції; поля ідентичності кодують стандартну таксономію — Pending, Unknown, Assumed Friend, Friend, Neutral, Suspect, Hostile — поряд із кодами платформи та активності. Тонкість декодування тут — відповідальність за звітність: два підрозділи можуть повідомляти про той самий фізичний об'єкт із різними номерами треків, і логіка кореляції та деконфлікту мережі, а не саме повідомлення J3, вирішує, який звіт перемагає.
Ключове розуміння: J-серія не має поняття «немає значення» поза явними кодами «no statement», вбудованими в кожне поле. Поле широти не може бути null — це завжди 25 бітів чогось. Якщо ваш кодек відображає курс «no statement» або повністю нульове запасне поле в реальний 0.0 у вашій доменній моделі, ви намалюєте трек, що сидить на екваторі й робить нуль вузлів. Розглядайте кодування «no statement» кожного поля як першокласний випадок, а не як думку наостанок.
5. серії J7/J9
Коли у вас є позиція (J2) та спостереження (J3), мережі потрібно керувати цією інформацією: це серія J7. J7.0 — це повідомлення вказівника / кореляції — воно дозволяє одному підрозділу вказати іншому підрозділу на конкретний трек або стверджувати, що два номери треків стосуються того самого об'єкта. J7.1 — це керування IFF/SIF, J7.2 — передача керування треком, а J7.3 — директива кореляції/декореляції. Серія J7 — це те, що перетворює купу незалежних звітів на узгоджену, деконфліктовану спільну картину.
Серія J9 — це командування та координація озброєння. J9.0 — це командне повідомлення — формальний механізм, яким керуючий підрозділ видає директиву керованому підрозділу. Саме тут Link 16 перестає бути пасивною широкомовною шиною й стає командним каналом: призначення, керування ураженням та супровідна координація проходять через J9 у поєднанні з серією керування J12. Інженерні команди, які ставляться до Link 16 як до телеметрії лише для читання, завжди дивуються, коли вперше мають ініціювати J9.0.
6. J10/J12/J13
Серія J10 — це координація та керування озброєнням. Вона несе статус ураження, спарювання озброєння з цілями, передачу ураження між підрозділами та звітування в польоті, яких потребує мережа ППО, щоб деконфліктувати стрільців. J10.2 (статус ураження) та J10.5 (директива по зброї) — це робочі конячки; помилка в них означає не зниклу іконку, а двоє підрозділів, що уражають ту саму загрозу, або жодного, хто її уражає.
Серія J12 — це керування: наведення, призначення завдань та сортування цілей. J12.0 — це повідомлення призначення завдання, що передає керованому літаку його задачу; J12.6 — це повідомлення сортування цілей. J12 — це серія, що робить Link 16 середовищем керування винищувачами, а не лише стрічкою ситуаційної обізнаності. Серія J13 — це статус платформи та системи — J13.2 повітряна платформа, J13.3 надводна платформа, J13.4 підводна, J13.5 наземна платформа — звітуючи про паливо, запас озброєння та готовність систем, щоб контролер знав не лише де підрозділ, а й що він іще може.
7. вільний текст та найдовший шлях
Серія J28 — це вільний текст та пов'язані повідомлення — J28.0 — це текстове повідомлення, що несе зрозумілі людині рядки, коли жодне структуроване повідомлення не підходить. Це аварійний вихід, і, як кожен аварійний вихід, ним зловживають; мережа, що покладається на вільний текст J28 для речей, які мали б бути структурованими J-повідомленнями, — це мережа, чия автоматизація здалася. J31 — це серія керування — J31.0 охоплює переключення ключів по радіо та господарські операції перерозподілу часових слотів, що підтримують криптографічну мережу здоровою.
Найдовший шлях у будь-якій реалізації J-серії — це не звичайні повідомлення; J2 та J3 добре протоптані. Це підводні камені. Порядок байтів (endianness) бітів усередині слова збиває майже кожну першу реалізацію: MIL-STD-6016 нумерує біти в певному порядку, і читання поля від старшого біта, коли стандарт пакує його від молодшого, дає правдоподібне на вигляд сміття. Невживані та зарезервовані поля — це друга пастка: стандарти еволюціонують, поля застарівають, і старий випромінювач може встановлювати біти, які суворий новий декодер відхиляє. Закладайте толерантність до зарезервованих бітів та строгість до запасних.
8. побудова кодека J-серії
Архітектура, що виживає в контакті, — це патерн двостекового адаптера. Ваша бойова система або застосунок C2 підтримує свою тактичну картину у внутрішній доменній моделі — треки, учасники, ураження — яка нічого не знає про Link 16. Шар протокольного адаптера сидить між цією моделлю та терміналом, перекладаючи доменну модель у слова J-серії на проводі й назад. Кардинальне правило: ніколи не дозволяйте протоколу протікати в доменну модель. Трек у вашому ядрі не має нести поле «J3.2 слово 2 біт 14»; він має нести позицію та ідентичність, а адаптер володіє відображенням. Та сама дисципліна застосовується до кожного протоколу, який ви містите, і це серце практичної сумісності НАТО — VMF, Link 22, тунельовані через JREAP J-серії всі стають адаптерами проти однієї канонічної моделі.
Тестуйте кодек проти векторів, а не проти живої мережі. MIL-STD-6016 та його тестові набори надають еталонні бітові патерни для кожного повідомлення; закодуйте відомий доменний об'єкт, порівняйте байти з вектором, потім декодуйте вектор назад та порівняйте об'єкт. Проганяйте круговий рейс кожного повідомлення, яке ви підтримуєте, і стверджуйте, що поля «no statement» переживають подорож як «no statement», а не згортаються в нуль. Коли ви додаєте підтримку нового J-повідомлення, ви додаєте адаптер та його вектори — ви не торкаєтесь доменної моделі чи решти стека. Саме ця ізоляція дозволяє вам поглинути блочне оновлення Link 16, замінивши один адаптер, замість регресійного тестування цілої бойової системи.