razrab83 21 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 1 минуту назад, tonyk_av сказал: Добавить поле длины блока данных размером в 1 байт, и получается Модбас в Modbus нет поля длинны блока данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 1 минуту назад, razrab83 сказал: в Modbus нет поля длинны блока данных. Есть. А, Вы про выделенный байт. Да, нету. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба Только что, Arlleex сказал: Есть нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 6 minutes ago, razrab83 said: в Modbus нет поля длинны блока данных. Куда оно делось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 24 мая, 2023 Опубликовано 24 мая, 2023 (изменено) · Жалоба 20 минут назад, tonyk_av сказал: Куда оно делось? где оно в запросе? где оно в пакетах с кодом ошибок? то, что там длинна какая-то в частных пакетах внутри данных - это не длинна пакета. Эта ваша длинна - это данные. У вас когда уарт примет 100 пакетов. Потом парсер начнет распарсивать - парсер должен должен прежде всего выделить целый пакет абстрагируясь от данных, потом, в зависимости от функции передать данные в парсер конкретного пакета. Если я в свой протокол добавлю длину пакета (или пусть длину данных) - модбаса не получиться. запос: 04 - адреc МК (получателя) 01 - адрес отправителя (ПК) 03 - функция, чтение смещения 0 - длина данных 12 34 - CRC ответ 01 - адрес ПК 04 - адрес отправителя 03 - функция, чтение смещения 4 - длинна поля данных 0x12345678 - тут в float смещение инструмента в метрах 12 34 - crc если можно ещё и адрес отправителя, это если много девайсов, но и без него не хуже. Зелёным - обязательный заголовок пакета. из 3-х(4-х) байт. Далее... поле данных - не регистры, а данные. Нужно смещение - получи смещение. Надо температуру - получи температуру. Надо в одном пакете 50 данных в разных форматах (float/int/float/MyStruct) - упакуй и передай. Вплоть до того что можно запросить у слейва текст. в пакете вернёт массив char. Если есть потребность в пакетах больших 256 байт, поле длинны данных 2 байта - передавай одним пакетом до 65 кб. Изменено 24 мая, 2023 пользователем razrab83 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 24 мая, 2023 Опубликовано 24 мая, 2023 (изменено) · Жалоба 22 minutes ago, razrab83 said: где оно в запросе? где оно в пакетах с кодом ошибок? Так всё-таки есть? Пусть и не во всех фреймах? 22 minutes ago, razrab83 said: Если я в свой протокол добавлю длинну пакета (или пусть длинну данных) - модбаса не получиться. И насколько лучше будет получившийся протокол в сравнении с Модбас? Смысл городить свой протокол ради экономии пары-тройки байт на фоне 256? Модбас- это стандарт, хорошо документированный и поддержанный, нравится он кому-то или не нравится. "Железку" с ним несложно включить в любую систему мониторинга и управления без дополнительных затрат. Вот для вашего расчудесного протокола за подобные деньги можно будет купить ОРС-сервер, чтобы включить "железку" с этим протоколом в работающую систему? Изменено 24 мая, 2023 пользователем tonyk_av Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 51 минуту назад, razrab83 сказал: в Modbus нет поля длинны блока данных. В MODBUS полная длина пакета (запроса или ответа) - известна заранее. В тех пакетах, где она может быть переменная - указывается длина поля данных. По нему однозначно вычисляется полная длина пакета. Не вижу проблемы. Ее нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
siargy 7 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 1 hour ago, razrab83 said: Я это всё к тому, что тащить Modbus в ПК - это геморрой. с технической стороны - нет проблем. но это должэн быть чесный реалтайм контроллер а не усб свисток, соответственно стоимость на порядок выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 22 minutes ago, siargy said: но это должэн быть чесный реалтайм контроллер Не нужено там реальное время. Например, в STM32 по-честному это решает полноценный UART с DMA и RTO. 24 minutes ago, siargy said: а не усб свисток Я не задумывался, как именно это решает та же МОХА, но их UPort работает в сетях Модбас стабильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 21 минуту назад, quark сказал: известна заранее "известна заранее" != "есть длинна пакета". Вопрос не в том, как определить длинну пакета, вопрос в том, что в модбас нет длинны пакета. Длинну пакета конечно же определить можно. Она в каждом пакете своя и нужно уже на уровне парсинга данных вычислять данных. С длинной гораздо проще парсить. Длинна пакета известна до парсингаданных. получил пакет взял первые 3 байта из потока/массива - сразу понятна длинна пакета. ещё не заглядывая в данные - уже понимаешь сколько байт данных. из этих заголовок + данные можно сразу сделать класс/структуру и засунуть его в очередь, БД, мессадж, контейнр. Не разбирая и не сами данные уже можно разбить входной поток/массив на поток пакетов аля std::list<MyPack> list; А потом перебирай этот лист и обрабатывай каждый пакет. ps посмотрите Modbus TCP - обязательный заголовок 6 байт в котором есть длинна пакета. Длинна каждого пакета, в том числе которые фиксированные и не меняются. 43 минуты назад, tonyk_av сказал: Модбас- это стандарт, хорошо документированный и поддержанный, нравится он кому-то или не нравится. "Железку" с ним несложно включить в любую систему мониторинга и управления без дополнительных затрат. Вот для вашего расчудесного протокола за подобные деньги можно будет купить ОРС-сервер, чтобы включить "железку" с этим протоколом в работающую систему? при чем здесь OPC? А ваш распрекрасный стандарт можно будет подключить к танку Армата? Можно будет купить готовый боинг, чтобы включить "железку" с этим протоколом с Modbus в работающую систему самолёт? Понимаете - нет задачи включиться в ОРС. Нет задачи, стыковаться с др системами, о чем ТС говорил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ericN 3 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба В 24.05.2023 в 11:55, tonyk_av сказал: Например, в STM32 по-честному это решает полноценный UART с DMA и RTO. это и есть - реальное время Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
siargy 7 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 12 minutes ago, tonyk_av said: та же МОХА, но их UPort работает в сетях Модбас стабильно. выше писали, что оно стабильно работает на 9600, на более высоких скоростях в длинных пакетах будут пропуски. Сам наблюдал такое поведение логанализатором в длинных пакетах со стороны ПК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 29 минут назад, siargy сказал: но это должэн быть чесный реалтайм контроллер Одного честного реал-тайм контроллера недостаточно. Нужна еще честная реал-тайм операционная система на ПК. Если этого нет, то ни по какому протоколу рулить внешними устройствами в реальном времени не получится. Это не проблема MODBUS. А если есть реал-тайм (контроллер и ОС), то можно сделать реал-тайм управление по любому протоколу, включая MODBUS. Он, в этом отношении, не хуже других протоколов. И не лучше. Каждому протоколу - свое применение. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ericN 3 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба В 24.05.2023 в 11:55, tonyk_av сказал: МОХА, но их UPort работает в сетях Модбас стабильно. UC-8410-LX - на высоких скоростях не работает стабильно. Преобразователи от MOXA NPort (tcp/rs485) тоже на высоких скоростях не выдерживают всех тайменгов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 24 мая, 2023 Опубликовано 24 мая, 2023 · Жалоба 8 минут назад, razrab83 сказал: Длинну пакета конечно же определить можно. Она в каждом пакете своя и нужно уже на уровне парсинга данных вычислять данных. С длинной гораздо проще парсить. А почему Вам должно быть проще? У Вас что в ПК ресурсов мало? Или лень программу разрабатывать? Простота обработки - это только один из критериев эффективности протокола. И далеко не самый главный. Есть и более весомые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться