Цикл запрос - ответ
Запрос: код функции в запросе определяет действие подчиненного. Байты данных содержат информацию, необходимую для выполнения запрошенной функции. Например, код функции 3 подразумевает запрос на чтение содержимого регистров подчиненного.
Ответ: если подчиненный дает нормальный (безошибочный) ответ, код функции в ответе повторяет код функции в запросе. В байтах данных содержится затребованная информация. Если имеет место ошибка, то код функции модифицируется, и в байтах данных передается причина ошибки.
Соответствие полей кадров в цикле запрос – ответ на рисунке 3.37.
Запрос от главного |
Адрес устройства |
Код функции |
8 – битные байты данных |
Контрольная сумма |
Ответ подчиненного |
Адрес устройства |
Код функции |
8 – битные байты данных |
Контрольная сумма |
Рисунок 3.37 – Формат кадров протокола в цикле запрос –ответ
Режимы последовательной передачи
В сетях MODBUS может быть использован один из двух способов передачи: ASCII или RTU. Пользователь выбирает необходимый режим вместе с другими параметрами (скорость передачи, режим паритета и т.д.) во время конфигурации каждого контроллера.
Режим ASCII
При использовании ASCII – режима каждый байт сообщения передается как два ASCII символа. Главное преимущество этого способа время между передачей символов может быть до 1 секунды без возникновения ошибок при передаче.
Формат каждого байта в ASCII-режиме:
Система кодировки: шестнадцатеричная, ASCII-символы 0-9, A-F
Назначение битов символа: 1 старт бит, 7 бит данных, младшим битом вперед, 1 бит паритета (или без бита паритета), 1 стоп бит, если есть паритет (2 бита без паритета), контрольная сумма Longitudinal Redundancy Chek (LRC).
Режим RTU
Формат каждого байта в RTU-режиме:
Система кодировки: 8 – битовая двоичная, шестнадцатеричная.
Назначение бит: 1 старт бит, 8 бит данных, младшим значащим разрядом вперед, 1 бит паритета (без бита паритета), 1 стоп бит, если есть паритет (2 бита без паритета), контрольная сумма (CRC).
Содержание сообщения MODBUS
ASCII фрейм
В ASCII-режиме, сообщение начинается с "двоеточия" (:, ASCII 3Ah) и заканчивается последовательностью "возврат каретки-перевод строки" (CRLF, ASCII 0Dh и 0A h).
Допустимые символы для передачи - это шестнадцатиричные цифры 0-9, A-F. Монитор сетевого устройства в сети непрерывно отслеживает символ "двоеточие". Когда он принят, каждое устройство декодирует следующие поле сообщения (поле адреса) и т.д.
Интервалы между символами сообщения могут быть до 1 секунды.
Если интервал больше, то принимающее устройство распознает это как ошибку. Типичный фрейм сообщения показан на рисунке 3.38.
старт | адрес | функция | данные | LRC | конец |
Рисунок 3.38 – Формат ASCII фрейма сообщения |
RTU фрейм
В RTU режиме сообщение начинается с интервала тишины равного времени передачи 3,5 символов при данной скорости передачи в сети. Первым полем затем передается адрес устройства.
Вслед за последним передаваемым символом также следует интервал тишины продолжительностью не менее 3,5 символов. Новое сообщение может начинаться после этого интервала.
Фрейм сообщения передается непрерывно. Если интервал тишины продолжительностью 1,5 возник во время передачи фрейма, принимающее устройство заканчивает прием сообщения и следующий байт будет воспринят как начало следующего сообщения.
Таким образом, если новое сообщение начнется раньше 3,5 интервала, принимающее устройство воспримет его как продолжение предыдущего сообщения. В этом случае устанавливается ошибка, так как будет несовпадение контрольных сумм. Типичный фрейм сообщения показан на рисунке 3.39ниже.
Старт T1-T2-T3-T4 | Адрес 8 бит | Функция 8 бит | Данные n x бит | LRC 16 бит | Конец T1-T2-T3-T4 |
Рисунок 3.39 – Формат RTU фрейма сообщения |
Содержание адресного поля
Адресное поле фрейма содержит два символа (ASCII) или 8 бит (RTU). Допустимый адрес передачи находится в диапазоне 0 - 247. Каждому подчиненному устройству присваивается адрес в пределах от 1 до 247.
Адрес 0 используется для широковещательной передачи, его распознает каждое устройство. Когда MODBUS протокол используется на более высоком уровне сети, широковещательная передача может не поддерживаться или может быть реализована другими методами.
Содержание поля функции
Поле функции фрейма содержит два символа (ASCII) или 8 бит (RTU). Диапазон числа 1 -255. Когда подчиненный отвечает главному, он использует поле кода функции для фиксации ошибки. В случае нормального ответа подчиненный повторяет оригинальный код функции. Если имеет место ошибка, возвращается код функции с установленным в 1 старшим битом.
Например, сообщение от главного подсиненному прочитать группу регистров имеет следующий код функции:
0000 0011 (03 hex) Если подчиненный выполнил затребованное действие без ошибки, он возвращает такой же код. Если имеет место ошибка, то он возвращает:
1000 0011 (83 hex) В добавление к изменению кода функции, подчиненный размещает в поле данных уникальный код, который говорит главному какая именно ошибка произошла или причину ошибки.
Содержание поля данных
Поле данных в сообщении от главного к подчиненному содержит дополнительную информацию, которая необходима подчиненному для выполнения указанной функции. Оно может содержать адреса регистров или выходов, их количество, счетчик передаваемых байтов данных.
Например, если главный запрашивает у подчиненного прочитать группу регистров (код функции 03), поле данных содержит адрес начального регистра и количество регистров.
Если главный хочет записать группу регистров (код функции 10 hex), поле данных содержит адрес начального регистра, количество регистров, счетчик количества байтов данных и данные для записи в регистры. Поле данных может не существовать (иметь нулевую длину) в определенных типах сообщений.
Содержание поля контрольной суммы
В MODBUS - сетях используются два метода контроля ошибок передачи. Содержание поля контрольной суммы зависит от выбранного способа передачи. ASCII.
Когда используется ASCII-режим поле контрольной суммы содержит два ASCII-символа. Контрольная сумма является результатом вычисления Longitudinal Redundancy Check (LRC) сделанного над содержанием сообщения начиная с ":" и заканчивая CRLF. RTU Когда используется RTU-режим поле контрольной суммы содержит 16-ти битовую величину. Контрольная сумма является результатом вычисления Cyclical Redundancy Check сделанного над содержанием сообщения. CRC добавляется к сообщению последним полем младшим байтом вперед.
Дата добавления: 2020-04-12; просмотров: 499;