-
- предложу попробовать передать с двумя стоп-битами - Vit(09.05.2026 11:00)
- На другие команды, переданные с одним стоп-битом, оно не ругается - Yft(12.05.2026 11:44)
- я не знаю, что конкретно обозначает ругань Frame Contains Error -
это относится к кадру интерфейса или к содержимому пакета. интерес
был у вас. - Vit(12.05.2026 11:58)
- Насколько я понял, он некорректно разбирает команду 0x10 и ошибочно
ждет на этом месте CRC с какой-то радости - Yft(12.05.2026 12:07)
- :) да постить дольше, чем одну птичку в терминале переставить - Vit(12.05.2026 12:16)
- Брутфорс - наше всё! :-) Я поковырялся в дебрях исходников, походу да, у них там бага: Yft(1572 знак., 12.05.2026 12:21, ссылка, +1)
- :) да постить дольше, чем одну птичку в терминале переставить - Vit(12.05.2026 12:16)
- Насколько я понял, он некорректно разбирает команду 0x10 и ошибочно
ждет на этом месте CRC с какой-то радости - Yft(12.05.2026 12:07)
- я не знаю, что конкретно обозначает ругань Frame Contains Error -
это относится к кадру интерфейса или к содержимому пакета. интерес
был у вас. - Vit(12.05.2026 11:58)
- На другие команды, переданные с одним стоп-битом, оно не ругается - Yft(12.05.2026 11:44)
- А почему в запросе CRC перед данными, а не в конце пакета? Vit(215 знак., 08.05.2026 13:44 - 13:52, ссылка)
- Это анализатор решил, что это CRC. Я пытаюсь разобраться что не так
с анализатором или со мной? - Yft(08.05.2026 13:47)
- Конец кадра MODBUS определяется по таймауту. Значит - в этом месте был таймаут между байтами. Анализатор честно посчитал CRC полученного кадра, и естественно не сошлось. il-2(206 знак., 08.05.2026 18:00)
- анализатор видимо не знает функцию или просто лажает Vit(20 знак., 08.05.2026 14:01, ссылка)
- Анализатор знает про функцию, просто написан с ошибками похоже. Проект, видимо, уже не поддерживается? Yft(27 знак., 08.05.2026 14:12, картинка)
- Это анализатор решил, что это CRC. Я пытаюсь разобраться что не так
с анализатором или со мной? - Yft(08.05.2026 13:47)
- А почему ваш запрос мастера состоит из 13 байт? Вы же два 16-битных
регистра пытаетесь записать. (1+1+2+2)+(2*2)+(2)=12 байт должно
быть. Или нет? - reZident(08.05.2026 12:37)
- Пример (запись 2-х регистров):Записать значения 0x000A и 0x0102 в
регистры 40002 и 40003 (адреса регистров 0001 и 0002) для
устройства 17 (0x11):11 10 0001 0002 04 000A 0102 3687 (последние 2
байта — CRC). Запрос мастера 13 байт. После количества регистров
один байт - количество байт данных - 1450(08.05.2026 12:50,
) - Вроде всё по примеру Yft(1 знак., 08.05.2026 12:42, картинка)
- Да, размер кадра не соответствует заголовку! - Nikolay_Po(08.05.2026 12:38)
- Вроде всё соответствует, правда и Master и Slave помогал писать
Deepseek. Yft(1 знак., 08.05.2026 12:49, картинка)
- Что, и картинка выше - тоже ИИ сгенерил? В запросе должно быть
только количество регистров, без количества байтов. А в ответе -
только количество байтов, а не количество регистров. - Nikolay_Po(08.05.2026 21:14)
- По спецификации количество байтов должно быть. Yft(1 знак., 12.05.2026 09:18, картинка)
- Открыл документ Modbus application protocol V1.1b3 с оф.сайта
modbus.org. И не вижу я там для функции 16 (0x10) Write Multiple
registers поля счетчика байт в запросе от мастера. :-/ reZident(30 знак., 08.05.2026 13:12, ссылка, ссылка)
- Таки есть Byte Count. Интересно, почему количество регистров
передаётся двумя байтами, а количество байт одним? Бapбoc(1 знак., 08.05.2026 13:28, картинка)
- ахз LordN(400 знак., 09.05.2026 11:45, ссылка)
- Та ну! Мне больше нравится моя версия. Формат запроса - фиксированный. Предельное количество регистров зависит от типа регистров и для однобитных регистров, в стандартной полезной нагрузке кадра Modbus, превышает 256 байт. Поэтому, поле количества регистров в стандартном запросе - двухбайтное. Чтобы не делать разные форматы запроса для регистров разного размера. Всего-то. - Nikolay_Po(1 знак., 09.05.2026 12:42, ссылка)
- Из вредности :) - Cкpипaч(08.05.2026 20:21)
- Понять это невозможно, можно только запомнить ;)) - ЫЫyкпy(08.05.2026 20:12)
- Это если не достаточно глубоко вникнуть. А если достаточно глубоко, то для регистров типа COIL, количество регистров измеряется двумя байтами, в то время как размер полезной нагрузки кадра - одним байтом. Поэтому количество регистров - два байта, а количество байт - один. Nikolay_Po(8 знак., 08.05.2026 21:11)
- Спасибо! Теперь увидел. - reZident(08.05.2026 13:30)
- ахз LordN(400 знак., 09.05.2026 11:45, ссылка)
- Таки есть Byte Count. Интересно, почему количество регистров
передаётся двумя байтами, а количество байт одним? Бapбoc(1 знак., 08.05.2026 13:28, картинка)
- Что, и картинка выше - тоже ИИ сгенерил? В запросе должно быть
только количество регистров, без количества байтов. А в ответе -
только количество байтов, а не количество регистров. - Nikolay_Po(08.05.2026 21:14)
- Вроде всё соответствует, правда и Master и Slave помогал писать
Deepseek. Yft(1 знак., 08.05.2026 12:49, картинка)
- Пример (запись 2-х регистров):Записать значения 0x000A и 0x0102 в
регистры 40002 и 40003 (адреса регистров 0001 и 0002) для
устройства 17 (0x11):11 10 0001 0002 04 000A 0102 3687 (последние 2
байта — CRC). Запрос мастера 13 байт. После количества регистров
один байт - количество байт данных - 1450(08.05.2026 12:50,
- имхо, косячишь, пишешь туда куда можно только читать LordN(2 знак., 08.05.2026 12:13, ссылка, картинка)
- А, команда не соответствует адресу? Yft(16 знак., 08.05.2026 12:31, картинка)
- яж табличку привел - там адреса 30001 - ридонли LordN(76 знак., 08.05.2026 12:56)
- родная спецификация указывает для 16-й команды адреса от 0 до FFFF. и относится оно к Internal Registers Or Physical Output Registers - Vit(08.05.2026 14:27)
- Сдается мне, что это анализатору померещилось, что адрес 30001 а не
40001, непонятно где это определяется? - Yft(08.05.2026 13:42)
- Может и так LordN(80 знак., 08.05.2026 13:58)
- Существует, его тоже я писал и он отвечает. Для проверки прибавил к
адресу 10000, такая-же ошибка вылезает но уже по адресу 40001 Yft(1 знак., 08.05.2026 14:08, картинка)
- а оттуда ченить читается без ошибок? LordN(34 знак., 08.05.2026 17:04)
- Да всё читается, но поскольку обе договаривающиеся стороны
самописные меня немного напрягло поведение анализатора - Yft(08.05.2026 17:33)
- согласен, ананизатор странный - после шешнацатой функции он какбы
должен видеть номер регистра 40001 по адресу 0000h LordN(66 знак., 08.05.2026 17:41)
- Sigrok не увидел этот анализатор, но я ради проверки проанализировал команды от Modbus poll over TCP/IP то же самое в анализе на команду 0x10 - Yft(12.05.2026 11:41)
- p.s. кстате, а попробуй-ка писать не группу, а по одному регистру,
функцией шешсть - LordN(08.05.2026 17:47)
- Попробовал. Yft(2 знак., 12.05.2026 11:43, картинка, картинка)
- согласен, ананизатор странный - после шешнацатой функции он какбы
должен видеть номер регистра 40001 по адресу 0000h LordN(66 знак., 08.05.2026 17:41)
- Да всё читается, но поскольку обе договаривающиеся стороны
самописные меня немного напрягло поведение анализатора - Yft(08.05.2026 17:33)
- а оттуда ченить читается без ошибок? LordN(34 знак., 08.05.2026 17:04)
- Существует, его тоже я писал и он отвечает. Для проверки прибавил к
адресу 10000, такая-же ошибка вылезает но уже по адресу 40001 Yft(1 знак., 08.05.2026 14:08, картинка)
- Может и так LordN(80 знак., 08.05.2026 13:58)
- яж табличку привел - там адреса 30001 - ридонли LordN(76 знак., 08.05.2026 12:56)
- А, команда не соответствует адресу? Yft(16 знак., 08.05.2026 12:31, картинка)
- предложу попробовать передать с двумя стоп-битами - Vit(09.05.2026 11:00)
