Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: маленький вопрос по Modbus
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
UniBomb
Добрый день. Использую Modbus RTU по интерфейсу rs-485. Краем уха слышал где-то, что в зависимости от того, какую разновдность протокола и по какому интерфейсу я использую это безобразие регистры хранения имеют разные адреса. Т.е. в одном случае адрес первого регистра 1, а в другом 40001. В стандарте я это либо пропустил, либо действительно об этом не сказано, так что просветите пожалуйста smile.gif
MrYuran
Есть как бы 2 стандарта.
1 - стандарт конторы Modicon, которая собс-но модбас и выдумала
2 - стандарт Modbus IDA (modbus.org), который дополнен, расширен и постоянно дорабатывается.

1-й был заточен под конкретные ПЛК, и вот там как раз имеется привязка по номерам регистров
2 -й более универсальный.

PS: это чисто ИМХО, как я себе представляю.
OlegH
Нет, все проще.
Номера регистров по протоколу передаются всегда начиная с 0-го номера.
При описании же адресов в SCADA-системе ПРИНЯТО (но стандарт MODBUS как таковой тут не причем) нумеровать их же с 1-цы, и при этом первым символом адреса (то есть номера регистра) указывать тип регистра (а именно какие команды MODBUS будут использоваться). Так, первый символ 4 означает что будут использоваться команды 3 для чтения и 6/16 для записи, первый символ 3 означает что будут использоваться команды с кодом 4 для чтения, а запись в эти регистры недопустима (это входные регистры). Первый символ 1 - указывает на битовые регистры (команда с кодом 1).
Таким образом, 40001 - означает доступ к регистру 0 с возможностью чтения командой 3 и записи командами 6 или 16. Если нужен номер регистра больше чем 10000 (например 20000), то в скаде этот номер должен быть записан как 420001 (То есть первая цифра - именно служебный символ, в протоколе он не используется!).
Если SCADA-системы не применяются, можно этим не заморачиваться
UniBomb
Цитата(Олег Хохлов @ Apr 20 2009, 21:28) *
Таким образом, 40001 - означает доступ к регистру 0 с возможностью чтения командой 3 и записи командами 6 или 16. Если нужен номер регистра больше чем 10000 (например 20000), то в скаде этот номер должен быть записан как 420001 (То есть первая цифра - именно служебный символ, в протоколе он не используется!).
Если SCADA-системы не применяются, можно этим не заморачиваться


В том то и дело, что до этого никакую SCADA мы не использовали. А правильно ли я понял, что если в SCADA прописать опрос регистра с номером 40001, то фактически будет послан такой запрос:

[xx][03][00][01]...[crcH][crcL]

где [00][01] - это и есть адрес регистра?
OlegH
Нет, будет послан запрос для адреса регистра 0, то есть
[xx][03][00][00]...[crcH][crcL]
либо запрос с кодом команды 0x10, если регистров несколько подряд и скада решит запросить их одним запросом (массивом).
Я ж сказал (может это получилось несколько сумбурно) - в адресации протокола регистры с 0 нумеруются,а при описании в скаде они же - с единицы, и при этом перед номером регистра приписывается кодовый символ, определенным образом указывающий скаде, какие команды использовать для этого регистра (в данном случае это 4).
Повторюсь - это просто принятые соглашения в скада-системах (возможно не всех), чтобы запутать пользователя.
Если вы не используете готовую скаду, то лучше на это не ориентироваться и делать по-человечески smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.