1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Опрос булевских переменных через Modbus RTU/ASCII

RS-485, ProfiBUS, 4-20 mA, Wi-Fi, GSM и так далее
Ответить

Автор темы
dsai
здесь недавно
здесь недавно
Сообщения: 94
Зарегистрирован: 21 дек 2019, 19:49
Имя: Дмитрий
Страна: Россия
город/регион: Тамбов
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение dsai »

Добрый день, уважаемые коллеги!

Дано:
1. Контроллер, в который залита программа, лезть в которую нет ни желания, ни разрешения.
2. Арм оператора, которое хочет считывать данные с контроллера.
3. Есть карта регистров.
4. Опрос выполняется через модемы (прозрачный канал с использованием CSD)

Вопрос:
Если считывать каждую булевую переменную отдельно - опрос может занять долгое время, а это затраты на связь и уменьшение количества опрашиваемых контроллеров одним модемом. Так вот, допустим первая булевая переменная лежит по стандартному адресу 12141 (адрес Modbus - 2140). Могу ли я читать по стандартному адресу 42141 (тот же адрес Modbus, но функция чтения другая) и получу ли я 16 булевских значений, начиная с того, которое мне нужно?

Заранее прошу прощения, как-то описать толком не получается. И очень давно не сталкивался именно с чтением булевских значений. В своих программах всегда запихиваю булевские в ворд.
________________________________________________
Не так страшны первые 90% ПНР, как вторые 90% ПНР

jov
здесь недавно
здесь недавно
Сообщения: 21
Зарегистрирован: 15 фев 2017, 19:30
Имя: Викулов Евгений Сергееевич
Страна: Россия
город/регион: Кемерово
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение jov »

Если бы "слово состояния" формировалось в контроллере, то его адрес и состав, скорее всего упомянули бы в карте. Придётся опрашивать отдельные coil'ы

stesl
эксперт
эксперт
Сообщения: 1010
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 94 раза
Поблагодарили: 136 раз

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение stesl »

Насколько я помню Модбас речь о групповом опросе. Что за "стандартные" адреса не совсем понятно. В Модбасе есть стандартные номера регистров.
Вопрос, что за булевые значения? Входа? Выхода? Или просто пользовательские переменные.
Конкретно для DO есть команда групповой записи, 0х0F если не ошибаюсь. Группового чтения не припоминаю.

Прошу прощения. Память - решето. Есть команды и для группового чтения. 0х02 - 0х04

BraS
здесь недавно
здесь недавно
Сообщения: 67
Зарегистрирован: 02 авг 2019, 10:27
Имя: Сергей
город/регион: Санкт-Петербург
Благодарил (а): 3 раза
Поблагодарили: 13 раз

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение BraS »

01 команда ("Read Coils") позволяет запрашивать чтение до 2000 битов. Модбас их сам упакует по 16 штук в корзинку и отправит. :ext_book:
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17583
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 824 раза
Поблагодарили: 1653 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение Jackson »

stesl писал(а): 02 мар 2020, 04:00 Прошу прощения. Память - решето. Есть команды и для группового чтения. 0х02 - 0х04
Да. И всё должно работать.
И ещё вопрос в том, чем опрашивать. Встречал мастеры, в которых если запрашиваешь 1 бит, то фактически он читает 16 бит, а возвращает всё равно один - тот, который и запросил. Тут нет даже смысла читать по одному биту - служебного трафика в разы больше чем полезных данных. Читать всю пачку, потом локально разбирать.
По вопросам работы Форума можно обратиться по этим контактам.

Автор темы
dsai
здесь недавно
здесь недавно
Сообщения: 94
Зарегистрирован: 21 дек 2019, 19:49
Имя: Дмитрий
Страна: Россия
город/регион: Тамбов
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение dsai »

Мастером выступает ОРС сервер Lectus. Булевские переменные - внутренние (пользовательские) лежат по адресам начиная с 2049 и далее. На каждую переменную соответственно свой адрес. И орс сервер читает именно один бит. В мануале же указано, если читаешь булевскую, то перед адресом добавляешь 1 и будет он читать булевскую, если инт или ворд то 4. Насколько я помню эта цифра и есть тип команды, которой читаем (в моем случае один коил или холдинг регистр соответственно)
________________________________________________
Не так страшны первые 90% ПНР, как вторые 90% ПНР
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17583
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 824 раза
Поблагодарили: 1653 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение Jackson »

