За что здесь платят: три разные вещи под одним словом
«Перенести логику и уставки» звучит как одна работа, а внутри их три, и стоят они по-разному. Первая — алгоритм: что чем управляет, в каком порядке, при каких условиях блокируется. Вторая — уставки: температуры, давления, задержки, гистерезисы, пределы аварий, калибровки датчиков. Третья, самая неудобная, — неписаное поведение: ручные обходы, решения, принятые после давней аварии и оставшиеся навсегда, сезонные режимы, которые переключают руками при смене сезона.
Первая часть обычно читается из документации или из программы. Вторая разбросана по объекту. Третья не записана нигде и живёт в головах эксплуатации — и чем больше её приходится восстанавливать, тем выше цена. Стоимость самого контроллера с модулями сюда не входит: она считается по прайсу и разобрана отдельно в материале сколько стоит замена контроллера.
И сразу о том, чего перенос не значит: это не перезалив файла из старого контроллера в новый. Совпадение языков программирования у двух платформ ещё не делает проект переносимым: среда разработки, набор библиотечных блоков и внутренний формат проекта у платформ свои, и файл, выгруженный из одной среды, в другой не открывается. Алгоритм переносится по смыслу, а программа собирается заново — и это оплачиваемая работа, а не операция копирования.
Из чего складывается цена переноса
| Статья работы | Что входит | От чего зависит объём |
|---|---|---|
| Съём исходного состояния | выгрузка проекта, чтение уставок, архив событий, опрос эксплуатации | жив ли контроллер и открывается ли проект |
| Разбор алгоритма | что чем управляет, блокировки, аварийные цепи, сезонные режимы | сколько условий зашито в программу и нигде не описано |
| Пересборка под новую платформу | типы данных, таймеры, масштабирование аналоговых сигналов, библиотеки блоков | насколько близки среды разработки |
| Перенос уставок и калибровок | сбор значений из всех мест хранения и проверка каждого на новой платформе | в скольких местах уставки физически лежат |
| Экраны оператора и права доступа | мнемосхемы, список тревог, уровни доступа | была ли панель и переносится ли она как есть |
| Обмен со смежными устройствами | частотники, приборы учёта, датчики: адреса, регистры, порядок опроса | число протоколов и устройств на линии |
| Проверка на стенде | прогон режимов и имитация аварий до выезда на объект | можно ли собрать стенд с полевой частью |
| Документация по итогам | описание алгоритма и таблица уставок отдельным документом | сколько пришлось восстанавливать по факту |
Первые две строки — это не подготовка к работе, а сама работа. Именно они разводят два объекта с одинаковым щитом в разные сметы.
Развилка, которая задаёт объём: в каком виде сохранился оригинал
Проект программы есть и открывается
Самый дешёвый случай. Алгоритм читается целиком, а в коде и конфигурации видны структура уставок и значения по умолчанию: понятно, какие параметры вообще есть, как они называются и на что влияют. Рабочие значения, выставленные при наладке, всё равно собираются по объекту — где именно они лежат, разобрано ниже, — но собирают их не вслепую, а по готовому перечню. Оплачивается пересборка под новую платформу, перенос уставок и проверка — то есть работа с известным объёмом. Срок и сумма называются после того, как проект открыт, а не по телефону.
Проект есть, но открыть его нечем
Файлы лежат в архиве, но закрыты паролем прежнего подрядчика, либо среда разработки той версии не запускается на актуальной операционной системе. Формально исходники есть, практически — читать их нечем, и добавляется отдельный этап: поднять среду, найти совместимую версию, получить доступ. Иногда это решается быстро, иногда упирается в тупик и переводит объект в третий случай.
В контроллере работающая программа, а исходников нет
Здесь платят за неопределённость. Алгоритм восстанавливают по факту: читают то, что отдаёт контроллер, разбирают схемы щита, наблюдают поведение в разных режимах, опрашивают эксплуатацию. Заранее неизвестно, сколько скрытых условий было в старой программе, поэтому честная оценка на этом этапе — вилка, а не сумма. Пути, по которым сюда приходят, разобраны в материале контроллер сняли с производства: что делать.
Уставки лежат не там, где их ищут
Распространённое заблуждение — что уставки хранятся в программе. В программе лежат значения по умолчанию, а рабочие после наладки живут в других местах, и каждое такое место — отдельная работа при переносе:
- •Панель оператора: значения, которые вводили руками, часто хранятся в самой панели, а не в контроллере,
- •Энергонезависимая память контроллера: значения переменных, переживающих перезагрузку, живут в самом устройстве — в тексте программы остаётся только то, чем переменную объявили,
- •Параметры смежных устройств: разгон и торможение частотника, пределы регулятора, коэффициенты счётчика,
- •Настройки датчиков: у настраиваемых преобразователей диапазон измерения и тип выходного сигнала заданы на самом приборе, а у пассивных — термосопротивления, сухого контакта — тип входа и масштабирование лежат в контроллере,
- •Записи эксплуатации: журнал смен, отчёт наладчика, тетрадь механика — источник, о котором вспоминают последним,
- •Аварийные пороги в системе оповещения, если она заведена отдельно от контроллера.
Отсюда практическое следствие: таблица уставок должна выйти из работ отдельным документом — параметр, значение, единицы, где хранится, кто и когда менял. Она пригодится при следующей замене и при любой перенастройке, а без неё перенос придётся оплачивать заново.
Что удорожает перенос, а что удешевляет
- •Дороже: щит без маркировки — до разбора алгоритма идёт прозвонка, иначе связь «сигнал — переменная» восстанавливается наугад,
- •Дороже: много смежных устройств на линии обмена, особенно с разными протоколами — каждый адрес и порядок опроса проверяется отдельно,
- •Дороже: объект нельзя остановить даже на короткое окно — перенос дробится и проверяется по частям,
- •Дешевле: собранные заранее схемы, перечень сигналов и описание режимов словами эксплуатации,
- •Дешевле: отладка на стенде до выезда, чтобы на объекте осталась проверка, а не разработка,
- •Дешевле: не тащить в новую программу мёртвые ветки старой — их находят при разборе и согласуют к удалению письменно.
Отдельная тема — объект, который нельзя остановить. Как готовят переключение и короткие технологические окна, разобрано в материале замена контроллера без остановки производства: там про подготовку переключения, а здесь — про то, во что она обходится в смете переноса.
Как принимать перенос
Приёмка «запустилось и крутится» здесь не работает: расхождения вылезают на режимах, которые после пуска не проверяли. Проверять стоит так:
- •Таблица уставок сверяется построчно с исходной — не выборочно,
- •Аварии проверяются имитацией сигнала, а не ожиданием реального события,
- •Режимы прогоняются по списку, включая сезонный и ручной обход,
- •Поведение сравнивается с прежним на одинаковых входах: тот же сигнал — та же реакция,
- •Расхождения фиксируются письменно: часть окажется не ошибкой переноса, а неверной уставкой, которая жила в старой программе,
- •На руки передаются исходники, среда сборки, обновлённые схемы и описание алгоритма.
Последний пункт определяет цену следующей замены. Если исходники и таблица уставок остались у подрядчика, через несколько лет вы снова платите за восстановление логики по факту. У нас порядок обратный: новое устройство встаёт в тот же щит на ту же функцию, алгоритм и уставки приходят в него разбором старой системы, а не сочиняются с чистого листа, и по итогам исходники, обновлённые схемы и описание алгоритма остаются у заказчика. Перечень того, что отдаём, — на странице что мы делаем.
Частые вопросы
Перенос логики — это копирование файла программы?
Нет. Совпадение языков программирования само по себе не означает, что проект откроется в чужой среде: среда разработки, библиотечные блоки и внутренний формат проекта у платформ свои. Поэтому программу пересобирают: структуру и алгоритм берут из оригинала, а блоки, типы данных и обработку аналоговых сигналов делают заново под новую платформу.
Где искать уставки, если панели оператора на объекте нет?
В энергонезависимой памяти контроллера, в параметрах смежных устройств — частотников, регуляторов, приборов учёта — и в настройках датчиков: у настраиваемых преобразователей диапазон измерения задан на приборе, у пассивных датчиков масштабирование задано в контроллере. Часть уставок находится только опросом эксплуатации: люди помнят, какое значение выставили после прошлой аварии. Собранное сводят в таблицу и сверяют с поведением объекта, а не принимают на слово.
Что делать, если старый контроллер уже не включается?
Тогда исходное состояние снимают не с него, а вокруг него: схемы щита, маркировка кабелей, архив событий в диспетчеризации, отчёты наладчиков, записи в журнале смен. Восстановленный так алгоритм проверяют на объекте по режимам, а не по документу. Это самый дорогой из вариантов, и именно поэтому уставки имеет смысл выгружать заранее, пока контроллер жив.
Стоит ли заодно улучшить алгоритм, раз программа всё равно пересобирается?
Улучшения лучше делать отдельным шагом после того, как объект вышел на прежний режим. Если менять платформу и логику одновременно, при первом же отклонении будет непонятно, что его вызвало — перенос или правка. Список желаемых изменений собирают во время разбора алгоритма и вносят потом, по одному.
Как убедиться, что перенеслось всё?
Приёмка идёт сравнением поведения, а не проверкой «запустилось». Таблицу уставок сверяют построчно с исходной, аварии проверяют имитацией сигнала, а не ожиданием реального события, режимы прогоняют по списку — включая сезонные и ручной обход. Расхождения фиксируют письменно: часть из них окажется не ошибкой переноса, а неверной уставкой, которая жила в старой программе годами.
Можно ли посчитать перенос отдельно от замены железа?
Да, и считать его отдельной строкой правильнее: стоимость железа берётся из прайса, а перенос считается по объекту. Объём определяется тем, в каком виде сохранился оригинал, сколько уставок и в скольких местах они лежат, и сколько устройств обменивается с контроллером. Пока это не выяснено, названная сумма — угадывание.