Оглавление
2.1 ModBus Master / Slaves protocol principle
2.4 Master / Slaves State Diagrams
2.5 The two serial Transmission Modes
2.5.1 RTU Transmission Mode. Структура бит в одном символе.
2.5.1.1 ModBus Message RTU Framing. Задержки между пакетами символов.
4 Installation and Documentation
6.1 Appendix A - Management of Serial Line Diagnostic Counters
6.1.2 Counters Management Diagram
Перевод интересных частей ModBus over serial line.V1.0. Оставил названия и нумерацию для совместимости с источником — смотреть медитировать на диаграммах, они там очень полезны.
ModBus это мастер/слейв протокол. Только один мастер может быть подсоединен к шине в одно и тоже время, и один или несколько слейвов (максимум 247) несколькими последовательными шинами. ModBus соединение всегда запускается мастером. Слейв никогда не передает данные без того чтобы предварительно принять запрос мастера. Слей никогда не общается с другим слейвом. Мастер запускает только ModBus обмен в одно и тоже время.
Мастер посылает запрос к слейву в двух режимах:
Одноадресный режим, в не мастер адресует одиночный слейв. После приема и обработки запроса, слейв возвращает сообщение «ответ» мастеру. В этом режиме, обмен содержит 2 сообщения: запрос от мастера и ответ от слейва. Каждый слейв обязан иметь уникальный адрес 1..247.
Широковещательный режим: мастер может посылать запрос всем слейвам. Ответ на такой запрос не возвращается. Широковещательные запросы это всегда запросы на запись. Все устройства обязаны поддерживать широковещательную функцию записи. Адрес ноль зарезервирован как идентификатор широковещательного запроса.
Адресное пространство модбаса состоит из 256 различных адресов
0 адрес широковещательных запросов
1..247 индивидуальные адреса слейвов
248..255 зарезервировано
ModBus протокол определяется блоком данных протокола PDU Protocol Data Unit независимым от основных слоев связи.
[код функции][данные]
Эта пара несет в себе все необходимое чтобы правильно понять что заданные тут у нас есть, правильно их извлечь. Но кроме извлечения данных нужно их еще и успешно получить или принять. Для этого, т.е. для отображение протокола на конкретную шину или сеть, добавляют еще пару полей в этот набор и теперь мы уже имеем:
[адрес][код функции][данные][КС]
Адрес был описан ранее.
Код нужен обработчику чтобы знать по каким законам хранятся/извлекаются данные.
Контрольная сумма чтобы заметить ошибки в пакете и отбросить неверные данные, не пустить их в работу.
Канальный уровень данных ModBus состоит из двух отдельных подуровней:
мастер / слейв протокол
режим передачи
В следующем разделе описана работа уровня мастер / слейв без зависимости от второго — передающего.
Диаграмму смотреть в исходнике.
Следующий рисунок объясняет поведение мастера.
Некоторые пояснения к диаграмме.
Когда одноадресный запрос послан к слейву, мастер переходит в состояние «ожидание ответа», и стартует «тайм аут запроса». Этот таймаут предотвращает мастер от бесконечного нахождении в состоянии «ожидание ответа». Значение таймаута зависит от приложения.
Когда ответ принят, мастер проверяет ответ перед обработкой данных. Проверка может завершиться ошибкой, например ответ от неожиданного слейва или ошибка в принятом фрейме. В случае ответа принятого от неожиданного слейва, таймаут ответа сохраняется запущенным. В случае ошибки фрейма, может быть выполнена повторная попытка.
Если ответ не принят, а таймаут запроса истек, то генерится ошибка. Затем мастер идет в холостой режим, включая повторную попытку запроса. Максимальное количество повторных попыток зависит от установок мастера.
Когда широковещательный запрос послан в шину, ответ не вернется от слейвов. Тем не менее задержка мастера является ожидаемой чтобы позволить всем слейвам обработать запрос. Эта задержка называется «задержкой оборота». Следовательно мастер идет в состояние «ожидание задержки оборота» и остается в нем пока не вернется в состояние «вхолостую» до начала отправки следующего запроса.
В случае одноадресного запроса, таймаут этого запроса должен быть установлен такой длительности, чтобы слей мог успеть обработать запрос и вернуть ответ. В случае широковещательного запрос таймаут должен быть достаточен для обработки любым слейвом запроса и чтобы он после этого был способен принять еще один. Поэтому задержка оборота должна быть короче чем таймаут приема. Обычно задержка приема от одной до нескольких секунд на скорости 9600 bps, а задержка оборота от 100 до 200 ms.
Ошибки кадра состоит из:
Проверки четности применяемая для каждого символа (байта).
Проверка на избыточность применяется к целому кадру (это уже из байтов сложенные команды с метаданными и данными).
Пояснения к диаграмме.
В состоянии вхолостую не ожидает запросов. Это стартовое состояние после включения питания.
Когда запрос получен, подчиненное устройство проверяет пакет перед выполнением действия, запрошенного в пакете. Различные ошибки могут возникнуть: в формате, в обработке. В случае ошибки отчет должен быть послан мастеру.
Однажды запущенный запрос должен быть завершен, одноадресное сообщение требует чтобы ответ был сформирован и послан мастеру.
Если слейв обнаружил ошибку в принятом фрейме, отвечать мастеру не требуется.
Диагностические счетчики ModBus определены и должны управляться любым ведомым устройством для предоставления диагностической информации. Эти счетчики могут быть получены с использованием функции диагностики ModBus (см. Приложение A и спецификацию протокола приложения ModBus [1]).
Два режима передачи это RTU и ASCII. Эти режимы определяют как биты пакуются и конвертируются для передачи. RTU обязательный режим для всех modbus устройств. ASCII – опция.
RTU Remote Terminal Unit.
Основным преимуществом этого режима является то, что его более высокая плотность символов обеспечивает лучшую пропускную способность, чем режим ASCII для той же скорости передачи данных. Каждое сообщение должно передаваться непрерывным потоком символов.
Для повышения совместимости с другими устройствами рекомендуется поддерживать четность — нет. Но по умолчанию считается четность — четный.
Формат 11-и битный для каждого байта в режиме RTU.
[один старт бит][1-й бит данных][8-й бит данных (младший бит посылается первым)][1-стоп бит]
Четная четность требует других режимов которые также могут быть использованы. Для максимальной совместимости со сторонними продуктами если это нужно, рекомендуется использовать настройку - «нет учета четности». По умолчанию четность должна быть «четная».
Как символы передаются последовательно.
Каждый символ или байт посылается в таком порядке: младший бит данных (LSB)..старший бит данных(MSB).
[start][1][2][3][4][5][6][7][8][par][stop] – последовательность бит RTU режим
Устройство можно сконфигурировать в режиме чет, нечет, нет. Если реализовано «нет» добавляется один стоп бит заполняющий выбывший бит четности.
[start][1][2][3][4][5][6][7][8][stop][stop] – частный случай последовательности бит RTU режима, нет четности
А так выглядит кадр modbus rtu (частный случай фрейма)
[1 byte][1 byte][0 .. 252 byte][2 bytes]
Modbus сообщение помещается передающим устройством в кадр, точка начала и точка конца которого известны. Это позволяет устройству которое принимает новый кадр, знать когда сообщение начнется и закончится. Частичные (поврежденные, неполные) сообщения должны быть определены и должны быть помечены в результате как ошибочные.
В режиме RTU, кадры сообщений разделяются интервалами тишины с временем не менее 3.5 байта. В следующих разделах, это время называется «t3.5»
[t >= 3.5 char][frame1][t >= 3.5 char][frame2][t >= 3.5 char][frame3]
Входящее в кадр сообщение должно быть передано как непрерывный поток символов.
Если период тишины более чем 1.5 символов между двумя частями одного передаваемого байта, фрейм считается не завершенным и будет отброшен приемником.
[][][][][t <= 1.5 char][][][][][] - нормальный фрейм
[][][][][t > 1.5 char][][][][][] - фрейм испорчен
Реализация RTU драйвера приема может включать управление большинством прерываний по t3.5 и t1.5. С высокой скоростью передачи, приходит высокая загрузка процессора. Вследствие этого эти два времени должны соблюдаться, когда скорость передачи равна или ниже 19200 бод. Для скоростей выше 19200 бод, используется фиксированное значение: рекомендуется использовать значения:
0.750 ms для t1.5
1.750 ms для t3.5.
Следующий рисунок описывает диаграмму состояния режима передачи RTU. Мастер и слейв точки представлены тут.
Перемещение из состояния инициализации в холостое состояние необходимо уложить в промежуток t3.5
Состояние «вхолостую» - это нормальное состояние когда ни отправка ни прием не активны.
В RTU состояние «вхолостую» возникает если превышен таймаут тишины t3.5.
В холостом состоянии каждый зафиксированный байт будет считаться стартом кадра. Линия перейдет в активное состояние. Затем, конец кадра определяется когда нет более символа передаваемого в линии спустя t3.5.
После обнаружения конца кадра вычисление и проверка CRC завершаются. После этого адресное поле анализируется, чтобы определить, подходит ли кадр к устройству. Если нет, то кадр отбрасывается. Чтобы сократить время обработки приема, поле адреса может быть проанализировано, как только оно получено, без ожидания конца кадра. В этом случае CRC будет рассчитываться и проверяться только в том случае, если кадр адресован ведомому (включая широковещательный кадр).
RTU режим включает проверку ошибок фрейма основанную на CRC методу выполняемому по содержимому сообщения. CRC тест проверяет входящее сообщение. Не зависит от проверок четности (другой уровень протокола). CRC поле содержит 16 бит по два 8 битных байта. CRC поле дополняет сообщение как последнее поле в сообщении. Младший байт поля присоединяется первым, следуя за старшим. CRC старший байт является последним байтом который будет послан в сообщении.
CRC значение вычисляется посылающим устройством, которое добавляет CRC к сообщению. Принимающее устройство вычисляет CRC во время получения сообщения, и сравнивает вычисленное с реальным в принятом сообщении. Если два значения не равны, результат ошибочен.
…(не полный перевод)
Стандарт безопасности modbus последовательной шины основан на двух проверках ошибок:
проверка четности
проверка кадра
Обе проверки символьная и кадровая формируется в устройстве и добавляется в содержимое сообщения перед передачей. Устройство проверяет каждый символ и кадр входящего сообщения в процессе приема.
Мастер конфигурируется пользователем предопределяя таймаут перед сбросом передачи. Этот таймаут устанавливается таким, чтобы был достаточным для любого слейва принимающего нормально. Если слейв обнаруживает ошибку передачи, сообщение не будет принято в работу. Слейв не создаст ответ мастеру. Мастер выждет таймаут на получение ответа от слейва и программа мастера обработает ошибку. Заметим что сообщение адресующееся не существующему слейву, обработается так же.
Пользователь может сконфигурировать устройство для «чет» или «нечет» проверок, или «нет» (рекомендуется). Это определит как будет выставлен бит четности в каждом символе в мастере.
Если чет или нечет заданы, в одном бите будет содержаться инфа о четности байта данных — а именно число выставленных бит в этом байте — четное или нечетное.
Например (как мастер выставляет бит четности):
1100 0101
Тут 4 бита установлены. Если настройка «чет» - бит четности должен быть равен 0, если «не чет». Если используется нечетная четность, бит четности будет равен 1, что составляет нечетную величину (пять). То есть мастер выставляет бит четности так, чтобы при подсчете всех битов в байте + бите четности в приемнике, в норме, получился всегда четный ответ. Другими словами бит четности выставляется так что бы ОБЩЕЕ число выставленных битов сообщения (считается и бит четности наравне со всеми) соответствовало «договору».
Если проверка четности выключена, вместо бита четности дополнительный стоп бит.
По идее эта проверка позволяет быстро находить сбои в передаче, буквально за несколько байт все будет понятно, но на текущий момент этот тип проверки признан слабой защитой от сбоев и в современных протоколах «выводится из обращения».
В зависимости от режима передачи, RTU или ASCII, используются два вида проверки кадра.
В режиме RTU сообщения включают поле проверки ошибок, основанное на методе циклической избыточности (CRC). Поле CRC проверяет содержимое всего сообщения. Он применяется независимо от любого метода проверки четности, используемого для отдельных символов сообщения.
В режиме ASCII сообщения включают поле проверки ошибок, основанное на методе продольной проверки избыточности (LRC). Поле LRC проверяет содержимое сообщения, исключая начальную «двоеточие» и конечную пару CRLF. Он применяется независимо от любого метода проверки четности, используемого для отдельных символов сообщения.
Подробная информация о методах проверки ошибок содержится в предыдущих разделах.
Новое решение ModBus по последовательной линии должно реализовывать электрический интерфейс в соответствии со стандартом EIA / TIA-485 (также известным как стандарт RS485). Этот стандарт позволяет использовать двухточечные и многоточечные системы в «двухпроводной конфигурации». Кроме того, некоторые устройства могут реализовывать «четырехпроводный» интерфейс RS485.
Устройство также может реализовывать интерфейс RS232. В такой системе ModBus ведущее устройство и одно или несколько ведомых устройств обмениваются данными по пассивной последовательной линии.
В стандартной системе ModBus все устройства подключены (параллельно) к магистральному кабелю, состоящему из 3 проводников. Два из тех проводники (двухпроводная конфигурация) образуют сбалансированную витую пару, по которой передаются двунаправленные данные, как правило, со скоростью 9600 бит в секунду.
Каждое устройство может быть подключено (см. Рисунок 19):
либо непосредственно на магистральном кабеле, образуя гирляндную цепь,
либо на пассивном отводе с деривационным кабелем,
либо на активном отводе с конкретным кабелем
Требуется соблюдать скорость передачи 9600 бит/с и 19,2 кбит/с, а по умолчанию — 19,2. Другие также могут быть реализованы при желании. Каждая реализация должна поддерживать не более 1% ошибок при передаче, и нормально работать при 2% ошибок при приеме.
Взывают к совести поставщика оборудования и просят поставлять документацию для избавления клиентов от проблем.
Учат какую инфу нужно предоставить в документации. Полезный план если разрабатывать нормальную документацию..
Требования которым должно соответствовать modbus устройство. Оно должно быть:
адресным
широковещательным
с режимом передачи
соблюдающим скорость
знающим формат символа передаваемого
подходить по электрическим свойствам
Таблица кодов ошибок в ответ на диагностическую команду типа 0x08
Диаграммы в которых описано в каких случаях и как инкрементируются счетчики.
Проверка продольной избыточности… что это?
Канонический алгоритм создания CRC.
v1.