Перейти к содержанию
    

Детали разработки модуля Modbus

1 минуту назад, tonyk_av сказал:

Добавить поле длины блока данных размером в 1 байт, и получается Модбас

в Modbus нет поля длинны блока данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, razrab83 сказал:

в Modbus нет поля длинны блока данных.

Есть. А, Вы про выделенный байт. Да, нету.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 кб.  

Изменено пользователем razrab83

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, razrab83 said:

где оно в запросе? где оно в пакетах с кодом ошибок?

Так всё-таки есть? Пусть и не во всех фреймах?

22 minutes ago, razrab83 said:

Если я в свой протокол добавлю длинну пакета (или пусть длинну данных)  -  модбаса не получиться.

И насколько лучше будет получившийся протокол в сравнении с Модбас? Смысл городить свой протокол ради экономии пары-тройки байт на фоне 256?

Модбас- это стандарт, хорошо документированный и поддержанный, нравится он кому-то или не нравится. "Железку" с ним несложно включить в любую систему мониторинга и управления без дополнительных затрат. Вот для вашего расчудесного протокола за подобные деньги можно будет купить ОРС-сервер, чтобы включить "железку" с этим протоколом в работающую систему?

image.thumb.png.5c3209fd7a764a9199cc4da3922c0d17.png

Изменено пользователем tonyk_av

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 минуту назад, razrab83 сказал:

в Modbus нет поля длинны блока данных.

В MODBUS полная длина пакета (запроса или ответа) - известна заранее.
В тех пакетах, где она может быть переменная - указывается длина поля данных.
По нему однозначно вычисляется полная длина пакета. Не вижу проблемы. Ее нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, razrab83 said:

Я это всё к тому, что тащить Modbus в ПК - это геморрой.

с технической стороны - нет проблем. но это должэн быть чесный реалтайм контроллер а не усб свисток, соответственно стоимость на порядок выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, siargy said:

но это должэн быть чесный реалтайм контроллер

Не нужено там реальное время. Например, в STM32 по-честному это решает полноценный UART с DMA и RTO.

24 minutes ago, siargy said:

а не усб свисток

Я не задумывался, как именно это решает та же МОХА, но их UPort работает в сетях Модбас стабильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 минуту назад, quark сказал:

известна заранее

"известна заранее" != "есть длинна пакета". Вопрос не в том, как определить длинну пакета, вопрос в том, что в модбас нет длинны пакета. Длинну пакета конечно же определить можно. Она в каждом пакете своя и нужно уже на уровне парсинга данных вычислять данных. С длинной гораздо проще парсить. Длинна пакета известна до парсингаданных.  получил пакет взял первые 3 байта из потока/массива - сразу понятна длинна пакета. ещё не заглядывая в данные - уже понимаешь сколько байт данных. из этих заголовок + данные можно сразу сделать класс/структуру и засунуть его в очередь, БД, мессадж, контейнр. Не разбирая и не сами данные уже можно разбить входной поток/массив на поток пакетов аля std::list<MyPack> list; А потом перебирай этот лист и обрабатывай каждый пакет. 

 

ps посмотрите Modbus TCP - обязательный заголовок 6 байт в котором есть длинна пакета. Длинна каждого пакета, в том числе которые фиксированные и не меняются.  

 

43 минуты назад, tonyk_av сказал:

Модбас- это стандарт, хорошо документированный и поддержанный, нравится он кому-то или не нравится. "Железку" с ним несложно включить в любую систему мониторинга и управления без дополнительных затрат. Вот для вашего расчудесного протокола за подобные деньги можно будет купить ОРС-сервер, чтобы включить "железку" с этим протоколом в работающую систему?

при чем здесь OPC? А ваш распрекрасный стандарт можно будет подключить к танку Армата? Можно будет купить готовый боинг, чтобы включить "железку" с этим протоколом с Modbus в работающую систему самолёт? Понимаете - нет задачи включиться в ОРС. Нет задачи, стыковаться с др системами, о чем ТС говорил. 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.05.2023 в 11:55, tonyk_av сказал:

Например, в STM32 по-честному это решает полноценный UART с DMA и RTO.

это и есть - реальное время

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, tonyk_av said:

та же МОХА, но их UPort работает в сетях Модбас стабильно.

выше писали, что оно стабильно работает на 9600, на более высоких скоростях в длинных пакетах будут пропуски. Сам наблюдал такое поведение логанализатором в длинных  пакетах со стороны ПК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 минут назад, siargy сказал:

но это должэн быть чесный реалтайм контроллер

Одного честного реал-тайм контроллера недостаточно. Нужна еще честная реал-тайм операционная система на ПК.
Если этого нет, то ни по какому протоколу рулить внешними устройствами в реальном времени не получится. Это не проблема MODBUS.
А если есть реал-тайм (контроллер и ОС), то можно сделать реал-тайм управление по любому протоколу, включая MODBUS.
Он, в этом отношении, не хуже других протоколов. И не лучше. Каждому протоколу - свое применение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.05.2023 в 11:55, tonyk_av сказал:

МОХА, но их UPort работает в сетях Модбас стабильно.

UC-8410-LX - на высоких скоростях не работает стабильно. Преобразователи от MOXA NPort (tcp/rs485) тоже на высоких скоростях не выдерживают всех тайменгов. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, razrab83 сказал:

Длинну пакета конечно же определить можно. Она в каждом пакете своя и нужно уже на уровне парсинга данных вычислять данных. С длинной гораздо проще парсить.

А почему Вам должно быть проще? У Вас что в ПК ресурсов мало? Или лень программу разрабатывать?

Простота обработки - это только один из критериев эффективности протокола. И далеко не самый главный. Есть и более весомые.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...