UniBomb 0 20 апреля, 2009 Опубликовано 20 апреля, 2009 · Жалоба Добрый день. Использую Modbus RTU по интерфейсу rs-485. Краем уха слышал где-то, что в зависимости от того, какую разновдность протокола и по какому интерфейсу я использую это безобразие регистры хранения имеют разные адреса. Т.е. в одном случае адрес первого регистра 1, а в другом 40001. В стандарте я это либо пропустил, либо действительно об этом не сказано, так что просветите пожалуйста :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 20 апреля, 2009 Опубликовано 20 апреля, 2009 · Жалоба Есть как бы 2 стандарта. 1 - стандарт конторы Modicon, которая собс-но модбас и выдумала 2 - стандарт Modbus IDA (modbus.org), который дополнен, расширен и постоянно дорабатывается. 1-й был заточен под конкретные ПЛК, и вот там как раз имеется привязка по номерам регистров 2 -й более универсальный. PS: это чисто ИМХО, как я себе представляю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegH 0 20 апреля, 2009 Опубликовано 20 апреля, 2009 · Жалоба Нет, все проще. Номера регистров по протоколу передаются всегда начиная с 0-го номера. При описании же адресов в SCADA-системе ПРИНЯТО (но стандарт MODBUS как таковой тут не причем) нумеровать их же с 1-цы, и при этом первым символом адреса (то есть номера регистра) указывать тип регистра (а именно какие команды MODBUS будут использоваться). Так, первый символ 4 означает что будут использоваться команды 3 для чтения и 6/16 для записи, первый символ 3 означает что будут использоваться команды с кодом 4 для чтения, а запись в эти регистры недопустима (это входные регистры). Первый символ 1 - указывает на битовые регистры (команда с кодом 1). Таким образом, 40001 - означает доступ к регистру 0 с возможностью чтения командой 3 и записи командами 6 или 16. Если нужен номер регистра больше чем 10000 (например 20000), то в скаде этот номер должен быть записан как 420001 (То есть первая цифра - именно служебный символ, в протоколе он не используется!). Если SCADA-системы не применяются, можно этим не заморачиваться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
UniBomb 0 21 апреля, 2009 Опубликовано 21 апреля, 2009 · Жалоба Таким образом, 40001 - означает доступ к регистру 0 с возможностью чтения командой 3 и записи командами 6 или 16. Если нужен номер регистра больше чем 10000 (например 20000), то в скаде этот номер должен быть записан как 420001 (То есть первая цифра - именно служебный символ, в протоколе он не используется!). Если SCADA-системы не применяются, можно этим не заморачиваться В том то и дело, что до этого никакую SCADA мы не использовали. А правильно ли я понял, что если в SCADA прописать опрос регистра с номером 40001, то фактически будет послан такой запрос: [xx][03][00][01]...[crcH][crcL] где [00][01] - это и есть адрес регистра? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegH 0 21 апреля, 2009 Опубликовано 21 апреля, 2009 · Жалоба Нет, будет послан запрос для адреса регистра 0, то есть [xx][03][00][00]...[crcH][crcL] либо запрос с кодом команды 0x10, если регистров несколько подряд и скада решит запросить их одним запросом (массивом). Я ж сказал (может это получилось несколько сумбурно) - в адресации протокола регистры с 0 нумеруются,а при описании в скаде они же - с единицы, и при этом перед номером регистра приписывается кодовый символ, определенным образом указывающий скаде, какие команды использовать для этого регистра (в данном случае это 4). Повторюсь - это просто принятые соглашения в скада-системах (возможно не всех), чтобы запутать пользователя. Если вы не используете готовую скаду, то лучше на это не ориентироваться и делать по-человечески :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться