Однонаправленный шлюз физически лишён обратного канала: приёмная сторона не может подтвердить ни одного байта. ИСТОК воспроизводит эталонный профиль промышленной телеметрии по пяти протоколам одновременно, регистрирует доставку на выходе и формирует машиночитаемое заключение — без единой ручной операции и без подтверждений прикладного уровня.
Третьего состояния нет, и узнать о нём изнутри канала нечем. Обычные средства нагрузочного тестирования опираются на подтверждения — здесь они недоступны по определению.
Отсутствие ответа не отличить от отсутствия данных. Пропавший кадр телеметрии выглядит как штатная пауза в опросе оборудования.
Дошедший, но повреждённый кадр опаснее утраченного: он попадает в корпоративный контур как достоверное значение с производственной линии.
Показатели, переписанные оператором в конце многочасового прогона, невозможно перепроверить и нечем защитить перед заказчиком.
Генератор формирует детерминированный поток с контрольными суммами и метками времени источника. Верификатор принимает, декодирует, проверяет и считает. Сходимость двух независимых наборов счётчиков и есть доказательство доставки.
Каждый кадр телеметрии несёт циклический счётчик цикла. Разрыв последовательности даёт точное число утраченных кадров прямо на приёмной стороне — не требуя ни одного байта от источника. Это работает именно там, где не работает квитирование.
SHA-256 на полезную нагрузку потоковых протоколов и CRC16 на регистровый кадр телеметрии. Искажённое учитывается отдельно от утраченного: это разные режимы отказа шлюза, и смешивать их в одном проценте — значит скрыть оба.
Перцентили p50, p95, p99 и p99.9 по скользящему окну. Комплекс сам проверяет синхронность часов сторон и помечает результат признаком достоверности — недостоверная задержка не попадёт в отчёт под видом измеренной.
При одном и том же зерне последовательность значений повторяется побитово. Прогон можно воспроизвести на другой площадке и сравнить результаты, а не сопоставлять два разных потока.
Роль каждой стороны настраивается под схему подключения шлюза: инициатором обмена может выступать как комплекс, так и само Изделие.
| Протокол | Роль генератора | Роль верификатора | Модель данных | Эндпоинт |
|---|---|---|---|---|
| MQTT | издатель, QoS настраивается | подписчик | сообщение с SHA-256 | /test/{batch,stream,large} |
| TCP | клиент, поток кадров | слушатель | сообщение с SHA-256 | /test/tcp/… |
| Modbus TCP | ведомый или ведущий | ведущий или ведомый | кадр станка, CRC16 | /test/modbus/industrial |
| OPC UA | сервер, публикация узлов | клиент-подписчик | кадр станка, CRC16 | /test/opcua/industrial |
| SFTP | клиент, загрузка файлов | чтение landing-каталога | файл | /test/sftp/{batch,stream} |
Адресация Modbus и идентификаторы узлов OPC UA берутся из единой карты тегов. Комплекс выгружает готовые описания адресного пространства для настройки шлюза, снимая самый частый источник ошибок при вводе стенда в работу.
Равномерная отправка с заданной частотой. Имитация непрерывного потока показаний.
N задач-отправителей делят заданный объём. Предельная пропускная способность при конкуренции.
Пакеты от 5 до 100 МБ. Полоса пропускания и поведение на предельном размере кадра.
N станков × M индикаторов × F Гц. Эталонный профиль АСУ ТП по Modbus TCP и OPC UA.
Все протоколы одновременно, каждый со своими параметрами. Совокупная нагрузка и разделение полосы.
Запуск, останов и съём показателей — HTTP-запросами. Ручных операций на стенде нет, прогон воспроизводим.
Профиль суточного прогона целиком: один запрос, пять протоколов, 200 имитируемых станков. Ограничение скорости построено на маркерной корзине с единичным всплеском — накопление маркеров исключено, поэтому профиль остаётся равномерным, а измеренная задержка отражает поведение шлюза, а не буферизацию на стороне комплекса.
| Параметр | Единица | Диапазон | Семантика |
|---|---|---|---|
| packet_size | байт | 1 … 100 МБ | целевой размер полезной нагрузки, добивка пробелами |
| thread_count | шт. | от 1 | параллельные задачи-отправители |
| rate_limit | сообщ./с | от 1 | суммарная скорость по всем задачам; 0 — без ограничения |
| machines | шт. | от 1 | имитируемых единиц оборудования |
| indicators_per_machine | шт. | от 1 | значений в кадре станка |
| frequency_hz | Гц | от 1 | частота обновления кадра каждой единицы |
| duration | с | 1 … ∞ | продолжительность прогона; 0 — до команды останова |
Задержка считается по метке времени источника. При однонаправленном канале двусторонняя синхронизация невозможна, и расхождение часов серверов прямо искажает результат. Комплекс отслеживает это сам: считает физически невозможные отрицательные значения, оценивает смещение шкал и присваивает результату признак достоверности.
К признаку прилагается предписанное действие оператора. Показатели своевременности принимаются к рассмотрению только при значении ACCURATE — это правило заложено в сам отчёт, а не в добросовестность того, кто его читает.
Профиль /test/combined, продолжительность 86 400 секунд, 200 имитируемых станков. Показатели сняты автоматически, без участия оператора.
Результат многочасового прогона не должен зависеть ни от внимательности оператора, ни от того, переживёт ли служба последнюю минуту испытания.
Файл и стандартный поток одновременно, глубина хранения настраивается. Посообщенная запись исключена принципиально: при тысячах сообщений в секунду она искажает само измерение, поэтому регистрация ведётся агрегатами.
288 снимков за сутки плюс файл последнего состояния для внешнего мониторинга. Итог прогона не теряется при аварийном завершении и не требует присутствия человека в момент окончания теста.
Сквозной счётчик отказов транспортного уровня отделяет потери, вызванные шлюзом, от потерь, вызванных сетью стенда или конфигурацией.
Счётчики доставки и целостности, объём раздельно по кадру и полезной нагрузке, гистограммы задержки, разрывы последовательности телеметрии — с разбивкой по каждому протоколу.
| Параметр | Значение |
|---|---|
| Целевая платформа | Astra Linux SE, x86_64 — статическая сборка musl |
| Реализация | Rust, две независимые службы без общего состояния |
| Поставка | бинарники или контейнеры, конфигурация в YAML с переопределением из окружения |
| Контроль готовности | /health, /ready — состояние каждого транспорта до начала испытаний |
| Съём результатов | /stats — JSON, /metrics — Prometheus, снимки на диск |
| Ресурсы | штатный профиль на 200 станков — единицы процентов CPU на типовом сервере стенда |
ИСТОК превращает приёмку однонаправленного шлюза из акта доверия в измерение: пять протоколов под нагрузкой одновременно, полнота доставки без обратного канала, целостность двумя независимыми механизмами и отчёт, который сам отмечает границы собственной достоверности.
Показ проводится по запросу: испытательный комплекс разворачивается в контуре заказчика, публичного демо у него нет.