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