- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Диапазон адресов ModBus
Модератор: Глоб.модераторы
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Диапазон адресов ModBus
Всем здрасьти!
Разбираясь с регистрами модбас наткнулся на такой момент интересный - в официальной литературе (разного рода стандарты) не нашел конечного адреса регистров модбас...есть только начальный.
Небольшое описание команды: Особенно интересны адрес старшего и младшего байтов - значит всего адресов, допустим Holding registers будет 65535, а это 40001 - 105536, но в некоторых статьях и на форумах встречал иное - 40001-50000.
Может кто подскажет, какое утверждение верное?
Сомнение разбудила вот такая литература с описанием регистров: На картинке описаны адреса для функций 0х06 и 0х0А
По моим расчетам получается адрес параметра "Секунды" будет 105286
Разбираясь с регистрами модбас наткнулся на такой момент интересный - в официальной литературе (разного рода стандарты) не нашел конечного адреса регистров модбас...есть только начальный.
Небольшое описание команды: Особенно интересны адрес старшего и младшего байтов - значит всего адресов, допустим Holding registers будет 65535, а это 40001 - 105536, но в некоторых статьях и на форумах встречал иное - 40001-50000.
Может кто подскажет, какое утверждение верное?
Сомнение разбудила вот такая литература с описанием регистров: На картинке описаны адреса для функций 0х06 и 0х0А
По моим расчетам получается адрес параметра "Секунды" будет 105286
-
- почётный участник форума
- Сообщения: 1076
- Зарегистрирован: 29 апр 2014, 09:57
- Имя: Рыбкин Владимир Геннадьевич
- Страна: Россия
- город/регион: Тверь
- Благодарил (а): 77 раз
- Поблагодарили: 150 раз
-
- эксперт
- Сообщения: 2099
- Зарегистрирован: 15 авг 2011, 21:36
- Имя: Пупков Сергей Викторович
- Страна: Россия
- город/регион: Москва
- Благодарил (а): 138 раз
- Поблагодарили: 174 раза
Диапазон адресов ModBus
В любом простом вопросе можно запутать дело так, что не разберешься! Особенно, когда дело касается Siemens
40000 - 49999 (В десятичном формате - dec) это Holding Registr - это однозначно.
Есть еще расширенные 400'000 - 465'535 (в dec) - Это поле включает в себя первое.
Как? Когда на входе драйвера сименс пишешь адрес из 5 знаков - он делает одно преобразование с адресом, а если из 6 знаков, то другое.
Один из моих старых постов.
40000 - 49999 (В десятичном формате - dec) это Holding Registr - это однозначно.
Есть еще расширенные 400'000 - 465'535 (в dec) - Это поле включает в себя первое.
Как? Когда на входе драйвера сименс пишешь адрес из 5 знаков - он делает одно преобразование с адресом, а если из 6 знаков, то другое.
Один из моих старых постов.
Т.е. Допустимо использовать адрес, который на шине 0000-FFFF (hex) . Т.е. 65534 возможных вариантов адреса. А вот дальше начинается интерпретация разработчиков оборудования. Кто что имел ввиду. И конечно же каждый из них единственно верно понимает стандартОсновная особенность, что библиотека, предлагаемая разработчиками хоть и удобна, но имеет существенную особенность.
Когда указываем адрес данных с функцией 03, то функциональный блок делает такое преобразование
на входе х = 40'001-49'999, на выходе (в байтовой посылке) адрес будет У = х - 40'001
на входе х = 400'001 - 465'535, на выходе У = х - 400'001
...
У меня основную сложность вызвало сделать посылку с адресом 42'044. Чтобы ее послать, нужно указать адрес 442'045. Вот попробуй догадайся :)
-
- администратор
- Сообщения: 18827
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 989 раз
- Поблагодарили: 1872 раза
Диапазон адресов ModBus
Какого устройства? :) У каждого устройства адресация может быть своя.
По вопросам работы Форума можно обратиться по этим контактам.
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Диапазон адресов ModBus
Так оно и есть))) начинал заполнять адреса 0х00 - 40001, 0х02 -40003 и тд, в итоге набрал 37 листов с описанием всех типов регистров входных/выходных каналов и еще листов 20 будет с описанием параметров регуляторов
Вот такого, даже не подозревал спасибо большое за подсказку, как раз таки в сименс и нужно будет организовать передачу. В блоке модбас на входе начального адреса надо будет прописать адрес с апострофом или как?
Отечественный плк базис-100, на сайте есть методичка с описанием адресов в хекс-формате, когда перевел в дек-формат то возник данный вопрос
Но если стандарт модбас поддерживает расширенную адресацию, то можно сказать вопрос решен)))
-
- эксперт
- Сообщения: 2099
- Зарегистрирован: 15 авг 2011, 21:36
- Имя: Пупков Сергей Викторович
- Страна: Россия
- город/регион: Москва
- Благодарил (а): 138 раз
- Поблагодарили: 174 раза
Диапазон адресов ModBus
Нет в стандарте расширенной адресации, она есть у сименса :)
Ради интереса заглянул в стандарт модбаса
И не нашел там про 40001-49999 упоминаний для Holding Registres
Только отсылку, что такое возможно по местечковым спецификациям, разработанным на базе стандарта.
Там все просто написано: от 0 до 65535. Сочетание адреса и номера функции должно уже определять целевую область памяти в приложении. Т.е. для каждой функции чтения/записи должна быть своя уникальная область памяти с адресами от 0 до 65535.
Такая простота мне нравиться
Но у сименса все не просто так!!!
-
- эксперт
- Сообщения: 2099
- Зарегистрирован: 15 авг 2011, 21:36
- Имя: Пупков Сергей Викторович
- Страна: Россия
- город/регион: Москва
- Благодарил (а): 138 раз
- Поблагодарили: 174 раза
Диапазон адресов ModBus
На всякий случай уточню, что речь идет о S7-1200 функция MB_MASTER v2.2
Просто на вход пишешь число в десятичном формате, как есть.
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Диапазон адресов ModBus
Мне как раз таки и нужны будут функции новых контроллеров s7-1500)))) но думаю буду использовать mb_client v 4.0, с этим блоком я уже работал, есть наработки... и к тому же Сименс будет мастером сети.
Значит в моем примере адрес должен быть 400001-465536, придется перелопатить немного табличку свою
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Диапазон адресов ModBus
Знатоки не ошибаются!)))
Проверил модсканом, значение регистров выше чем 49999...
Следующим идет 410000 регистр.
Данные принимаются
Век живи -век учись!
Проверил модсканом, значение регистров выше чем 49999...
Следующим идет 410000 регистр.
Данные принимаются
Век живи -век учись!
-
- здесь недавно
- Сообщения: 5
- Зарегистрирован: 06 сен 2016, 12:36
- Имя: Иванов Александр Семенович
- Страна: Россия
Диапазон адресов ModBus
С адресацией регистров у Modbus путаница!
Есть 6 знаковый формат.
Для каждого типа регистра делаем приставку - 0.., 1.., 3.., 4...
(Где - №2? - а его просто нет...)
(Почему они не взяли нумерацию на основе номеров функций 0x01, 0x02, 0x03, 0x04? - неизвестно...)
6 значный диапазон; Тип; Доступ; Название
0XXXXX | bit | RW | Discrete Output Coils
1XXXXX | bit | RO | Discrete Input Contacts
3XXXXX | word | RO | Analog Input Registers
4XXXXX | word | RW | Analog Output Holding Registers
Но в каждом типе регистра доступно только 65536 регистров!
Это значит что можно указывать только такие номера X00000..X65535.
А еще иногда не используют 6-ти знаковый формат - просто указывают номер регистра и название его типа.
_____________________________________________________________________
А еще в старых описаниях/стандартах можно найти диапазоны. Но диапазоны регистров никто не использует! (это касается и контроллеров и устройств) Изначально предполагалось что для каждого типа будет отведено всего 10000 регистров. Текущая ситуация - у каждого типа (4 типа) используется весь доступный диапазон - 65536 доступных регистров.
Диапазоны регистров (которые никто не использует!):
Discrete Output Coils: 1-9999; Read-Write;
Discrete Input Contacts: 10001-19999; Read-Only;
Analog Input Registers: 30001-39999; Read-Only;
Analog Output Holding Registers: 40001-49999; Read-Write;
Есть 6 знаковый формат.
Для каждого типа регистра делаем приставку - 0.., 1.., 3.., 4...
(Где - №2? - а его просто нет...)
(Почему они не взяли нумерацию на основе номеров функций 0x01, 0x02, 0x03, 0x04? - неизвестно...)
6 значный диапазон; Тип; Доступ; Название
0XXXXX | bit | RW | Discrete Output Coils
1XXXXX | bit | RO | Discrete Input Contacts
3XXXXX | word | RO | Analog Input Registers
4XXXXX | word | RW | Analog Output Holding Registers
Но в каждом типе регистра доступно только 65536 регистров!
Это значит что можно указывать только такие номера X00000..X65535.
А еще иногда не используют 6-ти знаковый формат - просто указывают номер регистра и название его типа.
_____________________________________________________________________
А еще в старых описаниях/стандартах можно найти диапазоны. Но диапазоны регистров никто не использует! (это касается и контроллеров и устройств) Изначально предполагалось что для каждого типа будет отведено всего 10000 регистров. Текущая ситуация - у каждого типа (4 типа) используется весь доступный диапазон - 65536 доступных регистров.
Диапазоны регистров (которые никто не использует!):
Discrete Output Coils: 1-9999; Read-Write;
Discrete Input Contacts: 10001-19999; Read-Only;
Analog Input Registers: 30001-39999; Read-Only;
Analog Output Holding Registers: 40001-49999; Read-Write;
-
- администратор
- Сообщения: 18827
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 989 раз
- Поблагодарили: 1872 раза
Диапазон адресов ModBus
Так уж и никто?
И вообще, я реплики не очень понял, в теме по которой ответ давно никому не нужен, свои личные заблуждения. Вы о чём, вообще?
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 1076
- Зарегистрирован: 29 апр 2014, 09:57
- Имя: Рыбкин Владимир Геннадьевич
- Страна: Россия
- город/регион: Тверь
- Благодарил (а): 77 раз
- Поблагодарили: 150 раз
Диапазон адресов ModBus
Попробовал в ОВЕН ПЛК MODBUS SLAVE (CODESYS) создать 10 переменных по 2 байта, по адресу десятой переменной расположил в адресном пространстве слейва массив на 10 переменных типа Word (общий размер занятой памяти 19 регистров). Программа компилируется, ошибок нет, всё работает, но при запросе мастером информации слейв выдаёт только первые 10 регистров, при обращении за содержимым 11 ячейки со вторым элементом массива мастер получает сообщение о неправильном адресе. Из-за этого при адресном пространстве 1000 слов надо ручками добавлять каждый регистр по отдельности, массивов адресов CoDeSys 2.3 не понимает. :(
-
- администратор
- Сообщения: 18827
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 989 раз
- Поблагодарили: 1872 раза
Диапазон адресов ModBus
Так это проблема конкретной реализации, а не то что "никто не использует"
Используют и довольно широко, и это работает, просто где-то это сделано криво, где-то нет.
По вопросам работы Форума можно обратиться по этим контактам.
-
- эксперт
- Сообщения: 3648
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Диапазон адресов ModBus
Стандарт Модбас разработан инженерами Шнейдер Электрика более 50 лет назад. У них был контроллер с адресацией от 0 до 65535 (64 килобайта). Соответственно стандарт устарел и трактуется в некоторых вопросах более вольно и даже более проще...
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Диапазон адресов ModBus
Михаил, не шнейдер, а модикон разработал стандарт...это уже позже их купил шнейдер электрик)))
Извините, а какие адреса тогда используют?
-
- здесь недавно
- Сообщения: 5
- Зарегистрирован: 06 сен 2016, 12:36
- Имя: Иванов Александр Семенович
- Страна: Россия
Диапазон адресов ModBus
0-65535 (1-65536) во всех 4 "адресных пространствах"/"типах регистров".megavolt86 писал(а):Извините, а какие адреса тогда используют?
Лично проверял это в контроллерах фирм: Schneider Electric, B&R, Emicon, ProSoft (и еще каких-то, щас и не упомню).
Жесткого ограничения как в приведенном выше описании нигде не встречал.
-
- администратор
- Сообщения: 18827
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 989 раз
- Поблагодарили: 1872 раза
Диапазон адресов ModBus
Даже если и так, то - это кому-то осложняет жизнь?
По вопросам работы Форума можно обратиться по этим контактам.
-
- частый гость
- Сообщения: 409
- Зарегистрирован: 20 ноя 2012, 13:45
- Имя: :.О.N.Ф
- Страна: Россия
- Благодарил (а): 3 раза
- Поблагодарили: 7 раз
Диапазон адресов ModBus
Но ведь в б+р мы сами можем задать массив, который будет мапиться на соответствующие адреса, и для каждого "пространства" команд можем задать разные массивы. Разве нет?
«Сразу видно внимание к каждой мелочи, неиспорченным не осталось ничто».