партнерский раздел
ФорумЭксплуатацияС2000М + С2000-2 + С2000-ПП

Эксплуатация » С2000М + С2000-2 + С2000-ПП

Добрый день.
У кого есть опыт интеграции Болид со сторонними системами?
Подскажите, как интерпретировать ответы от системы, не могу разобраться....

Собрали тестовый стенд, схема следующая:

C2000M(v.4.11) C2000-2(v.2.20) С2000-ПП(v.1.31) MoxaMB3180 ПК

Master - С2000М. Адреса назначены, таблица зон задана. В целом связка ведет себя адекватно, на запросы с ПК отвечает, при попытке опросить не существующий адрес ModBus, выдает ошибку. Но не могу понять как интерпретировать ответы системы:
Например опрашиваю адрес
46136 (Состояние  Modbus  системы) - получаю код-ответ 170 (тип данных uint16)
46152 (Тип и версия прибора) - ответ 2359427 (тип данных uint32)
и т.д.
при опросе 4-х ШС в одинаковом состоянии, вообще получаю странные данные:
40001 (Запрос состояния зоны из таблицы) - ответ 1828744448 (тип данных uint32)
....
40004 (Запрос состояния зоны из таблицы) - ответ 18446744072766408600 (тип данных uint32)

т.е. на запросы система отвечает, но в каком то неявном виде. У кого нибудь есть идеи, как интерпретировать (преобразовать) получаемые данные, и вообще насколько они корректы?

5 лет 5 месяцев назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

3 ответа

Доброго дня.
Опыта интеграции достаточно много.  С С2000-ПП обычно все начинают с Modbus tester как универсального опросчика, которому " все верят" mbtester.  Делается это ввиду того, что некоторые программисты считают с "0" а некоторые с "1". а некоторые ещё и фривольно трактуют стандарт Modbus-a. Обычно эти вопросы "приземляются" "стандартным" указанным выше опросчиком. Периодически заходят дальше и идут к OPC Masterscada.

Вопрос помощи заключается в том, что сначала надо понять-  чем именно Вы опрашиваете - тип данных uint32 это в какой системе формируется?

В связи с чем такой вопрос- издалека посмотрев на числа всё вроде в порядке.
Вот к примеру регистр 46136  всё нормально ответил, 170 так и написано ниже должен выдать при восстановлении связи, которая видимо и произошла.

А вот ещё и регистр 46152 -  2359427  хм.. почему именно такой тип данных приняли? в таблице 4. на стр.12 с самого верха описан формат. старший байт, А младший байт и длинна пакета. Этого достаточно для получения двух чисел - сладшего и старшего байта. в 16-и ричном виде.
Ну если Вы хотите переводить " непонятные числа в ещё более непонятные  - то сначала у этого числа  2359427   надо "убрать лишнее" то-есть поделить на 256 (потому что uint32) - получаем 9216.
Далее переводим это число в 16-и ричную систему и получаем 24 00 . это очевидно число "36" в десятичной системе "младшим вперёд", как и описано в описании данного регистра и как забирать из него данные - тип прибора 36. см. страницу 17.
При этом данные манипуляции Вы придумали себе сами, выбрав тип именно uint32. В связи с чем вопрос - с чем интегрируете С2000-ПП?

с 40001 к примеру делим на 256 получаем 7143533 . и тут  очевидно переполнение но 6D видно явно. 6D в 10-ичной системе 109. из табл. 5 смотрим - это "Снятие ШС", очевидно что он снят.

Выбор Вами формата данных "uint32" - весьма странен,

5 лет 5 месяцев назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Добрый вечер, интеграция идет с zabbix сервером, опрос производится используя zabbix-agent через внешнюю библиотеку libzbxmodbus.so

Формат данных (uint32) выбран в связи с тем, что попытки опросить те же регистры, но с другим типом данных приводит к ошибке (Illegal data value) . У меня есть опыт интеграции оборудования других производителей, с данной системой, но к сожалению, с болидом, всё оказалось несколько сложнее. На данный момент, собран тестовый стенд, на котором производится отладка, и так как оборудование не знакомо, естественно возникает ряд вопросов, в том числе и по формату данных. Для начало, было не совсем понятно, работает ли данная связка в принципе. Благодаря Ваши комментариям, стало гораздо понятнее, в какую сторону надо "копать". Спасибо. Надеюсь дальше будет проще.
 

5 лет 5 месяцев назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

