avorobiev
Junior Member / Новичок
Участник № / Member № 5452
отправлено / posted
Не получается произвести групповое чтение с устройства, работающего по SNMP.
Создаю канал CALL.ChGroupReq с несколькими аргументами. Делаю привязку к драйверу. Запускаю проект - сниффер WireShark пишет, что производится один запрос GET_NEXT (должно быть несколько, по числу аргументов), на который выдается один ответ от устройства.
Считывание по одному параметру (GET, не через CALL.ChGroupReq) производится корректно.
отправлено / posted
Надо обновиться до текущего релиза 6.07.7 (с нашего сайта).
Необходимо удостовериться, что настройки источника для канала CALL.ChGroupReq правильные и, в частности, указанный OID существует и описывает группу объектов.
Надо посмотреть на атрибут 4 (ДОСТОВЕРНОСТЬ) этого канала и убедиться в том, что была попытка обмена и она недостоверна. По значению в атрибуте C5 можно посмотреть, какой код ошибки возвращается. Можно задать ключ DEBUG=400 в файле конфигурирования запуска узла (TMcom_xx.cnf) и в протоколе профайлера посмотреть сообщения об ошибках обмена.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
avorobiev
Junior Member / Новичок
Участник № / Member № 5452
отправлено / posted
Правильно ли создаю источник? Выбираю TYPE12/UniversalPLC_type4, все оставляю по умолчанию и в строку "Дополнительно" прописываю "SNMP:AGENT=192.168.0.56;OID=.1.3.6.1.3.55.4.1.0;".
Нужно чтобы считало 6 параметров: начиная с .1.3.6.1.3.55.4.2.0 до .1.3.6.1.3.55.4.7.0.
Далее в узле RTM создаю канал CALL, в котором выбираю тип вызова ChGroupReq, задаю период раз 3 секунды (на вкладке Системные->Основные), делаю привязку (на вкладке Системные->Дополнительно) на "источник.Значение". Затем создаю 6 аргументов типа IN.
На экране у элемента "Текст" делаю привязку к созданному каналу call.arg000, call.arg001...В общем все как в примере для Modbus ROC_MDB_TCP.
После запуска C5 у источника, как и аргументы канала call остаются равными 0. WireShark показывает один запрос GET_NEXT .1.3.6.1.3.55.4.1.0, на который приходит корректный ненулевой ответ.
Сообщения / Posts 4 | Из / From: РФ
| IP / IP: IP адрес / IP address |
avorobiev
Junior Member / Новичок
Участник № / Member № 5452
отправлено / posted
OID=.1.3.6.1.3.55.4.1.0 означает, что это индивидуальная переменная с OID=.1.3.6.1.3.55.4.1 Для запроса группы переменных OID не должен заканчиваться символом 0. Указываемый OID должен быть дейcтвительно групповым и поддерживаться конкретным агентом. Агент SNMP сам по своим настройкам определяет, относится ли заданный для группового запроса OID к групповым или индивидуальным. Структура SNMP-переменных для каждого агента может быть собственной (за исключением некоторых стандартных переменных, определенных протоколом). В Вашем конкретном примере групповой запрос мог бы быть реализован, если бы у агента была группа с OID, равным 1.3.6.1.3.55.4, в которую входили бы указанные индивидуальные переменные. При этом для группового запроса надо задавать OID=.1.3.6.1.3.55.4.1
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
avorobiev
Junior Member / Новичок
Участник № / Member № 5452
отправлено / posted
Спасибо, заработало. Если выставить "SNMP:AGENT=192.168.0.56;OID=.1.3.6.1.3.55.4;"., то считывает 6 переменных: с .1.3.6.1.3.55.4.1.0 по .1.3.6.1.3.55.4.6.0.
А есть ли способ начинать считывание не с первой переменной в группе SNMP? Если выставить "SNMP:AGENT=192.168.0.56;OID=.1.3.6.1.3.55.4.1;"., то не работает.
Сообщения / Posts 4 | Из / From: РФ
| IP / IP: IP адрес / IP address |
отправлено / posted
Согласно протоколу SNMP запрос типа GET_NEXT может быть адресован только к OID, который является точкой ветвления.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |