ЛН
-
- Ну и чё, на чем сердце успокоилось? - Cкpипaч(16.03.2025 09:18)
- да ни на чём. отложил вопрос до переделки. по теплу поменяют вент
на ес, тогда и продолжу голову ломать - LordN(16.03.2025 14:53)
- По идее, все эти изыски Сигнетикс внутри своих кишок сам должен
делать. - Cкpипaч(16.03.2025 15:17)
- может и делает, кто бы только об этом знал? LordN(80 знак., 16.03.2025 19:09)
- переформулирую вопрос. LordN(508 знак., 20.03.2025 08:25)
- Тоже делаю на RS-триггерах. - Cкpипaч(20.03.2025 08:32)
- мысли вслух. ответа не требуют LordN(278 знак., 20.03.2025 10:18)
- Тоже делаю на RS-триггерах. - Cкpипaч(20.03.2025 08:32)
- Обмен по модбасу можно подслушать какой-нибудь подходящей терминалкой и проанализировать что происходит (приличный осциллограф тоже может пригодиться). Протокол то довольно простой. - AlexG(16.03.2025 19:42)
- В чем именно проблема? По шагам: (1) в документации есть инфа как организовать чтение ровно по одому регистру? (2) Какие таймауты доступны к настройке "из коробки" ? - Cкpипaч(16.03.2025 19:28)
- переформулирую вопрос. LordN(508 знак., 20.03.2025 08:25)
- может и делает, кто бы только об этом знал? LordN(80 знак., 16.03.2025 19:09)
- По идее, все эти изыски Сигнетикс внутри своих кишок сам должен
делать. - Cкpипaч(16.03.2025 15:17)
- да ни на чём. отложил вопрос до переделки. по теплу поменяют вент
на ес, тогда и продолжу голову ломать - LordN(16.03.2025 14:53)
- На китайских буровых станках, которые притащили на севера России из за неимения отечественных... блдть, все датчики на шине модбас - более 255. Да и вообще там - всё другое, но гораздо более приближенное к реалиям запросов вахтовиков. Было приятно. И это 20 лет тому... - bnb62(12.03.2025 16:10)
- Когда-то заморочился и написал madbus-master, у которого на входе просто таблица с описанием регистров, которые нужно читать и писать, для каждого указан адрес, адрес устройства, права доступа, допустимые функции протокола, а конкретные запросы эта штука формирует сама и, когда это возможно, объединяет несколько регистров в один запрос, объединяет чтение и запись. Не реализовал только работу с битовыми переменными. Но всё это на С с элементами C++. - AlexG(12.03.2025 15:51)
- Зачем синхронный (ещё последовательно) режим использовать, если
опрашивемое одно? jlm(220 знак., 12.03.2025 10:08)
- на линии как раз висит не один и не два слейва. и часто все разные,
разных производителей и каждый со своими непредсказуемыми заебами. LordN(185 знак., 12.03.2025 11:25)
- Распределитель (счётчик с дешифратором) вычитал за цикл-два одно устроиство, пауза длительностью в заеб второго, второе и.т.д - jlm(12.03.2025 11:30)
- По идее, ведомым пофиг на формат запроса, если их адреса не касается. Вот если бы на мастере можно было бы для каждого слейва менять настройки индивидуально - было бы дело! - Nikolay_Po(12.03.2025 11:25)
- на линии как раз висит не один и не два слейва. и часто все разные,
разных производителей и каждый со своими непредсказуемыми заебами. LordN(185 знак., 12.03.2025 11:25)
- Нихрена не понял, а почему все одним пакетом не запрсить? Экономия
на заголовках же. - Cкpипaч(12.03.2025 09:43)
- Экономия-экономией. Но есть устройства (пример по ссылке в моём
сообщении ниже, с комментарием его техподдержки), которые такое не
пропустят и порвут соединение (проброс портов?). - Nikolay_Po(12.03.2025 09:56)
- да, типа того. LordN(427 знак., 12.03.2025 10:03)
- вопщем один косяк нашел, дело, как всегда не в бобине... LordN(111 знак., 13.03.2025 05:26)
- И в чем вопрос? Опрашивай по десять... пять.. два.. одному
регистру. Мастер-контроллер не имеет настроек для этого? Cкpипaч(101 знак., 12.03.2025 10:07)
- Тут есть нюанс. Некоторые модбас-клиенты, когда настроены
соответствующим образом, могут объединять запросы к близко
расположенным диапазонам адресов, даже если между этими диапазонами
есть зазор. Некоторые устройства отвечают на запросы, в диапазоне
адресов которых есть "дырки" - адреса, на которые сервер, по
стандарту, должен отвечать "Нет такого адреса". Nikolay_Po(311 знак., 12.03.2025 10:21)
- Мы делаем по стандарту. (точка) - Cкpипaч(12.03.2025 17:12)
- По крайней мере такой клиент не ломает работы другого оборудования.
А вот сервер с такими запросами - пример ТС. - Nikolay_Po(12.03.2025 17:32)
- Вы немного неаккуратно используете термины. В modbus есть master и
slave. Cкpипaч(501 знак., 12.03.2025 18:11)
- Интересно, с учётом сворачивания DEI, в Модбас вернут мастера и
слейва? А то в свежих спецификациях, мастер == клиент, слейв ==
сервер. Nikolay_Po(617 знак., 12.03.2025 18:31)
- Первоисточник - www.modbus.org. Насколько я помню, в документах им
опубликованных никто ничего не менял с 1980-го года. - Cкpипaч(12.03.2025 18:48)
- Сам протокол - да, не меняли. Но в описательной части, в
рекомендациях и прочем - встречал. И даже прямую рекомендацию
заменить терминологию. Может, в какой-то конференции (на форуме)... - Nikolay_Po(12.03.2025 19:00)
- На конференции - верю. Еще и из уст какого-нибудь стрёмного перца, в желтых штанишках... - Cкpипaч(12.03.2025 19:05)
- Сам протокол - да, не меняли. Но в описательной части, в
рекомендациях и прочем - встречал. И даже прямую рекомендацию
заменить терминологию. Может, в какой-то конференции (на форуме)... - Nikolay_Po(12.03.2025 19:00)
- мы староверы, "я твой слуга, я твой работник" LordN(4 знак., 12.03.2025 18:35, ссылка)
- Крафтверк. Слушал. В юности одна из любимых групп. - Nikolay_Po(12.03.2025 18:35)
- Извините, что встреваю, мне просто любопытно, а что (какие именно
данные) передает (или должен передавать по вашему мнению) слейв в
искусственно "склеенном" кадре, если у него наличествует "пробел" в
диапазоне запрошенных регистров? - reZident(12.03.2025 18:35)
- Любые. Они всё равно не учитываются мастером, так как не имеют
тегов на стороне мастера. Мой слейв зануляет байты пустых
промежутков. Это просто способ сократить количество служебной
информации и межкадровых промежутков. И это штатный функционал
HMI-панели, настраиваемый в среде разработки проекта. - Nikolay_Po(12.03.2025 18:40)
- Любыми? Ок. Это я и хотел узнать. - reZident(12.03.2025 18:41)
- По стандарту, если запрошен регистр, которого не существует у
слейва, слейв должен ответить ошибкой. Всё остальное - "грязные
хаки". - Nikolay_Po(12.03.2025 18:44)
- Ну да. Требование стандарта и ваш "грязный хак" вводит меня в
диссонанс. :-/ - reZident(12.03.2025 18:47)
- Это не мой грязный хак. Такую возможность обнаружили в массовых панелях HMI. Изучили. И доработали наши слейвы, чтобы поддерживали. По сути, отклонение от стандарта лишь в том, что отказ в выполнении запроса идёт только если запрос начинается с недействительного адреса, а не при наличии хотя бы одного недействительного адреса, как по стандарту. Nikolay_Po(359 знак., 12.03.2025 18:58)
- Ну да. Требование стандарта и ваш "грязный хак" вводит меня в
диссонанс. :-/ - reZident(12.03.2025 18:47)
- По стандарту, если запрошен регистр, которого не существует у
слейва, слейв должен ответить ошибкой. Всё остальное - "грязные
хаки". - Nikolay_Po(12.03.2025 18:44)
- Любыми? Ок. Это я и хотел узнать. - reZident(12.03.2025 18:41)
- Любые. Они всё равно не учитываются мастером, так как не имеют
тегов на стороне мастера. Мой слейв зануляет байты пустых
промежутков. Это просто способ сократить количество служебной
информации и межкадровых промежутков. И это штатный функционал
HMI-панели, настраиваемый в среде разработки проекта. - Nikolay_Po(12.03.2025 18:40)
- Первоисточник - www.modbus.org. Насколько я помню, в документах им
опубликованных никто ничего не менял с 1980-го года. - Cкpипaч(12.03.2025 18:48)
- нету максимального размера группового запроса? LordN(167 знак., 12.03.2025 18:28)
- Когда-то стандарт читал. Запомнилось, что максимальный размер
группового чтения - 120 регистров. - bodis(13.03.2025 09:07)
- вот что говорит про это дипсик LordN(1759 знак., 13.03.2025 10:00)
- дипсик выдал, как и следовало ожидать, весьма правдоподобный текст :) На самом деле в ответе есть ещё Byte count, поэтому для функций 3 и 4 макс. число регистров на 1 меньше - 125. А для /TCP ещё меньше, там два байта CRC убрали, 6 байт в начало добавили, а ограничение 256 байт на весь пакет оставили. Ещё 2 регистра долой. ЫЫyкпy(1 знак., 13.03.2025 16:17, картинка)
- вот что говорит про это дипсик LordN(1759 знак., 13.03.2025 10:00)
- По факту, у всех меньше чем теоретически может быть в пакете. - Cкpипaч(12.03.2025 18:49)
- Когда-то стандарт читал. Запомнилось, что максимальный размер
группового чтения - 120 регистров. - bodis(13.03.2025 09:07)
- Интересно, с учётом сворачивания DEI, в Модбас вернут мастера и
слейва? А то в свежих спецификациях, мастер == клиент, слейв ==
сервер. Nikolay_Po(617 знак., 12.03.2025 18:31)
- Что вы там вообще у ТСа понимаете, если он ни строчки кода не
привел - только какие-то долбанутые бесполезные картинки? - Eddy_Em(12.03.2025 18:05)
- А у него кода-то и нет! - Nikolay_Po(12.03.2025 18:32)
- вот да. все так. для меня модбас - черный ящик. его регистры ящички
с дырками. в одну суем данные для регистра, в другую суем
синхросигнал начала запроса записи или чтения, еще две дырки -
оттуда в проект падает вычитанные данные регистра и флаг успешного
чтения или/и записи. хотя нет. только чтения. по стандарту после
записи всегда должно проводиться чтение и сравнение этих двух. если
да, то флаг, если нет - то флага нет. - LordN(12.03.2025 18:32)
- Отсебятину несешь, нет в стандарте требования читать после записи.
Более того, регулярно попадаются слейвы у которых регистр-на-запись
вообще на чтение недоступен. Cкpипaч(75 знак., 12.03.2025 18:59)
- стандарта не читал, и читать не буду. я транслирую то, что говорит
производитель, там парни вроде дотошные, так вот, с их слов всё с
точностью до наеборот. запись без чтения - это мимо стандарта. LordN(90 знак., 13.03.2025 05:04)
- Повторяю, функция 6 (запись регистра) и функция 16 (запись
нескольких) состоят из команды мастера и ответа слейва. Ответ
означает успешную запись (кроме ответа об ошибке). Cкpипaч(209 знак., 13.03.2025 06:49)
- похоже твоя правда, но с оговорками LordN(1762 знак., 13.03.2025 10:06)
- Раз уж пошли оговорки, зачастую,проверку нужно выполнять чтением
ДРУГОГО регистра. - Cкpипaч(13.03.2025 11:59)
- да, и это засада :о) LordN(150 знак., 13.03.2025 12:44)
- Раз уж пошли оговорки, зачастую,проверку нужно выполнять чтением
ДРУГОГО регистра. - Cкpипaч(13.03.2025 11:59)
- похоже твоя правда, но с оговорками LordN(1762 знак., 13.03.2025 10:06)
- Повторяю, функция 6 (запись регистра) и функция 16 (запись
нескольких) состоят из команды мастера и ответа слейва. Ответ
означает успешную запись (кроме ответа об ошибке). Cкpипaч(209 знак., 13.03.2025 06:49)
- стандарта не читал, и читать не буду. я транслирую то, что говорит
производитель, там парни вроде дотошные, так вот, с их слов всё с
точностью до наеборот. запись без чтения - это мимо стандарта. LordN(90 знак., 13.03.2025 05:04)
- Отсебятину несешь, нет в стандарте требования читать после записи.
Более того, регулярно попадаются слейвы у которых регистр-на-запись
вообще на чтение недоступен. Cкpипaч(75 знак., 12.03.2025 18:59)
- Мы такие :о) - Cкpипaч(12.03.2025 18:12)
- Вы немного неаккуратно используете термины. В modbus есть master и
slave. Cкpипaч(501 знак., 12.03.2025 18:11)
- По крайней мере такой клиент не ломает работы другого оборудования.
А вот сервер с такими запросами - пример ТС. - Nikolay_Po(12.03.2025 17:32)
- да. "пустых" регистров в зоопарках слейвов дохера и больше. LordN(68 знак., 12.03.2025 10:55)
- Я говорю коллеге: "Давай уплотним в один блок?" Он: "Нет, у нас нет
на это времени. Вдруг мне придётся параметр добавлять, как я потом
все адреса буду перетряхивать? У меня не только здесь нужно
изменить, но и там. Нет, оставляем как есть." Пример из жизни. - Nikolay_Po(12.03.2025 11:24)
- Я делал два блока - один с полным набором регистров, другой для
быстрого чтения - только самое необходимое. Т.е. те же переменные,
но по разному сгруппированным адресам. - Pыгиcтp(13.03.2025 12:43,
)
- не, как это появляется в жизни, я это прекрасно понимаю, сам такой, на этапе когда "а давай сделаем" никто ни о чем не думает, вот поэтому так и выходит. LordN(174 знак., 12.03.2025 14:04)
- Я делал два блока - один с полным набором регистров, другой для
быстрого чтения - только самое необходимое. Т.е. те же переменные,
но по разному сгруппированным адресам. - Pыгиcтp(13.03.2025 12:43,
- Я говорю коллеге: "Давай уплотним в один блок?" Он: "Нет, у нас нет
на это времени. Вдруг мне придётся параметр добавлять, как я потом
все адреса буду перетряхивать? У меня не только здесь нужно
изменить, но и там. Нет, оставляем как есть." Пример из жизни. - Nikolay_Po(12.03.2025 11:24)
- Мы делаем по стандарту. (точка) - Cкpипaч(12.03.2025 17:12)
- Тут есть нюанс. Некоторые модбас-клиенты, когда настроены
соответствующим образом, могут объединять запросы к близко
расположенным диапазонам адресов, даже если между этими диапазонами
есть зазор. Некоторые устройства отвечают на запросы, в диапазоне
адресов которых есть "дырки" - адреса, на которые сервер, по
стандарту, должен отвечать "Нет такого адреса". Nikolay_Po(311 знак., 12.03.2025 10:21)
- да, типа того. LordN(427 знак., 12.03.2025 10:03)
- Экономия-экономией. Но есть устройства (пример по ссылке в моём
сообщении ниже, с комментарием его техподдержки), которые такое не
пропустят и порвут соединение (проброс портов?). - Nikolay_Po(12.03.2025 09:56)
- Если у вас Modbus TCP (стоило уточнить), то подобный вопрос уже был. Nikolay_Po(1067 знак., 12.03.2025 09:36, ссылка)
- Что значит "подтверждение ответа первого"? У вас TCP? - Nikolay_Po(12.03.2025 09:24)
- нет обычный RS485 с modbus rtu - LordN(12.03.2025 09:59)
- Что такое "подтверждение ответа от первого"? Это кадр протокола или
событие в контексте логики вашей программы? - Nikolay_Po(12.03.2025 10:20)
- это значит, что после строба на входе ^ розового ящичка "отправить запрос" на выходе rdy появляется нулик и он там висит пока от слейва не придёт ответ с валидными данными LordN(1 знак., 13.03.2025 05:10, картинка)
- Возможно тут разделены линии передачи и приема, поэтому можно
одновременно и передавать запрос следующему и получать ответ от
текущего. - AlexBi(12.03.2025 15:28)
- Наверное, ТС имел ввиду, что передача следующего запроса
формируется не по таймеру, а сразу после получения ответа на
предыдущий запрос - для увеличения скорости опроса. Так я понимаю
его молчание. - Nikolay_Po(12.03.2025 15:43)
- Конец ответа скорее всего определяется по паузе, я не видел других
вариантов. Т.е. пауза между ответом и запросом будет. - AlexBi(12.03.2025 16:04)
- Ну, пауза на канальном уровне обязательна, это не обсуждается. Речь
о том, что опрос идёт максимальным темпом. Сразу по завершению
предыдущей транзакции на шине, начинается следующая. Без ожидания
иных пауз, кроме межкадрового промежутка. - Nikolay_Po(12.03.2025 18:35)
- Тут может быть засада. RTU-ная пауза для определения
окончания/начала фрейма в реализации разных слейвом может
формироваться не очень точно. Кроме того, по дороге могут стоять
репитеры или хуже того - радиомодемы, которые также дают (могут
давать) задержку при переходе на прием следующего фрейма. Так что,
задержка нового запроса после окончания приема ответа у мастера
должна быть настриваемым параметром и настроена на самый
"тормозной" в этой цепочке слейв. - reZident(12.03.2025 18:40)
- Для [радио]модемов придуман Modbus-ASCII. - Cкpипaч(12.03.2025 18:46)
- Изначально - для проводных модемов. ASCII RTU с ограничением перечня используемых кодов был задуман так, чтобы произвольные коды из RTU не вводили модем в режим настройки. reZident(266 знак., 12.03.2025 18:52)
- У меня в факультативной разработке модем для RTU. Принимает кадры. Передаёт по радио, восстанавливает кадры и транслирует дальше. С учётом относительно высокой скорости радио, задержка преимущественно на длину самого кадра. В типовые таймауты укладывается (по результатам моего анализа). Но ещё не реализовал до конца. - Nikolay_Po(12.03.2025 18:50)
- Так и есть. Этот параметр, интервала между последним ответом и новым запросом - настраиваемый параметр мастера. - Nikolay_Po(12.03.2025 18:42)
- Для [радио]модемов придуман Modbus-ASCII. - Cкpипaч(12.03.2025 18:46)
- Тут может быть засада. RTU-ная пауза для определения
окончания/начала фрейма в реализации разных слейвом может
формироваться не очень точно. Кроме того, по дороге могут стоять
репитеры или хуже того - радиомодемы, которые также дают (могут
давать) задержку при переходе на прием следующего фрейма. Так что,
задержка нового запроса после окончания приема ответа у мастера
должна быть настриваемым параметром и настроена на самый
"тормозной" в этой цепочке слейв. - reZident(12.03.2025 18:40)
- Ну, пауза на канальном уровне обязательна, это не обсуждается. Речь
о том, что опрос идёт максимальным темпом. Сразу по завершению
предыдущей транзакции на шине, начинается следующая. Без ожидания
иных пауз, кроме межкадрового промежутка. - Nikolay_Po(12.03.2025 18:35)
- Конец ответа скорее всего определяется по паузе, я не видел других
вариантов. Т.е. пауза между ответом и запросом будет. - AlexBi(12.03.2025 16:04)
- Наверное, ТС имел ввиду, что передача следующего запроса
формируется не по таймеру, а сразу после получения ответа на
предыдущий запрос - для увеличения скорости опроса. Так я понимаю
его молчание. - Nikolay_Po(12.03.2025 15:43)
- В таком случае я подобное проходил. Оказалось, что клиент умеет запрашивать непересекающиеся диапазоны регистров, с зазорами. А мой сервер не умел, умел только по одному диапазону параметров за раз. Два разных диапазона, даже смежных, не мог. Nikolay_Po(696 знак., 12.03.2025 10:14)
- Что такое "подтверждение ответа от первого"? Это кадр протокола или
событие в контексте логики вашей программы? - Nikolay_Po(12.03.2025 10:20)
- нет обычный RS485 с modbus rtu - LordN(12.03.2025 09:59)
- Ну и чё, на чем сердце успокоилось? - Cкpипaч(16.03.2025 09:18)