Modbus
Назначениие
Modbus— Широко применяемый в промышленности протокол, работающий по принципу «клиент-сервер».
Modbus может использоваться для передачи данных через последовательные линии связи RS-485, RS-422, RS-232, а также сети TCP/IP.
Принцип действия
Принцип действия Modbus рассмотрим на примере линии RS-485.
В основе интерфейса RS-485 лежит принцип дифференциальной передачи одного сигнала по двум проводам. При этом, по одному проводу идет оригинальный сигнал, а по другому — его инверсная копия. То есть, если на одном проводе «1», то на другом «0» и наоборот. Таким образом, между двумя проводами витой пары всегда есть разность потенциалов: при «1» она положительна, при «0» — отрицательна. Именно этой разностью потенциалов и передается сигнал. Такой способ передачи обеспечивает высокую устойчивость к синфазной помехе, т.е, к помехе, действующую на оба провода линии одинаково. К примеру, электромагнитная волна, проходя через участок линии связи, наводит в обоих проводах потенциал. Если сигнал передается потенциалом в одном проводе относительно общего, как в RS-232, то наводка на этот провод может исказить сигнал относительно хорошо поглощающего наводки общего («земли»). Кроме того, на сопротивлении длинного общего провода будет падать разность потенциалов земель — дополнительный источник искажений. А при дифференциальной передаче искажения не происходит, поскольку, если два провода пролегают близко друг к другу, да еще перевиты, то наводка на оба провода одинакова. Потенциал в обоих одинаково нагруженных проводах изменяется одинаково, при этом информативная разность потенциалов остается без изменений.
Варианты реализации
Есть несколько вариантов реализации протокола Modbus:
- — на известной микросхеме MAX-ADM485 без изоляции, развязки, изолированного источника питания.
- — на микросхеме ADM2587, ADM2483 и пр.
Требования к разводке печатной платы
Разводить печатную плату необходимо таким образом, чтобы микросхема была расположена подальше от точных и измерительных цепей, узлов и т.п., поскольку на обычную сигнальную линию, проложенную вдоль силовых установок и мощных потребителей, воздействует огромное количество наводок и помех, котрый может достигать нескольких тысяч вольт.
Адрес ведомого устройства
Адрес ведомого устройства (ID) может иметь значения от 1 до 247. Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство, адреса в диапазоне 248…255 — зарезервированы.
Коды функций
Коды функций делятся на Публичные коды, описанные в стандарте MODBUS-IDA. Их список включает уже назначенные и используемые коды, а также коды для будущего использования:
- User-Defined Function Codes (65-72, 100-110) — коды, которые могут использоваться компаниями для собственных функций, и не описаны в спецификации;
- Reserved Function Codes (9, 10, 13, 14, 41, 42, 43, 90, 91, 125, 126 и 127) — зарезервированы коды, которые не доступны для общего использования.
- (0x02) — чтение значений из нескольких дискретных входов (Read Discrete Inputs).
- (0x03) — чтение значений из нескольких регистров хранения (Read Holding Registers).
- (0x04) — чтение значений из нескольких регистров ввода (Read Input Registers).
- (0x05) — запись значения одного флага (Force Single Coil).
- (0x06) — запись значения в один регистр хранения (Preset Single Register).
- (0x07) — Чтение сигналов состояния (Read Exception Status)
- (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils)
- (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers)
- (0x16) — запись в один регистр хранения с использованием маски «И» и маски «ИЛИ» (Mask Write Register).
- (0x18) — Чтение данных из очереди (Read FIFO Queue)
- (0x14) — Чтение из файла (Read File Record)
- (0x15) — Запись в файл (Write File Record)
- (0x08) — Диагностика (Diagnostic)
- (0x0B) — Чтение счетчика событий (Get Com Event Counter)
- (0x0C) — Чтение журнала событий (Get Com Event Log)
- (0x11) — Чтение информации об устройстве (Report Slave ID)
- (0x2B) — Encapsulated Interface Transport
Обработка ошибок
- Ведущий отправляет запрос к Ведомому, в котором в поле «код функции» указывает ему на необходимое действие.
- Байты данных содержат информацию, необходимую для выполнения данной функции.
- Ведомый, в случае удачного выполнения этой функции, повторяет код функции в ответе.
- При возникновении ошибки, код функции в ответе модифицируется — старший бит выставляется в 1.
- В байтах данных передается причина ошибки. Например при исполнении Ведомым функции 0x0F возникла ошибка, тогда он ответит Ведущему полем функции равным 0x8F.
- В дополнении к изменению кода функции, Ведомый размещает в поле данных уникальный код, который указывает на тип и причину ошибки.