ВКТ-7 |
Реализация протокола Модбас |
с. 6 |
3Структура запросов/ответов в сетевом протоколе Modbus
В данном разделе поясняется структура запросов/ответов, используемых при получении данных из тепловычислителя ВКТ-7. Конкретные значения полей кадров Modbus приведены в разделе «Возможные варианты запросов».
Корректная работа по протоколу Modbus возможно только с приборами, имеющими версию ПО 1.5 и более.
3.1Структура запросов/ответов для операции 0х03 («чтение»)
Запрос:
•Адрес;
•Функция – 0х03;
•Начальный адрес (НАст.б) (старший байт);
•Начальный адрес (НАмл.б) (младший байт);
•Количество регистров (КРст.б) (старший байт);
•Количество регистров (КРмл.б) (младший байт);
•Контрольная сумма (КСмл.б) (младший байт);
•Контрольная сумма (КСст.б) (старший байт); Структура запроса на чтение приведена на рисунке.
|
|
|
|
|
|
|
А |
0х03 НА (ст.б) НА (мл.б) КР (ст.б) КР (мл.б) КС (мл.б) КС (ст.б) |
|||||
Значения полей «Начальный адрес» и «Количество регистров» для кон-
кретных запросов будут приведены ниже.
Ответ:
Вслучаеуспешногообменавычислительприсылаетответследующегоформата:
•адрес (значение, скопированное из запроса);
•функция (значение, скопированное из запроса).
•количество байт данных (КБ);
•секция данных длиной «количество байт данных»;
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду чтения приведена на рисунке.
|
|
|
Данные |
|
|
А |
0х03 |
КБ |
КС (мл.б) КС (ст.б) |
||
Если при обработке запроса возникло какое-либо исключение, то вычислитель устанавливает в поле функции старший бит. Это означает, что следует проанализировать код исключения, расположенный в следующем байте (расшифровка кодов ошибок приведена ниже для каждого запроса в отдельности). Ответ вычислителя с кодом ошибки имеет следующий формат:
•адрес (значение, скопированное из запроса);
•функция(значение, скопированноеиззапроса, сустановленнымстаршимбитом);
•код ошибки (КО);
ВКТ-7 |
Реализация протокола Модбас |
с. 7 |
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду чтения при возникновении исключения приведена на рисунке.
|
|
|
|
А |
0х83 |
КО КС (мл.б) КС (ст.б) |
|
3.2Структура запросов/ответов для операции 0х10 («запись»)
Запрос:
•Адрес;
•0х10;
•Начальный адрес (старший байт);
•Начальный адрес (младший байт);
•Количество регистров (старший байт);
•Количество регистров (младший байт);
•Количество записываемых байт данных;
•Записываемые данные;
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура запроса на запись приведена на рисунке.
|
|
|
|
|
|
|
|
|
А |
0х10 НА (ст.б) НА (мл.б) КР (ст.б) КР (мл.б) КБ |
Данные |
КС (мл.б) КС (ст.б) |
|||||
Значения полей «Начальный адрес» и «Количество регистров» для кон-
кретных запросов будут приведены ниже.
Ответ:
Вслучаеуспешногообменавычислительприсылаетответследующегоформата:
•адрес (значение, скопированное из запроса);
•функция (значение, скопированное из запроса);
•Начальный адрес (старший байт; значение, скопированное из запроса);
•Начальный адрес (младший байт; значение, скопированное из запроса);
•Количестворегистров(старшийбайт; значение, скопированноеиззапроса);
•Количестворегистров(младшийбайт; значение, скопированноеиззапроса);
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду записи приведена на рисунке.
|
|
|
|
|
|
|
А |
0х10 НА (ст.б) НА (мл.б) КР (ст.б) КР (мл.б) КС (мл.б) КС (ст.б) |
|||||
Если при обработке запроса возникло какое-либо исключение, то вычислитель устанавливает в поле функции старший бит. Это означает, что следует проанализировать код исключения, расположенный в следующем байте (расшифровка кодов приведена ниже для каждого запроса в отдельности). Ответ вычислителя с кодом ошибки имеет следующий формат:
• адрес (значение, скопированное из запроса);
ВКТ-7 |
Реализация протокола Модбас |
с. 8 |
•функция(значение, скопированноеиззапроса, сустановленнымстаршимбитом);
•код ошибки;
•Контрольная сумма (младший байт);
•Контрольная сумма (старший байт).
Структура ответа на команду записи при возникновении исключения приведена на рисунке.
|
|
|
|
А |
0х90 |
КО КС (мл.б) КС (ст.б) |
|
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Запрос на запись перечня элементов для чтения
Запрос предназначен для того, чтобы указать вычислителю значения каких именно элементов данных следует присылать в ответ на запрос «Чтение данных…». После успешного выполнения этого запроса прибор будет присылать значения только для тех элементов данных, логические адреса которых присутствовали в записанном перечне.
Перечень элементов для чтения, также как и перечень активных элементов, является массивом структур. Структуры имеют такие же поля, как и в перечне
ВКТ-7 |
Реализация протокола Модбас |
с. 9 |
активных элементов. Перечень элементов для чтения формируется из перечня активных элементов.
Начальный адрес = 0x3FFF; Количество регистров = 0х0000.
Поле условного адреса в элементе массива должно быть сформировано следующим образом:
«условный адрес» | 0x40000000,
Примечание: Символ «|» означает операцию побитового «ИЛИ».
Значениеполяразмераданныхвзаписываемом элементемассивадолжнобыть равнозначениюполяразмераданныхизэлементамассива, полученногопричтении перечняактивныхэлементов(длясоответствующейвеличины) (оформированииполя размераданныхдля«свойств» читайтевпункте«Получение«свойств»»).
Пример:
Нужно записать массив из 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-текущие значения;
ВКТ-7 |
Реализация протокола Модбас |
с. 10 |
−5-итоговые текущие;
−6-свойства.
Пример:
Frame [0 ] = 0x00;
Frame [1 ] = 0x10; Frame [2 ] = 0x3F; Frame [3 ] = 0xFD; Frame [4 ] = 0x00; Frame [5 ] = 0x00; Frame [6 ] = 0x02;
Frame [7 ] = тип значений; Frame [8 ] = 0x00;
Frame [9 ] = CheckSum l; Frame [10] = CheckSum h;
Готовый вариант запроса: (тип значений– суточный архив)
0x00 0x10 0x3f 0xfd 0x00 0x00 0x02 0x01 0x00 0x71 0x42
Прибор присылает ответ в виде стандартного подтверждения записи. Возможный код ошибки - 2 (несуществующий тип значений).
4.4Запрос на запись даты
Запрос предназначен для того, чтобы указать вычислителю, относительно какой хронологической метки следует передавать архивные данные. Запрос содержит хронологическую метку с указанием даты и времени. Вычислитель передает архивные данные в ответ на запрос «Чтение данных…» относительно той хронологической метки, которая была записана в вычислитель в последний раз.
Начальный адрес = 0x3FFB; Количество регистров = 0х0000.
Дата передается в формате VT_DATA_RAP (описание в Приложении Б). Пример:
Frame [0 ] = 0x00;
Frame [1 ] = 0x10; Frame [2 ] = 0x3F; Frame [3 ] = 0xFB; Frame [4 ] = 0x00; Frame [5 ] = 0x00; Frame [6 ] = 0x04; Frame [7 ] = день; Frame [8 ] = месяц; Frame [9 ] = год; Frame [10] = час;
Frame [11] = CheckSum l; Frame [12] = CheckSum h;
Готовый вариант запроса: (30 января 2003г. 0 часов)
0x00 0x10 0x3f 0xfb 0x00 0x00 0x04 0x1e 0x01 0x03 0x00 0xfa 0xaf
Прибор присылает ответ в виде стандартного подтверждения записи. Возможный код ошибки
• 3 – в архиве отсутствуют данные за эту дату.