Адресация Modbus для новичков

Помечено: ,

Просмотр 15 сообщений - с 1 по 15 (из 38 всего)
  • Автор
    Сообщения
  • #43341
    MrEnthropy
    Участник

    Здравствуйте коллеги. На работе недавно начал проектировать свою первую SCADA систему с использованием rapidSCADA. Суть такая: наладить связь Сервера с парочкой контроллеров DEIF AGC150, по протоколу Modbus TCP. Установил rapidScada, наладил Линию связи, добавил Устройство, запустил Опрос согласно инструкции. Журнал линии показал что опрос идёт, и Сервер стабильно получает данные.
    С помощью редактора, сделал Шаблон с рандомными параметрами, и они даже что то показали. Теперь сел за то что бы прописать нужные modbus-адреса в шаблон… и столкнулся с тем, что не знаю куда что прописывать.
    В шаблоне ничего не понятно. Я понимаю что такое дискретные выходы, флаги, регистры, но как их правильно прописать. Что за адреса начального элемента, код тега, битовая маска и так далее.
    Я скачал документацию от производителя, таблицу с modbus адресами, но там так же непонятно.
    Дайте пожалуйста краткую сводку новичку по правильной настройке modbus-шаблона. Если надо, могу предоставить ссылку на мануал и таблицу адресов от производителя.
    Спасибо

    #43342
    manjey73
    Участник

    Берете ОДИН параметр, для начала float(real). Так как он занимает 2 регистра или 4 байта.
    Смотрите опрос, его значение и то, что должен показать контроллер.

    Ну и определить две вещи.
    1. С какого адреса начинается предоставленная по документации адресаци, с 0 или 1.
    2. Необходимость перестановки байт, регистров.

    Потом уже все остальное.

    #43343
    MrEnthropy
    Участник

    Извините, но мне это ни о чём не говорит. Но давайте по порядку:
    С какого адреса начинается адресация не знаю. В параметрах устройства они начинаются с 1. А в таблице с адресами в колонке Modbus adres начинаются с 0. Там помимо этого ещё присутствуют колонки PLC adress и Modbus function code.
    И что за перестановка байтов и регистров? В документации сказано, что то про смещение: что к адресу параметра надо прибавить адресный диапазон, в зависимости от типа параметра, например 4000 для входных параметров

    #43344
    manjey73
    Участник

    Начните с малого, прочитайте хоть что-то про Modbus, в нете есть много ссылок, и на простом языке. Главное про адресацию прочитайте, бывает адрес указывают 40001 (или 400001 не помню). Где первая цифра не указывает адрес, а указывает тип регистра. То есть хотя бы базу прочитайте. А то разжевывать и гадать можно будет долго.

    У драйвера настройка шаблона универсальная.

    1. начальная адресация — один производитель указывает с 0, а другой с 1 (логический и физический адрес Modbus) — шаблон можно настроить понимать и так и так, соответственно вы потом адрес указываете прямо из бумажки производителя.
    2. производитель может указать в документации адресацию в Десятичном виде, а может указать в HEX — и такая настройка есть в шаблоне
    3. Перестановка байт требуется или нет так же зависит от железки, от типа ее процессора, предусмотрел производитель сразу перестановку или возлагает ее на уровень выше (Scada систему)

    Все необходимое обычно проверяется на примерах чтения одной, двух переменных из устройства, которые вы точно понимаете, что там должно показывать по документации.
    Простой пример — температура в формате float. Если оно измеряет комнату и у вас 24,75 а вы видите в scada 568,30 то явно или с адресацией промахнулись (читаете половину из нужного регистра, а вторую из чужого регистра). Либо требуется перестановки байт для всех 4-х байтных переменных.

    #43345
    a80808
    Участник

    Ну либо взять уже готовый шаблон и посмотреть как там сделано. Можно же потихоньку — сначала один параметр отладить, потом остальные

    #43346
    manjey73
    Участник

    AC measurement 501 300502 04 S1 Voltage L1-L2 INT16s AB 0 V

    Интересно, а что вам тут непонятно по карте регистров? Там же даже вкладки подписаны, что это InputRegisters, функция чтения 4 (только чтение, так как это Input)
    Адрес 501 а (физ или логик) 300502 (по идее выставить начальный 0)

    Скалирования нет (0) — значит делить ничего не потребуется.
    И так далее, и так далее.

    #43347
    manjey73
    Участник

    на 32-х битных знаковых указано ABCD — то есть даже байты переворачивать не потребуется.

    #43348
    manjey73
    Участник

    а, ну вот в настройках драйвера для соответствия

    short — INT16s (знаковый 16 битный)
    ushort — UINT16 или может быть просто INT16 (беззнаковый 16 битный)
    int
    uint это для 32-х битный по аналогии

    #43349
    a80808
    Участник

    Класс!

    #43350
    Mikhail
    Модератор

    Добрый день!

    Структура шаблона, возможно, неочевидна, но она приближена в структуре стандарта Modbus. Поэтому позволяет настроить опрос оптимальным образом, чтобы он выполнялся быстро.

    Посмотрите формат пакетов Модбас на Википедии, а лучше скопируйте запрос и ответ в парсер. Тогда многое станет понятно по структуре шаблона.

    Задавайте вопросы на основе конкретных примеров.

    #43351
    Mikhail
    Модератор

    С какого адреса начинается адресация не знаю. В параметрах устройства они начинаются с 1. А в таблице с адресами в колонке Modbus adres начинаются с 0. Там помимо этого ещё присутствуют колонки PLC adress и Modbus function code.

    Это всё должен указать производитель контроллера в документации. В шаблоне можно выбрать.

    И что за перестановка байтов и регистров?

    Тоже указывает производитель, но есть всего несколько наиболее распространённых вариантов.

    #43362
    MrEnthropy
    Участник

    Здравствуйте.
    Хорошо. Я попробовал как вы советовали. В качестве образца взял адрес 501.
    Я открыл редактор шаблона.
    Создал группу Input Register.
    Поставил начальную адресацию с 0 , поставил 16-ричную адресацию.
    Выставил адрес начального элемента 1. Количество 1
    Сам элемент назвал IR1, в коде тега выставил адрес 501.
    Тип данных выставил int.
    В порядке байтов ничего не выставил.
    Сохранил шаблон. Загрузил в конфиг.
    В тегах показывает значение «27 317 345». Оно постоянно меняется, так что очевидно что он что то сичтывает.
    Я добавил в поле Порядок байтов значение «AB», и он показал значение: «0».

    • Ответ изменён 3 недели, 2 дня назад пользователем MrEnthropy.
    #43365
    manjey73
    Участник

    Порядок байт вроде цифрами выставляется, если 4-х байтовая переменная и надо поменять регистры, то будет 2301 например.

    #43367
    manjey73
    Участник

    И зачем 16-ти ричная адресация?, у меня карта регистров в десятичном виде.

    #43368
    MrEnthropy
    Участник

    Да я осознал ошибку. Шаблон работает в 10-ричной системе, а 16-ричная используется при передачи запросов и ответов. По крайней мере я так понял.
    Но получается, в остальном я правильно обратился? По крайней мере сам modbus-адреса нужно вводить в код тега? Дальше нужно разбираться с отображение данных?

Просмотр 15 сообщений - с 1 по 15 (из 38 всего)
  • Для ответа в этой теме необходимо авторизоваться.