Проект «Сфера-82»: Цвет и слой - Станислав Миков
— Теологию оставим гуманитариям, Птицын. Запускай. И давай сразу договоримся: слово «сеть» мы пока вслух не произносим. От него у начальства начинаются галлюцинации про автоматизацию целых заводов. У нас сейчас настольная проверка — короткое кольцо на три машины, физический стык.
Липатов, устроившийся на краю соседнего стола, аккуратно провел линию по линейке в общей тетради.
— Вадим Сергеевич, давайте для протокола определим терминологию, — он стряхнул с бумаги грифельную пыль. — Я не могу написать в инструкции «физический стык». Мне нужно существительное, которое поймет условный техник в Челябинске. Что именно мы сейчас отправляем? Массив? Файл?
Кравец отвлекся от проводов и посмотрел на Липатова.
— Блок, Сергей Дмитриевич. Или пакет, если вам так больше нравится. Мы берем сто двадцать восемь байт из оперативной памяти ведущей машины, лепим к ним заголовок, адрес получателя и пинком отправляем в кабель.
— Пакет, — Липатов сделал аккуратную запись. — Принято. Номер передачи фиксируется?
— В первом байте. Иначе принимающая сторона не поймет, это новый пакет пришел, или мы старый повторяем из-за сбоя. Давай, Саша. Жми.
Птицын ударил по клавише.
ИЗОТ утробно хрюкнул шаговым двигателем, считывая программу в память. На долю секунды светодиоды на вертикальных макетных платах вспыхнули красным.
На экранах обеих бездисковых машин почти синхронно отпечаталась строка: «ПРИЕМ ОК. БЛОК 01. СУММА СОВПАЛА».
Саша шумно выдохнул и откинулся на спинку стула, победно глядя на Кравца.
— Прошло. Идеально прошло. А вы говорили — временные провода, наводки… Код всё вытягивает.
Кравец даже не улыбнулся. Он обошел стол, наклонился над правой машиной и потрогал пальцем розовый пучок МГТФ.
— Один удачный блок, Птицын, доказывает только то, что у нас есть контакт, — сухо произнес он. — Заряди цикл на тысячу пакетов. Подряд. Без пауз. И вот этот провод… — он подцепил ногтем петлю кабеля, — сдвинь ближе к блоку питания.
— Зачем искусственно ухудшать условия? — возмутился Саша, но руки уже потянулись к клавиатуре.
— Потому что идеальных условий не бывает. Там рядом с твоим кабелем пустят силовую шину или включат сварочный аппарат. Поехали.
Липатов тем временем расчертил страницу на ровные колонки.
— Вадим Сергеевич, я готовлю лист испытаний. Диктуйте графы.
— Номер попытки, длина линии, тип кабеля, результат, код ошибки. И оставьте широкое поле для примечаний. Нам туда писать придется больше, чем в основные графы.
Птицын запустил циклический тест. На центральном экране замелькали цифры отправленных пакетов: десять, двадцать, пятьдесят. Бездисковые машины ритмично выплевывали строки подтверждения. Светодиоды на платах слились в непрерывное красное свечение.
Двести. Триста.
На отметке триста сорок семь правая машина внезапно запнулась. Бег строк на ее экране замер. Затем дисплей моргнул и выдал: «ОШИБКА ПРИЕМА. КОД 04. СУММА НЕ СОВПАЛА». Левая машина продолжала исправно глотать пакеты, уйдя за четырехсотый номер.
Саша нахмурился, быстро прервал цикл комбинацией клавиш и придвинул к себе распечатку листинга.
— Код ноль четыре… Это потеря байта в теле пакета. Наверное, я неправильно инициализировал счетчик цикла приема. Регистр переполняется, и мы теряем байт. Сейчас поправлю, тут делов на две минуты.
Он потянулся к клавиатуре, чтобы внести правки, но Кравец мягко и непреклонно перехватил запястье Саши.
— Руки от клавиатуры.
— Я знаю, где ошибка! — горячо возразил Птицын. — Это мой код.
— Код тут ни при чем, Саша. Это физика.
Кравец повернул голову в сторону дальнего угла лаборатории, где за стеллажами с массивными приборами обитали аналоговики из бывшего КБ-2.
— Петр Иванович! — позвал он. — Будьте добры, принесите вашего зеленого друга. У нас тут цифровая гордость ушиблась о реальный мир.
Из-за стеллажей показался Петр Иванович. Он толкал перед собой приборную тележку, на которой громоздился массивный двухлучевой С1–64. Аппарат монотонно гудел, а по прямоугольному экрану с вытравленной координатной сеткой скользила тонкая зеленая линия развертки.
— Опять ваши нолики с единичками поссорились? — пробасил Петр Иванович. Он подкатил тележку вплотную к столу, вытянул из гнезда толстый коаксиальный щуп и привычным жестом прицепил земляной «крокодил» к латунной стойке правой машины.
— Саша винит программу, — хмыкнул Кравец.
Петр Иванович ничего не ответил. Он аккуратно коснулся щупом входного контакта на сетевой плате. На зеленом экране заметалась светящаяся линия. Ветеран покрутил ручки синхронизации и развертки. Линия стабилизировалась, превратившись в последовательность прямоугольных импульсов.
— Ну, смотри, программист, — Петр Иванович ткнул толстым, мозолистым пальцем в стекло осциллографа. — Видишь свой сигнал?
Птицын прищурился. Прямоугольники на экране выглядели странно. Их передние фронты завалились, превратившись в пологие скаты. А на верхней полке каждого импульса плясала мелкая, противная бахрома.
— Что это за мусор? — спросил Саша, забыв про код.
— Это, юноша, емкость кабеля, — наставительно произнес Петр Иванович. Он переложил щуп на левую машину, которая работала без сбоев. Импульсы там оказались чуть ровнее, а бахрома — меньше. — МГТФ — прекрасный провод. Для внутриблочного монтажа. А когда вы кидаете его соплей на три метра в неэкранированном виде, он работает как антенна. Плюс, вы положили петлю рядом с блоком питания. Трансформатор фонит. Наводка бьет по фронту сигнала, триггер на входе вашей платы не понимает, это единица или ноль, и перекидывается ложно. Вот тебе и потерянный байт.
Кравец коротко кивнул, ожидая именно такого вывода.
— Понимаешь, Саша? — он оперся руками о стол. — Ты сейчас полезешь в код, начнешь крутить задержки, добавишь лишние паузы, чтобы обойти программно то, что сломалось аппаратно. Код станет кривым, зависимым от тактовой частоты, а проблема никуда не денется. Завтра уборщица сдвинет кабель на десять сантиметров, и твоя программа снова даст сбой.
Липатов поднял голову от тетради.
— Отличный пример для инструкции, — отметил он, поправляя очки. — Симптом: несовпадение контрольной суммы. Действие техника?
— Проверить разъем и заменить линию связи, — отозвался Кравец. — В программу лезть в последнюю очередь.
Саша хмуро разглядывал экран осциллографа. Зеленый луч вычерчивал смазанный, дрожащий фронт.
Кравец вытащил из нагрудного кармана карандаш и покрутил его в пальцах.
— На станкостроительном в семьдесят восьмом случай был, — заговорил он. — Линия ЧПУ. От шкафа управления до станка метров пять кабеля. Ночная смена, станок ни с того ни с сего встает: ошибка концевика. Программисты там трое суток вокруг стойки плясали. Переписали алгоритм опроса, программные фильтры накрутили, задержки в циклы добавили. Запускают — час режет металл и снова сброс. Знаешь, что в итоге оказалось?
Птицын покачал головой.