Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


LPW-305 протокол

Вы не вошли.

 Поиск | Регистрация | Вход 

Олег
23.08.2013 15:03:58
#1

Гость

LPW-305 протокол

Добрый день!
Не могли бы вы описать полный формат команд для работы с LPW-305 по протоколу MODBUS через RS-485? Нашел у вас на сайте только описание регистров.
Если не сложно, то попрошу еще привести пример запроса и ответа на команду чтения энергии прямого направления (регистр 17000) в разложенном побайтно виде с краткими пояснениями.
Заранее благодарен.

24.08.2013 01:51:30
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: LPW-305 протокол

Здравствуйте!

Modbus - это стандартный протокол. Его команды полностью описаны в спецификации (на английском), которую можно скачать отсюда http://www.modbus.org/docs/Modbus_Appli … V1_1b3.pdf (Вам в первую очередь должны быть интересны команды Read Holding Registers (3) для чтения и Write Single Register (6)/Write Multiple Registers (16) для записи).

Особенности работы по RS-485 описаны в http://www.modbus.org/docs/Modbus_over_ … V1_02.pdf. Из этого документа Вам нужно в первую очередь знать, что по RS-485 дополнительно перед командой первым байтом передается адрес устройства, а после команды - два байта CRC, причем сперва младший байт, затем старший. На странице 42 там есть пример кода для расчета CRC. При этом все байты одной передачи должны передаваться подряд, так как пауза в передаче является признаком конца команды.

Для примера, пусть адрес устройства - 4 (это зависит от настроек прибора), тогда для чтения регистра с активной энергией для 1-ой фазы (адрес 17000) нужно передать следующую последовательность из 8 байт (записано в 16-ричных кодах):

04 03 42 67 00 02 61 F9

04    - адрес устройства
03    - код команды (Read Holding Registers) - стр. 15 в спецификации
4267  - адрес первого регистра - (17000-1) в 16-ричной системе, старшим байтом вперед (все 16-битные значения передаются старшим байтом вперед, кроме CRC!). Обратите внимание, что адреса регистров нумеруются в документе с 1, а реально по шине передается адрес, уменьшенный на 1, чтобы нумерация была с 0
0002  - количество 16-битных регистров. Так как энергия - 32-битное значение, то она занимает 2 регистра по адресам 17000 и 17001. Вы можете их считать за раз (как при желании и сразу несколько параметров за раз).
61F9  - рассчитанная CRC, младшим байтом вперед (посчитал по этому калькулятору http://www.lammertbies.nl/comm/info/crc … ation.html - там есть строчка CRC-16 (Modbus) и нужно InputType поставить HEX)

В ответ должно прийти 9 байт:
04 03 02 HH HH LL LL yy yy

04    - адрес устройства
03    - код команды (Read Holding Registers)
04    - количество байт данных (2 регистра по 2 байта)
HHHH  - значение регистра 17000 - старшие 16 бит энергии (старшим байтом вперед)
LLLL  - значение регистра 17001 - младшие 16 бит энергии (старшим байтом вперед)
yyyy  - значение CRC по первым 7 байтам


Тут еще вопрос, для чего Вам это нужно. Если Вы пишете свою программу, то можно посмотреть на уже готовые реализации протокола Modbus. Например для C/C++ есть библиотека libmodbus (http://libmodbus.org) - правда следует учитывать, что там функции принимают уже уменьшенный на 1 адрес и порядок байт считанного регистра приводится к естественному для ПК виду.

Олег
26.08.2013 09:32:17
#3

Гость

Re: LPW-305 протокол

Большое спасибо за ответ! Теперь мне все стало понятно. Просто у меня вся проблема в том, что самого прибора нет в наличии и приходится писать программу для опроса LPW-305 без отладки.