Modbus RTU (1032043), страница 2
Текст из файла (страница 2)
Для широковещательного режима зарезервирован адрес 0 (при использовании в команде этого адреса она принимается всеми устройствами сети).1MЗР2345678Битпаритета СтопбитРис. 2. Последовательность битов в режиме RTU(МЗР – младший значащий разряд; при отсутствии бита паритетана его место записывается второй стоп8бит)© СТА-ПРЕССwww.cta.ru91В ЗАПИСНУЮ КНИЖКУ ИНЖЕНЕРАТаблица 2Пример кодов Modbus RTU для модуля RealLab! типа NL816DIОБОЗНАЧЕНИЕРЕГИСТРАHEX8АДРЕСРЕГИСТРАЧТО ЧИТАЕТСЯИЛИ ЗАПИСЫВАЕТСЯКОД ФУНКЦИИЧТЕНИЯ РЕГИСТРАКОД ФУНКЦИИЗАПИСИ В РЕГИСТРПРИМЕЧАНИЕ0000100h 00hДискретный выход 001051 или 00000200h 01hДискретный выход 101051 или 01000100h 00hДискретный вход 002–1 или 01000200h 01hДискретный вход 102–1 или 01000300h 02hДискретный вход 202–1 или 01000400h 03hДискретный вход 302–1 или 01000500h 04hДискретный вход 402–1 или 01000600h 05hДискретный вход 502–1 или 01000700h 06hДискретный вход 602–1 или 01000800h 07hДискретный вход 702–1 или 01000900h 08hДискретный вход 802–1 или 01001000h 09hДискретный вход 902–1 или 01001100h 0AhДискретный вход 1002–1 или 01001200h 0BhДискретный вход 1102–1 или 01001300h 0ChДискретный вход 1202–1 или 01001400h 0DhДискретный вход 1302–1 или 01001500h 0EhДискретный вход 1402–1 или 01001600h 0FhДискретный вход 1502–1 или 04020100h C8hИмя модуля0310–4021300h D4hВерсия программы03––4051302h 00hАдрес модуля03060001h–00F7h(допустимый диапазон значений)4051402h 01hСкорость UART03060003h–000Ah(допустимый диапазон значений)4051802h 05hПротокол03060000h – ASCII,0001h – RTU4076903h 00hЗначение на выходе после включенияпитания модуля Power On Value003060000h–0003h(допустимый диапазон значений)Контроль чётности может отсутствовать вообще.
В этомслучае вместо бита паритета должен использоватьсявторой стоповый бит. Для обеспечения максимальнойсовместимости с другими продуктами рекомендуется использовать возможность замены бита паритета на второйстоповый бит.Ведомые устройства могут воспринимать любой из вариантов: чётный, нечётный паритет или его отсутствие.Структура сообщения Modbus RTU92Сообщения Modbus RTU передаются в виде кадров, длякаждого из которых известны начало и конец. Признаком начала кадра является пауза (тишина) продолжительностью не менее 3,5 шестнадцатеричных символов(14 бит). Кадр должен передаваться непрерывно.
Если припередаче кадра обнаруживается пауза продолжительностьюболее 1,5 шестнадцатеричных символов (6 бит), то считается, что кадр содержит ошибку и должен быть отклонёнпринимающим модулем. Эти величины пауз должны строго соблюдаться при скоростях ниже 19 200 бит/с, однакопри более высоких скоростях рекомендуется использоватьфиксированные значения паузы – 1,75 мс и 750 мкс соответственно.www.cta.ruКонтроль ошибокВ режиме RTU имеются два уровня контроля ошибок всообщении:● контроль паритета для каждого байта (опционно);● контроль кадра в целом с помощью CRCметода.CRCметод используется независимо от проверкипаритета.
Значение CRC устанавливается в ведущем устройстве перед передачей. При приёме сообщения вычисляется код CRC для всего сообщения и сравнивается с егозначением, указанным в поле CRC кадра. Если оба значения совпадают, считается, что сообщение не содержитошибки.Стартовые, стоповые биты и бит паритета в вычисленииCRC не участвуют.П РИКЛАДНОЙУРОВЕНЬПрикладной уровень Modbus RTU версии 1.1а описан в[3]. Он обеспечивает коммуникацию между устройствамитипа «ведущий–ведомый». Прикладной уровень являетсянезависимым от физического и канального, в частности,он может использовать протоколы Ethernet TCP/IP(Modbus TCP/IP), Modbus Plus (многомастерная сеть с передачей маркера), интерфейсы RS232, RS422, RS485,© СТА-ПРЕСССТА 4/2010В ЗАПИСНУЮ КНИЖКУ ИНЖЕНЕРАоптоволоконные линии, радиоканалы и другие физическиесреды для передачи сигналов.Прикладной уровень Modbus основан на запросах с помощью кодов функций.
Код функции указывает ведомомуустройству, какую операцию оно должно выполнить.При использовании протокола прикладного уровня сразличными протоколами транспортного и канальногоуровня сохраняется неизменным основной блок Modbusсообщения, включающий код функции и данные (этотблок называется PDU – protocol data unit – элемент данных протокола). К блоку PDU могут добавляться дополнительные поля при использовании его в различных промышленных сетях, и тогда он называется ADU –application data unit – элемент данных приложения.формацию, которую ведомое устройство использует, чтобывыполнить функцию, указанную в поле «Код функции».Поле данных может содержать значения состояний дискретных входов/выходов, адреса регистров, из которых надосчитывать (записывать) данные, количество байтов данных, ссылки на переменные, количество переменных, кодподфункций и т.п.Если ведомое устройство нормально выполнило принятую от ведущего функцию, то в ответе поле «Код функции»содержит ту же информацию, что и в запросе.
В противномслучае ведомый выдаёт код ошибки. В случае ошибки кодфункции в ответе равен коду функции в запросе, увеличенному на 128.Содержание поля данныхКоды функцийСтандартом Modbus предусмотрены три категории кодовфункций: установленные стандартом, задаваемые пользователем и зарезервированные.Коды функций являются числами в диапазоне от 1 до 127,причём коды в диапазоне от 65 до 72 и от 100 до 110 относятся к задаваемым пользователем функциям. Коды в диапазоне от 128 до 255 зарезервированы для пересылки кодовошибок в ответном сообщении.
Код 0 не используется.Коды ошибок используются ведомым устройством, чтобы определить, какое действие предпринять для их обработки. Значения кодов и их смысл описаны в стандарте наModbus RTU [3].Поле данных (рис. 1) в сообщении, посланном от ведущего устройства ведомому, содержит дополнительную инВ сообщении ведущего устройства ведомому поле данных содержит дополнительную информацию, необходимую для выполнения указанной функции. Например, есликод функции указывает, что необходимо считать данные изгруппы регистров устройства ввода (код функции 03 hex),то поле данных содержит адрес начального регистра и количество регистров.
Если ведущее устройство посылаеткоманду записи данных в группу регистров (код функции10 hex), то поле данных должно содержать адрес начального регистра, количество регистров, количество байтов данных и данные для записи в регистр.Конкретное содержание поля данных устанавливаетсястандартом для каждой функции отдельно.В некоторых сообщениях поле данных может иметь нулевую длину.93СТА 4/2010© СТА-ПРЕССwww.cta.ruВ ЗАПИСНУЮ КНИЖКУ ИНЖЕНЕРАADU для Modbus TCPИдентификатор обмена2 байтИдентификатор протокола2 байтДлина2 байтИдентификатор устройства1 байтMBAPКод функции1 байтДанные(переменной длины)DPUРис. 3. Часть фрейма Modbus TCP, встраиваемая в поле «Данные» фрейма Ethernet [1]Список кодов ModbusВ табл.
2 приведён пример кодов Modbus RTU для модуля дискретного ввода и вывода типа RealLab! NL16DI(фирмы НИЛ АП). Для чтения логических состояний входов модуля через интерфейс RS485 необходимо послатькоманду в формате, показанном на рис. 1, где в полях «Адрес» и «Код функции» указываются значения из соответствующих граф табл. 2.M ODBUS TCPПротокол Modbus TCP [5] (или Modbus TCP/IP) используется для того, чтобы подключить устройства с протоколом Modbus к Ethernet или сети Internet. Он используеткадры Modbus RTU на 7м (прикладном) уровне моделиOSI, протоколы Ethernet на 1м и 2м уровнях модели OSIи TCP/IP на 3м и 4м уровнях, то есть Ethernet TCP/IP используется для транспортировки модифицированного кадра Modbus RTU.Кадр Modbus RTU (рис. 1) в этом случае не имеет поля контрольной суммы, поскольку используется стандартная контрольная сумма Ethernet TCP/IP; нет такжеполя адреса, поскольку в Ethernet используется иная систем адресации.
Таким образом, только два поля – «Кодфункции» и «Данные» (блок PDU) встраиваются в протокол Ethernet TCP/IP. Перед ними вставляется новое поле(рис. 3) – MBAP (Modbus application protocol – прикладной протокол Modbus). Поле «Идентификатор обмена»используется для идентификации сообщения в случае,когда в пределах одного TCPсоединения клиент посылает серверу несколько сообщений без ожидания ответапосле каждого сообщения. Поле «Идентификатор протокола» содержит нули и зарезервировано для будущихприменений. Поле «Длина» указывает количество следующих за ним байтов.
Поле «Идентификатор устройства»идентифицирует удалённый сервер, расположенный внесети Ethernet (например, в сети Modbus RTU, котораясоединена с Ethernet с помощью межсетевого моста).Чаще всего это поле содержит нули или единицы, игноОтправительПолучательSCADA (Modbus RTU)Модуль вывода (Modbus RTU)TCPTCPIPIPEthernet канальныйEthernet канальныйEthernet физическийEthernet физическийВитая пара, оптический кабель94Рис. 4.
Процесс передачи кадра Modbus RTU по уровням модели OSIчерез стек протоколов Ethernet TCP/IP в сетях с протоколом Modbus TCPwww.cta.ruрируется сервером и отправляется обратно в том же виде(как эхо).Изображённый на рис. 3 фрейм называется фреймомADU, встраивается в поле «Данные» фрейма Ethernet [1] ипосылается через TCPпорт 502, специально зарезервированный для Modbus TCP (порты назначаются и контролируются организацией IANA – Internet Assigned NumbersAuthority, www.iana.org). Клиенты и серверы Modbus посылают, получают и прослушивают сообщения через TCPпорт 502.Таким образом, структура кадра и смысл его полей «Кодфункции» и «Данные» для Modbus и Modbus TCP совершенно идентичны, поэтому для работы с Modbus TCPне требуется дополнительного обучения при знанииModbus RTU.















