ВКТ-7 |
Реализация протокола МОДБАС |
с. 6 |
|
|
|
Кадр Modbus состоит из следующих элементов:
•поля адреса;
•поля функции;
•поля данных;
•контрольной суммы.
Ниже рассмотрено более подробно назначение отдельных полей:
•адрес – 8-разрядное число в диапазоне 0-99 (сетевой номер прибора), служащее для правильной адресации запроса получателю. На запрос с нулем в качестве сетевого адреса ответит любой прибор (кроме приборов со встроенным адаптером RS-485) – так называемый широковещательный запрос. Его можно применять только при подключении точка-точка, то есть при подключению к компьютеру одного прибора;
Примечание При использовании вычислителей со встроенным адаптером RS-485, настроенным на расширенный режим адресации, первым байтом посылки (до поля «Адрес») должен быть байт «расширенный адрес». Для всех вычислителей со встроенным адаптером RS-485 независимо от режима адресации не допускается использование адреса 0.
•функция – 8 разрядное значение. При передаче сообщения от ведущего к ведомому поле функции задает последнему действие, которое он должен выполнить. При ответе ведомого значение поля функции указывает, произошел ли обмен нормально или возникло исключение. В нормальном ответе используется тот же код функции, что и в запросе. Возникновение исключения приводит к передаче ответа с кодом функции, в котором старший бит установлен, а остальные биты такие же, как в коде функции запроса. При связи с вычислителем ВКТ- 7 используются два кода функций: 0x03 (чтение) и 0x10 (запись);
•данные — это последовательность 8-разрядных чисел. Поле данных сообщений, передаваемых ведущим ведомому, содержит предназначенную последнему дополнительную информацию, зависящую от кода функции. Дополнительная информация содержится в двух служебных элементах, каждый из которых представлен двумя 8-разрядными числами. Первый из этих служебных элементов – «Начальный адрес», второй – «Количество реги-
стров». Более подробная структура кадров запроса и ответа будет рассмотрена для каждой функции отдельно;
•контрольная сумма — 16-разрядное поле, необходимое для контроля целостности кадра. Рассчитывается по алгоритму Crc16 (см. Приложение А).
2.1Отступления от требований стандарта Modbus в протоколе в ВКТ-7
•Все поля в кадрах Modbus, имеющие длину более 1-го байта, должны передаваться в следующем порядке: сначала младший байт, затем старший. Это требование не относится к полям «Начальный адрес» и «Количество регистров». Они должны передаваться в следующем порядке: сначала старший байт, затем младший байт;
•Поле «Количество регистров» не анализируется прибором при обработке запроса и может быть установлено в произвольное значение, если иное не оговорено специально при описании запроса;
•Граница кадра определяется фиксированным интервалом тишины длительностью 62.5 мс или по переполнению входного буфера длиной 264 байта.
ВКТ-7 |
Реализация протокола МОДБАС |
с. 7 |
|
|
|
3 Структура запросов/ответов в сетевом протоколе Modbus
В данном разделе поясняется структура запросов/ответов, используемых при получении данных из тепловычислителя ВКТ-7. Конкретные значения полей кадров Modbus приведены в разделе «Возможные варианты запросов».
Корректная работа по протоколу Modbus возможно только с приборами, имеющими версию ПО 1.5 и более.
3.1Структура запросов/ответов для операции 0х03 («чтение»)
Запрос:
•Адрес;
•Функция – 0х03;
•Начальный адрес (НАст.б) (старший байт);
•Начальный адрес (НАмл.б) (младший байт);
•Количество регистров (КРст.б) (старший байт);
•Количество регистров (КРмл.б) (младший байт);
•Контрольная сумма (КСмл.б) (младший байт);
•Контрольная сумма (КСст.б) (старший байт);
Структура запроса на чтение приведена на рисунке.
|
|
|
|
|
|
|
А |
0х03 НА (ст.б) |
НА (мл.б) КР (ст.б) |
КР (мл.б) КС (мл.б) |
КС (ст.б) |
||
Значения полей «Начальный адрес» и «Количество регистров» для конкрет-
ных запросов будут приведены ниже.
Ответ:
В случае успешного обмена вычислитель присылает ответ следующего формата:
•адрес (значение, скопированное из запроса);
•функция (значение, скопированное из запроса).
•количество байт данных (КБ);
•секция данных длиной «количество байт данных»;
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду чтения приведена на рисунке.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
А |
0х03 |
КБ |
Данные |
КС (мл.б) |
КС (ст.б) |
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Если при обработке запроса возникло какое-либо исключение, то вычислитель устанавливает в поле функции старший бит. Это означает, что следует проанализировать код исключения, расположенный в следующем байте (расшифровка кодов ошибок приведена ниже для каждого запроса в отдельности). Ответ вычислителя с кодом ошибки имеет следующий формат:
•адрес (значение, скопированное из запроса);
•функция (значение, скопированное из запроса, с установленным старшим битом);
•код ошибки (КО);
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду чтения при возникновении исключения приведена на рисунке.
А |
0х83 |
КО КС (мл.б) |
|
КС (ст.б) |
ВКТ-7 |
Реализация протокола МОДБАС |
с. 8 |
|
|
|
3.2Структуразапросов/ответов для операции 0х10 («запись»)
Запрос:
•Адрес;
•0х10;
•Начальный адрес (старший байт);
•Начальный адрес (младший байт);
•Количество регистров (старший байт);
•Количество регистров (младший байт);
•Количество записываемых байт данных;
•Записываемые данные;
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура запроса на запись приведена на рисунке.
А
0х10
НА (ст.б) НА (мл.б)
КР (ст.б) КР (мл.б)
КБ 
Данные 
КС (мл.б) КС (ст.б) 
Значения полей «Начальный адрес» и «Количество регистров» для конкрет-
ных запросов будут приведены ниже.
Ответ:
В случае успешного обмена вычислитель присылает ответ следующего формата:
•адрес (значение, скопированное из запроса);
•функция (значение, скопированное из запроса);
•Начальный адрес (старший байт; значение, скопированное из запроса);
•Начальный адрес (младший байт; значение, скопированное из запроса);
•Количество регистров (старший байт; значение, скопированное из запроса);
•Количество регистров (младший байт; значение, скопированное из запроса);
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду записи приведена на рисунке.
|
|
|
|
|
|
|
А |
0х10 НА (ст.б) |
НА (мл.б) КР (ст.б) |
КР (мл.б) КС (мл.б) |
КС (ст.б) |
||
Если при обработке запроса возникло какое-либо исключение, то вычислитель устанавливает в поле функции старший бит. Это означает, что следует проанализировать код исключения, расположенный в следующем байте (расшифровка кодов приведена ниже для каждого запроса в отдельности). Ответ вычислителя с кодом ошибки имеет следующий формат:
•адрес (значение, скопированное из запроса);
•функция (значение, скопированное из запроса, с установленным старшим битом);
•код ошибки;
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду записи при возникновении исключения приведена на рисунке.
А |
0х90 |
КО КС (мл.б) |
|
КС (ст.б) |
ВКТ-7 |
Реализация протокола МОДБАС |
с. 9 |
|
|
|
4 Возможные варианты запросов
Во всех примерах запросов будет использоваться:
−сетевой адрес, равный нулю;
−Frame – массив элементов типа char;
−CheckSum l – младший байт контрольной суммы,
−CheckSum h – старший байт контрольной суммы.
4.1Запрос на чтение перечня активных элементов данных
Запрос предназначен для получения перечня активных элементов и определения размера элементов в байтах. Размер элемента нужен для того, чтобы из принятого пакета данных «взять» необходимое количество байт.
Начальный адрес = 0x3FFC; Количество регистров = 0х0000.
Пример:
Frame [0] = 0x00; Frame [1] = 0x03; Frame [2] = 0x3F; Frame [3] = 0xFC; Frame [4] = 0x00; Frame [5] = 0x00; Frame [6] = CheckSum l; Frame [7] = CheckSum h;
Готовый вариант запроса:
0x00 0x03 0x3f 0xfc 0x00 0x00 0x88 0x3f
Перечень активных элементов является массивом структур. Структура имеет два поля:
•условный адрес элемента (4 байта) (см. ниже перечисление, описывающее все элементы данных);
•размер элемента в байтах (2 байта).
4.2Запрос на запись перечня элементов для чтения
Запрос предназначен для того, чтобы указать вычислителю значения каких именно элементов данных следует присылать в ответ на запрос «Чтение данных…». После успешного выполнения этого запроса прибор будет присылать значения только для тех элементов данных, логические адреса которых присутствовали в записанном перечне.
Перечень элементов для чтения, также как и перечень активных элементов, является массивом структур. Структуры имеют такие же поля, как и в перечне активных элементов. Перечень элементов для чтения формируется из перечня активных элементов.
Начальный адрес = 0x3FFF; Количество регистров = 0х0000.
Поле условного адреса в элементе массива должно быть сформировано следующим образом:
«условный адрес» | 0x40000000,