dsai писал(а): 02 мар 2020, 11:03 И орс сервер читает именно один бит.
сниффером смотрели?
По вопросам работы Форума можно обратиться по этим контактам.

jov
здесь недавно
здесь недавно
Сообщения: 21
Зарегистрирован: 15 фев 2017, 19:30
Имя: Викулов Евгений Сергееевич
Страна: Россия
город/регион: Кемерово
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение jov »

dsai писал(а): 02 мар 2020, 11:03 И орс сервер читает именно один бит. В мануале же указано, если читаешь булевскую, то перед адресом добавляешь 1 и будет он читать булевскую, если инт или ворд то 4.
Значит ваш мастер спрашивает именно один бит, остальное дополняется нолями. Как отметили выше, по стандарту, за раз вы можете вычитать до 2000 битовых регистров, расположенных последовательно. То-есть больший объём информации за один запрос и так получить невозможно, используете ли вы команду 1х или 4х/3х.

Автор темы
dsai
здесь недавно
здесь недавно
Сообщения: 94
Зарегистрирован: 21 дек 2019, 19:49
Имя: Дмитрий
Страна: Россия
город/регион: Тамбов
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение dsai »

jov писал(а): 02 мар 2020, 13:44
dsai писал(а): 02 мар 2020, 11:03 И орс сервер читает именно один бит. В мануале же указано, если читаешь булевскую, то перед адресом добавляешь 1 и будет он читать булевскую, если инт или ворд то 4.
Значит ваш мастер спрашивает именно один бит, остальное дополняется нолями. Как отметили выше, по стандарту, за раз вы можете вычитать до 2000 битовых регистров, расположенных последовательно. То-есть больший объём информации за один запрос и так получить невозможно, используете ли вы команду 1х или 4х/3х.
Мне достаточно будет прочитать 8 регистров подряд, то есть 8 бит
________________________________________________
Не так страшны первые 90% ПНР, как вторые 90% ПНР

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1455
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 181 раз

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение Madwolf »

Регистр это ячейка памяти, она не может быть 1 бит. Обычно в ПЛК 16. Таким образом, нужно пробовать читать сразу с командой 3 или 4, и уже разбирать по месту полученные данные
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17583
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 824 раза
Поблагодарили: 1653 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение Jackson »

Madwolf писал(а): 06 мар 2020, 19:07 Регистр это ячейка памяти, она не может быть 1 бит. Обычно в ПЛК 16. Таким образом, нужно пробовать читать сразу с командой 3 или 4, и уже разбирать по месту полученные данные
А как тогда быть с этим?
https://asutpforum.ru/viewtopic.php?p=97528#p97528
VanMo писал(а): 09 апр 2019, 18:05 Если нужно запросить один бит, можно не заморачиваться с диапазоном и использовать тип регистра 0(1)x_single_bit. В этом случае панель принудительно запрашивает только один бит. В случае с обычным 0(1)x, панель запросит 16, даже если команда пользователя на запрос одного.
По вопросам работы Форума можно обратиться по этим контактам.

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1455
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 181 раз

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение Madwolf »

Я по сабжу отписал логику, как бы я делал. В случае "А как тогда быть с этим?", контроллер обнаруживает нарушение доступа к памяти (запрос туда, куда нельзя) и выдает ошибку. Если честно, я не встречал подобных запретов на практике, обычно запрет идет по адресу слова, а не по биту. При условии, что адреса команд 0х представляют собой адрес слова + указание бита.
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17583
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 824 раза
Поблагодарили: 1653 раза

Опрос булевских переменных через Modbus RTU/ASCII

Сообщение Jackson »

Madwolf писал(а): 10 мар 2020, 12:56 При условии, что адреса команд 0х представляют собой адрес слова + указание бита.
это важное допущение, на котором всё и держится.
По вопросам работы Форума можно обратиться по этим контактам.
Ответить

Вернуться в «Интерфейсы, протоколы, связь»