День добрый. 
К сожалению используя без доработок libzbxmodbus нормальной работы добиться МОЖЕТ НЕ получиться.
Что-то будет работать,но врятли всё. 
Дело тут в том, что libmodbus (http://libmodbus.org) на которой он базируется имел раньше ряд порочных "глюков" которые вылезали с непонятной регулярностью. До той степени что пару лет назад при попытки её использовать в " канонически верном" Modbus-е не было вопроса почему она не работает, а были вопросы - почему хоть когда то она - библиотека - работала.
То-есть это тот случай, когда врятли кто гарантирует работоспособность это связки.
Не смотря на то, что Zabbix, мониторинг наше всё... Я бы рекомендовал Самим написать на С опросчик Modbus -а. благо и так и так Вам полюбому его писать, Большая часть функционала так просто делением и преобразованием типов не дасться.

.


 

5 лет 5 месяцев назад

avatar
Добрый день, Юрий.
К сожалению, на данном этапе нет возможности заняться разработкой своей библиотеки по опросу Modbus, приходится пользоваться теми наработками, которы уже реализованны. Очевидно, что Ваш опыт в данном направлении значительно выше моего, могли бы Вы более подробно объяснить с примерами, как формируется пакет и транслируется в Modbus?
Правильно ли я понял:
На примере функции 46152 из таблицы 4
Для того, что бы получить Тип прибора и Версию прибора необходимо сформировать запрос в виде пакета в 8 байт? Что должно быть помещено в старший и младший байт данного запроса, "Адрес регистра"? т.е. правильно ли я понимаю, что в старший байт должно попасть 10110100 а в младший 01001000?
К чему тогда относяться раздел "кол-во регистров"?
Или я вообще не в том направлении рассуждаю?



 

MSP 5 лет 5 месяцев назад

Рассуждения, как мне кажется, идут не в совсем верном направлении. Действительно, для того, чтобы получить тип и версию прибора, нужно сформировать запрос, который, да, в общей сложности состоит из 8 байт, но остальные вопросы возникают из-за того, что этот запрос рассматривается, как именно набор байт, которым пытаются придать смысл и понять его.
При рассуждениях в обратном порядке: от смысла к набору байт - вопросы отпадут сами собой.
  1. Для того, чтобы получить тип и версию прибора, нужно прочитать два значения типа "Holding register" (16-разрядный тип данных), расположенные по адресам 46152 (тип прибора) и 46153 (версия прибора).
  2. Для чтения двух регистров формируется запрос, состоящий из кода функции 3 (чтение значений типа "Holding register" 1 байт), адреса первого регистра 46152 (2 байта, старшим вперёд) и количества регистров 2 (2 байта, старшим вперёд):
    1. 0x 03 B4 48 00 02
    2. или 00000011 10110100 01001000 00000000 00000010

  3. Для того, чтобы передать запрос прибору по RS-485 в режиме обмена RTU, нужно сформировать кадр, состоящий из адреса прибора (1 байт), запроса (5 байт, см. выше) и CRC (рассчитывается по всем байтам кадра, начиная с адреса прибора, 2 байта, младшим вперёд)

Ответ от прибора рассматривается аналогично.
  1. Пользователь должен получить (при нормальном ответе от прибора) кадр, состоящий из адреса ответившего прибора (1 байт), ответа (в данном случае рассматривается ответ на запрос выше: 6 байт) и CRC (рассчитывается по всем байтам кадра, начиная с адреса прибора, 2 байта, младшим вперёд).
  2. Ответ прибора состоит из кода функции 3 (1 байт), количества байт данных 4 (1 байт), и самих данных (два 16-разрядных значения по 2 байта, старшим байтом вперёд). При этом значения передаются в порядке от значения с меньшим адресом (46152) к значению с большим адресом (46153):
    1. 0x 03 04 00 24 00 83

  3. Получаем значение типа прибора 0x0024 (регистр 46152) и версии прибора 0x0083 (регистр 46153). Что оно значит, я написал в самом начале.

 Подробности (описание протокола, типов данных, режимов передачи) можно узнать из первоисточников (в свободном доступе):
  1. http://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf
  2. http://modbus.org/docs/Modbus_over_serial_line_V1_02.pdf

Горелый Юрий Алексеевич 5 лет 4 месяца назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

3715 раз

ЗАДАН

5 лет 5 месяцев назад

ПРОДУКТЫ

С2000-2
С2000-ПП
С2000М

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.