Примечание Символ «|» означает операцию побитового «ИЛИ».
ВКТ-7 |
Реализация протокола МОДБАС |
с. 10 |
|
|
|
Значение поля размера данных в записываемом элементе массива должно быть равно значению поля размера данных из элемента массива, полученного при чтении перечня активных элементов (для соответствующей величины) (о формировании поля размера данныхдля «свойств» читайте в пункте «Получение «свойств»»).
Пример:
Нужно записать массив из N элементов (размер элемента равен 4+2 = 6 байт).
Frame [0 ] = 0x00;
Frame [1 ] = 0x10; Frame [2 ] = 0x3F; Frame [3 ] = 0xFF; Frame [4 ] = 0x00; Frame [5 ] = 0x00; Frame [6 ] = 6*N;
Frame [7 ] = младший байт элемента;
………..
Frame [12] = старший байт элемента;
………..
Frame [6*N+7] = CheckSum l; Frame [6*N+8] = CheckSum h;
Готовый вариант запроса:
(запись массива для чтения из двух элементов: t1(ТВ1) и V1(ТВ1))
0x00 0x10 0x3f 0xff 0x00 0x00 0x0c 0x00 0x00 0x00 0x40 0x02 0x00 0x03 0x00 0x00 0x40 0x04 0x00 0xa2 0x5c
Прибор присылает ответ в виде стандартного подтверждения записи. Возможные коды исключений:
•5 – размер массива больше максимально возможного;
•2 – задан несуществующий элемент.
4.3Запрос на запись типа значений
Запрос предназначен для того, чтобы указать вычислителю, значения какого типа следует присылать в ответ на запрос «Чтение данных…».
Начальный адрес = 0x3FFD; Количество регистров = 0х0000 Возможные типы значений:
−0-часовой архив;
−1-суточный архив;
−2-месячный архив;
−3-итоговый архив;
−4-текущие значения;
−5-итоговые текущие;
−6-свойства.