Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › Ограничения по ModBUS?
- В этой теме 10 ответов, 2 участника, последнее обновление 9 лет, 5 месяцев назад сделано
VitaliyAT.
-
АвторЗаписи
-
02.04.2017 в 06:28 #5021
VitaliyATУчастникНе понимаю что не так. Ограничений вроде нет, но…
У меня 400 ДискретИнпутов и 120ИнпутРегистров, 300Койлов, 30ХолдингРегистров.
Коммуникатор в норме. Как только делаю 130Инпут регистров — валятся ошибки.

Может я в теории чего не знаю? Может у самого МодБАСа есть ограничения? Или у ПЛК? Или у коммуникатора? Нигде не встречал оных, но и прицельно не искал.В ПЛК у меня у каждого массива по 600элементов.
02.04.2017 в 08:12 #5025
VitaliyATУчастник«ModBUS Pull» при этом считывает и пишет любые 600 в любых массивах. Значит дело где-то в Коммуникаторе.
-
Ответ изменён 9 лет, 5 месяцев назад пользователем
VitaliyAT.
02.04.2017 в 09:03 #5027
manjey73УчастникУ вас у групп адрес начального элемента 1 у обоих групп.
А это адрес первого регистра, с которого необходимо начинать опрос.Подозреваю, что Ai начинаются не с 0 регистра…
Разберитесь с адресацией в ПЛК, откуда начинаются Input Coils а откуда Input Registers и т.д.
-
Ответ изменён 9 лет, 5 месяцев назад пользователем
manjey73.
02.04.2017 в 10:51 #5029
VitaliyATУчастникКоммуникатор же сам присваивает Адреса считываемым параметрам:

Адресация в ПЛК соответсвует норме:
Coils 0х (отправляю из ModbusPull):
Первый:


Послений:


Discrete registers 1x (отправляю меняя значения в ПЛК, без СКАДы):
Первый:


Последний:


Input registers 3x (отправляю меняя значения в ПЛК, без СКАДы):
Первый:


Последний:


Holding Registers 4x (Из modbus pull в ПЛК):
Первый:


Послкдний:


С помощью MODbus Pull всё читается и записывается.
Смотрю в коммуникатор МВТ1: адрес автоматический:

Смотрю в коммуникатор МВТ0: адрес тоже 1:

Отправляю изменения из ПЛК:

Получаю в Коммуникаторе:

Нормально.Даю команду на запись из Коммуникатора, по адресу 1:

всё перезаписано в нужном месте и приходит именно в 0х — специально проверяю:

Отправляю команду на запись 4х (№501):


Команда принятая в нерасшифрованный массив:

В расшифрованный:

Всё нормально… но в Коммуникаторе ошибка при чтении Ai:


-
Ответ изменён 9 лет, 5 месяцев назад пользователем
VitaliyAT.
02.04.2017 в 11:37 #5033
manjey73УчастникЕще раз, забудьте про ModbusPool, он скорее всего автоматически добавляет к адресу начало расположения Input Coils и Input Registers.
в Rapid SCADA надо явно указать начальный адрес для ГРУППЫ и далее внутри группы идет автоматическое приращение.
Посмотрите снифером порта при чтении Ai, какой адрес он посылает и поймете…
Из Wiki про Modbus (c)Следует отметить, что со способом адресации данных связана определённая путаница. Modbus был первоначально разработан для контроллеров Modicon. В этих контроллерах для каждой из таблиц использовалась специальная нумерация. Например, первому регистру ввода соответствовал номер ячейки 30001, а первому регистру хранения — 40001. Таким образом, регистру хранения с адресом 107 в команде Modbus соответствовал регистр № 40108 контроллера. Хотя такое соответствие адресов больше не является частью стандарта, некоторые программные пакеты могут автоматически «корректировать» вводимые пользователем адреса, например, вычитая 40001 из адреса регистра хранения.
Вы же группы Coils и Input Registers пытаетесь читать с одного адреса…
02.04.2017 в 11:40 #5034
manjey73УчастникData Address
Data addresses are used in Modbus query messages when reading or modifying data. Four types of data are used: Coil,
Input Status, Input Register and Holding Register.
Coil
Coils are used to force the ON/OFF state of discrete outputs (DO) to the field, or to modify the mode or status of slave
devices. Coil data is either ON or OFF, which can be both read and modified. Valid addresses are in the range of 1 – 9999.
Input Status
Input Status is used for the ON/OFF state of discrete inputs (DI) from the field, or the status of slave devices. The input status
is either ON or OFF, which can be read only. Valid addresses are in the range of 10001 – 19999.
Input Register
Input registers are used for the value of analog inputs (AI) from the field, or the information of slave devices. The input
register is of 16-bit long, which can be read only. Valid addresses are in the range of 30001 – 39999. Floating or doublefloating
data can be handled when consecutive addresses are assigned.
Holding Register
Holding registers are used for the value of analog outputs (AO) to the field, or to set information of slave devices. The holding
register is of 16-bit long, which can be both read and modified. Valid addresses are in the range of 40001 – 49999. Floating
or double-floating data can be handled when consecutive addresses are assigned.Вот скорее всего ModbusPool и оперирует данными адресами, понять поможет лог вывода в порт, когда вы это делаете при помощи ModbusPool
02.04.2017 в 11:44 #5035
manjey73УчастникИ если что, то LREAL это по идее Double, то есть 8 байт на переменную.
То, что указано как Floating и Doublefloating02.04.2017 в 12:43 #5037
VitaliyATУчастникВот убрал 10 байт тоесть 5 Аi элементов — осталось 124 байт то есть 60 элементов — заработало. (как показал опыт научного тыка) Адресация верна. Но больше 124 ни в какую не хочет. При этом каждая группа начинается с 1го элемента. И как я показал выше всё попадает в цель на уровне всех групп регистров и из ModBUS pull и из СКАДЫ и со стороны ПЛК. Проблема с количеством самих элементов.
02.04.2017 в 13:13 #5041
VitaliyATУчастникПри смене начального адреса группы:

Ничего не меняется.Оставил только Ai — всё точно также.
02.04.2017 в 13:20 #5042
manjey73Участниктю блин, Modbus по стандарту ограничен 256 байтами в одном запросе…
124 регистра — 248 байт данных плюс заголовок и т.д.
Создайте еще одну группу, укажите начальный адрес 125 и те Ai которые не влезли в первый запрос включите в эту группу.123-124 это не байты, а регистры.
02.04.2017 в 14:03 #5045
VitaliyATУчастник
бАнальный бАрмалей! (~восторг смешанный с удивлением и ноткой досады за потраченное время, но радостью за результат)… кто ж знал-то, что группы это запросы… заработал лисапед!
Надо назвать не «группа элементов», а «группа элементов запроса». Я дума он их сам подбивает в пакеты запросов…
-
Ответ изменён 9 лет, 5 месяцев назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.