ModBus: Недостатки стандарта
Стандарт в своей основе был разработан в
1979 году с учётом потребностей и вычислительных возможностей того времени, и многие актуальные для современных промышленных сетей вопросы не были учтены
[6]. Необходимо отметить, что отсутствие перечисленных возможностей является следствием простоты протокола, которая облегчает его изучение и ускоряет внедрение.
1. Стандарт специфицирует метод передачи только двух
типов данных[7]. Отсутствие чёткого указания в стандарте привело к тому, что с другими типами данных сторонние производители MODBUS-решений поступали по своему усмотрению. Различие мнений производителей оборудования в этом вопросе не позволило впоследствии сделать уточнения в официальном документе: это вызвало бы всплеск недовольства производителей несогласных с предлагавшимися поправками стандарта и возможную войну форматов.
В каком протоколе или стандарте этого нет (войны форматов)?
2. Стандарт не регламентирует начальную
инициализацию системы. Назначение сетевых адресов и прописывание в системе параметров каждого конкретного устройства выполняются вручную на этапе адаптации и программирования системы.
В последующих протоколах решено надстройкой выше уровнем, но транспортный уровень остался Modbus с перестановкой бит для несовместимости
3. Не предусмотрена передача сообщений по инициативе подчинённого устройства (прерываний). Ведущее устройство должно периодически опрашивать ведомые.
Единственная гадость в Modbus RTU при использовании одной линии UART.Совсем не значится в Modbus TCP, т.к. контроллер может одновременно являться и ведущим и ведомым с помощью нескольких одновременных TCP соединений или такого понятия как шлюз.
Тот-же HTTP, как и множество других протоколов и стандартов имеет аналогичные проблемы.
4. Длина запроса ограничена, а данные могут быть запрошены только из последовательно расположенных регистров. Это увеличивает задержки и накладные расходы при использовании сети, так как для получения данных из регистров, расположенных далеко друг от друга в адресном пространстве, мастер должен либо запрашивать ненужные данные, либо использовать несколько запросов.
Тут ошибка в вики: Во первых длина запроса и ответа ограничена в любом стандарте протоколов. Во вторых:
Для произвольного запроса набора данных, в шахматном порядке, изначально предусмотрены специальные стандартные команды. Да – последовательность надо повторять каждый запрос.
5. Не предусмотрен способ, с помощью которого подчинённое устройство могло бы обнаружить потерю связи с ведущим.
Решается опросом счетчика или таймаутом запросов от ведущего, т.е. ‘пингом’ как и в других протоколах. Высосанный из пальца недостаток присущий большинству протоколов
Сравнение с AdHoc:
1. Стандарт специфицирует метод передачи только одного типа данных – байта.
2. Аналогично.
3. Аналогично.
4. Не имеет и не предусматривает произвольную выборку.
5. Аналогично. Решается ‘пингом’.
Итого: AdHoc проигрывает у Modbus по нескольким пунктам. За время существования Modbus было навыдумано много новых ‘стандартов’ не имеющих описываемых проблем, но они не прижились, кроме мелких эстетических модификаций позволяющих производителям устроить несовместимость с чужой продукцией…