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