Ограничения по ModBUS?

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Автор
    Записи
  • #5021
    VitaliyAT
    Участник

    Не понимаю что не так. Ограничений вроде нет, но…
    У меня 400 ДискретИнпутов и 120ИнпутРегистров, 300Койлов, 30ХолдингРегистров.
    Коммуникатор в норме. Как только делаю 130Инпут регистров — валятся ошибки.
    модбас ошибка
    Может я в теории чего не знаю? Может у самого МодБАСа есть ограничения? Или у ПЛК? Или у коммуникатора? Нигде не встречал оных, но и прицельно не искал.

    В ПЛК у меня у каждого массива по 600элементов.
    как в плк

    Вот xml: https://cloud.mail.ru/public/B2wo/RV1ohFAkF

    • Тема изменена 9 лет, 5 месяцев назад пользователем VitaliyAT.
    • Тема изменена 9 лет, 5 месяцев назад пользователем VitaliyAT.
    • Тема изменена 9 лет, 5 месяцев назад пользователем VitaliyAT.
    #5025
    VitaliyAT
    Участник

    «ModBUS Pull» при этом считывает и пишет любые 600 в любых массивах. Значит дело где-то в Коммуникаторе.

    • Ответ изменён 9 лет, 5 месяцев назад пользователем VitaliyAT.
    #5027
    manjey73
    Участник

    У вас у групп адрес начального элемента 1 у обоих групп.
    А это адрес первого регистра, с которого необходимо начинать опрос.

    Подозреваю, что Ai начинаются не с 0 регистра…

    Разберитесь с адресацией в ПЛК, откуда начинаются Input Coils а откуда Input Registers и т.д.

    • Ответ изменён 9 лет, 5 месяцев назад пользователем manjey73.
    #5029
    VitaliyAT
    Участник

    Коммуникатор же сам присваивает Адреса считываемым параметрам:

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

    Послений:

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


    Последний:

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


    Последний:

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


    Послкдний:

    С помощью MODbus Pull всё читается и записывается.

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

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

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

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

    Нормально.

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

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

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


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

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

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

    • Ответ изменён 9 лет, 5 месяцев назад пользователем VitaliyAT.
    #5033
    manjey73
    Участник

    Еще раз, забудьте про ModbusPool, он скорее всего автоматически добавляет к адресу начало расположения Input Coils и Input Registers.

    в Rapid SCADA надо явно указать начальный адрес для ГРУППЫ и далее внутри группы идет автоматическое приращение.

    Посмотрите снифером порта при чтении Ai, какой адрес он посылает и поймете…
    Из Wiki про Modbus (c)

    Следует отметить, что со способом адресации данных связана определённая путаница. Modbus был первоначально разработан для контроллеров Modicon. В этих контроллерах для каждой из таблиц использовалась специальная нумерация. Например, первому регистру ввода соответствовал номер ячейки 30001, а первому регистру хранения — 40001. Таким образом, регистру хранения с адресом 107 в команде Modbus соответствовал регистр № 40108 контроллера. Хотя такое соответствие адресов больше не является частью стандарта, некоторые программные пакеты могут автоматически «корректировать» вводимые пользователем адреса, например, вычитая 40001 из адреса регистра хранения.

    Вы же группы Coils и Input Registers пытаетесь читать с одного адреса…

    #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

    #5035
    manjey73
    Участник

    И если что, то LREAL это по идее Double, то есть 8 байт на переменную.
    То, что указано как Floating и Doublefloating

    #5037
    VitaliyAT
    Участник

    Вот убрал 10 байт тоесть 5 Аi элементов — осталось 124 байт то есть 60 элементов — заработало. (как показал опыт научного тыка) Адресация верна. Но больше 124 ни в какую не хочет. При этом каждая группа начинается с 1го элемента. И как я показал выше всё попадает в цель на уровне всех групп регистров и из ModBUS pull и из СКАДЫ и со стороны ПЛК. Проблема с количеством самих элементов.

    • Ответ изменён 9 лет, 5 месяцев назад пользователем VitaliyAT.
    • Ответ изменён 9 лет, 5 месяцев назад пользователем VitaliyAT.
    • Ответ изменён 9 лет, 5 месяцев назад пользователем VitaliyAT.
    #5041
    VitaliyAT
    Участник

    При смене начального адреса группы:

    Ничего не меняется.

    Оставил только Ai — всё точно также.

    #5042
    manjey73
    Участник

    тю блин, Modbus по стандарту ограничен 256 байтами в одном запросе…
    124 регистра — 248 байт данных плюс заголовок и т.д.
    Создайте еще одну группу, укажите начальный адрес 125 и те Ai которые не влезли в первый запрос включите в эту группу.

    123-124 это не байты, а регистры.

    • Ответ изменён 9 лет, 5 месяцев назад пользователем manjey73.
    • Ответ изменён 9 лет, 5 месяцев назад пользователем manjey73.
    #5045
    VitaliyAT
    Участник

    бАнальный бАрмалей! (~восторг смешанный с удивлением и ноткой досады за потраченное время, но радостью за результат)… кто ж знал-то, что группы это запросы… заработал лисапед!

    Надо назвать не «группа элементов», а «группа элементов запроса». Я дума он их сам подбивает в пакеты запросов…

    • Ответ изменён 9 лет, 5 месяцев назад пользователем VitaliyAT.
    • Ответ изменён 9 лет, 5 месяцев назад пользователем VitaliyAT.
Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Для ответа в этой теме необходимо авторизоваться.