Возможно применение протокола modbus в дуплексных и полудуплексных линиях связи.
Физическим уровнем протокола modbus как правило является линия стандарта RS422/RS485, однако при соединении точка-точка тот же формат команд может быть использован на любом последовательном асинхронном физическом интерфейсе, в том числе RS232.
Возможно применение протокола modbus в сетевой среде поверх транспортных протоколов UDP/TCP и IPX/SPX.
Во время обмена данными могут возникать ошибки при передаче данных и логические ошибки.
Ошибки первого типа обнаруживаются при помощи фреймов символов, контроля четности и циклической контрольной суммы CRC16. Результат передается в линию связи с младшего байта.
Для сообщений об ошибках второго типа устройства могут отсылать ответы, свидетельствующие об ошибочной ситуации. Признаком того, что ответ содержит сообщение об ошибке, является установленный старший бит кода команды.
Стандартная MODBUS сеть использует два метода контроля ошибок. Контроль паритета (even/odd) и контрольная сумма. Обе эти проверки генерируются в головном устройстве. Подчиненное устройство проверяет каждый байт и все сообщение в процессе приема.
Контрольная сумма LRC.
Метод LRC проверяет содержание сообщения исключая начальный символ ":" и пару CRLF.
LRC это 1 байт. LRC вычисляется передающим устройством и добавляется в конец сообщения. Принимающее устройство вычисляет LRC в процессе приема сообщения и сравнивает его с принятым от главного. Если есть несовпадение, то имеет место ошибка.
Алгоритм генерации LRC:
1. Сложить все байты сообщения, исключая стартовый символ ':' и конечные CRLF, складывая их так, чтобы перенос отбрасывался.
2. Отнять получившееся значение от числа FF(Hex) - это является первым дополнением.
3. Прибавить к получившемуся значению 1 - это второе дополнение.
Контрольная сумма CRC.
Контрольная сумма CRC состоит из двух байт. Контрольная сумма вычисляется передающим устройством и добавляется в конец сообщения. Принимающее устройство вычисляет контрольную сумму в процессе приема и сравнивает ее с полем CRC принятого сообщения.
Алгоритм генерации CRC:
1. 16-ти битовый регистр загружается числом FF hex (все 1), и используется далее как регистр CRC.
2. Первый байт сообщения складывается по ИСКЛЮЧАЮЩЕМУ ИЛИ с содержимым регистра CRC. Результат помещается в регистр CRC.
3. Регистр CRC сдвигается вправо (в направлении младшего бита) на 1 бит, старший бит заполняется 0.
4. (Если младший бит 0): Повторяется шаг 3 (сдвиг) (Если младший бит 1): Делается операция ИСКЛЮЧАЮЩЕЕ ИЛИ регистра CRC и полиномиального числа A001 hex.
5. Шаги 3 и 4 повторяются восемь раз.
6. Повторяются шаги со 2 по 5 для следующего сообщения. Это повторяется до тех пор пока все байты сообщения не будут обработаны.
7. Финальное содержание регистра CRC и есть контрольная сумма.