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

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

1 час назад, mantech сказал:

Дак е-мое, не садите на одну шину эти устройства))) Сейчас в компах по 8-10 портов

Реально? :mosking:  А вы попробуйте как-нибудь воткнуть в один из этих портов что-то на USB-FS с активной изохронной точкой 1023 байта. А потом в другой порт - тоже с изохронной точкой хотя-бы байт на >=100 и попробуйте её активировать....

...и с большой вероятностью получите отказ в активации от системы. Так как окажется, что эти 8-10 портов сидят на одном (ну или двух хабах), стоящих на материнке. Соответственно - втыкание в любой порт USB-FS-устройства переводит все порты этого хаба в режим USB-FS и скорость и полоса пропускания у них становятся общими.  :suicide2:

Да, может в каких-то дорогих пром-материнках каждый порт стоит на своём USB3.0-хабе, но что-то сомневаюсь что у ТС такая.

1 час назад, mantech сказал:

Вы что-то про мои разработки знаете? Вы стеки усб с нуля писали, вот так, чтобы от регистров и до конечных устройств, а не адаптировав чьи-то исходники? А я писал

Как-то сомнительно, при таких-то плаваниях в базовых понятиях...

41 минуту назад, mantech сказал:

Вот и дело то в том, возьмите любой пром. комп и там даже несколько встроенных 485х, причем не усб переходников.

Ага, ну вот уже оказывается, что для того, чтобы ТСу запустить что-то через Modbus-RTU, ему нужно поменять ещё и комп на наверняка недешёвый промышленный! :biggrin:

Начали с того, что нужно выделить отдельный USB-хаб и дошли до пром-ПК...  :biggrin:

 

PS: Может всё-таки - ну его этот Modbus-RTU с такой кучей проблем? И взять любой протокол, который менее требователен к свойствам канала? Который не имеет временнЫх ограничений? И таких протоколов хватает. Зачем тогда упираться рогом в этот Modbus-RTU???  :unknw:

И когда ТС вдруг решит расширить свою систему, добавив каналы через TCP или через радио-линки или etc, то он сделает это легко и просто. А не будет всё переделывать с 0, как в случае с Modbus-RTU. Это если немного уметь прогнозировать будущие хотелки...

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


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

46 минут назад, Arlleex сказал:

Но даже пусть вскрыл чужой - вижу, как эти "псевдоаппаратные" RS-ы висят на мостах-преобразвоателях. В старых ПК - на PCI

На моей прошлой работе, для программистов, работающих с COM-портами (множеством портов одновременно) мы покупали отдельные PCI-платы, на которой сидели COM-порты. Они кстати позволяли себя конфигурить в режим: или RS-232 или RS-485 или RS-422. И скорость обеспечивали вроде до 4 Мб/с даже для высоковольтного RS-232 (или даже 16 Мб/с?, не уверен...). Но это серьёзная, дорогая плата расширения.

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


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

33 минуты назад, jcxz сказал:

Ага, ну вот уже оказывается, что для того, чтобы ТСу запустить что-то через Modbus-RTU, ему нужно поменять ещё и комп на наверняка недешёвый промышленный!

Специально написал, что для особо ответственных применений, для бытовых прекрасно работают переходники, по крайне мере у меня...

14 минут назад, jcxz сказал:

Но это серьёзная, дорогая плата расширения.

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

36 минут назад, jcxz сказал:

И когда ТС вдруг решит расширить свою систему, добавив каналы через TCP или через радио-линки или etc, то он сделает это легко и просто.

А что помешает сделать легко и просто уже существующий модбас на 485м? Мне почему-то это никогда не мешало и мои контроллеры могут работать и так и так одновременно)))

37 минут назад, jcxz сказал:

Как-то сомнительно, при таких-то плаваниях в базовых понятиях...

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

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


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

1 hour ago, Arlleex said:

Но даже пусть вскрыл чужой - вижу, как эти "псевдоаппаратные" RS-ы висят на мостах-преобразвоателях. В старых ПК - на PCI, еще старее - на ISA, в поновее - на USB, и лишь в единицах - проводочки уходят куда-то под сам проц. А дальше - что там крутится на этом ПК? Как ОС обслуживает каналы передачи данных между приложением и драйвером?

  • аппаратные RS-ы висят на портах x86 c конкретными номерами прибитыми гвоздями. Иногда эти номера можно поменять в BIOS или джампером.
  • "псевдоаппаратные" RS-ы ISA висят на портах выставленных джамперами
  • "псевдоаппаратные" RS-ы PCI висят на портах узнаваемых и иногда меняемых по PCI

во всех трёх случаях способ общения одинаков, через RING0. Разное только номер первого порта RS. Адресное пространство памяти - не учавствует.

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


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

38 минут назад, jcxz сказал:

Реально? :mosking:  А вы попробуйте как-нибудь воткнуть в один из этих портов что-то на USB-FS с активной изохронной точкой 1023 байта. А потом в другой порт - тоже с изохронной точкой хотя-бы байт на >=100 и попробуйте её активировать....

И в каких задачах такие требования? Или опять из оперы сферического коня в вакууме? 

5 минут назад, _4afc_ сказал:

аппаратные RS-ы висят на портах x86 c конкретными номерами прибитыми гвоздями.

Это было сто лет назад, современные PCI платы можно назначить на любые адреса и прерывания.

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


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

7 минут назад, mantech сказал:

И в каких задачах такие требования? Или опять из оперы сферического коня в вакууме? 

Вы о чём вообще? Я вам привёл условия реального тестирования работоспособности поделок с Modbus-RTU. Именно реального тестирования, а не имитации оного.

Вы как тестируете работоспособность своих устройств? В самых лёгких условиях эксплуатации? Или всё-таки - в самых тяжёлых? Вот то что я привёл - это 2-е.

Вы когда-нибудь так тестировали свои устройства?

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


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

Только что, jcxz сказал:

Вы как тестируете работоспособность своих устройств?

Тестирую тем софтом и в тех условиях, в которых им предстоит работать, легкие они  или тяжелые зависит от конфигурации.

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


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

7 minutes ago, mantech said:

Это было сто лет назад, современные PCI платы можно назначить на любые адреса и прерывания.

Вы  внимательно прочли все 3 пункта?

Я об этом и сказал, в варианте слотовых плат.

Но после назначения - без разницы MB/ISA/PCI - пишем читаем порты, сидим на прерываниях.

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


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

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

Тестирую тем софтом и в тех условиях, в которых им предстоит работать, легкие они  или тяжелые зависит от конфигурации.

Т.е. - не тестировали. Отсюда вывод: работоспособность ваших устройств - фиктивная. Она - до первого серьёзного проверяющего.  :unknw:

Если ваш девайс, заявленный как работающий на 115200 бод на полной скорости, вдруг, после втыкания некоего мультимедиа-девайса в соседний USB-порт, еле-еле может прокачать 100 байт/сек, то очевидно что обещанная скорость - филькина грамота. Также как и реализация Modbus-RTU, которая работает только в идеальных условиях.

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


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

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

Отсюда вывод: работоспособность ваших устройств - фиктивная.

Мне на ваши выводы все-равно, ибо вы ни в одном моем процессе не участвовали...

3 минуты назад, jcxz сказал:

Если ваш девайс, заявленный как работающий на 115200 бод на полной скорости, вдруг, после втыкания некоего мультимедиа-девайса в соседний USB-порт, еле-еле может прокачать 100 байт/сек, то очевидно что обещанная скорость - филькина грамота.

Если вы используете офисные компы с софтом в проавтоматике, то я не удивлен, что ваша сеть повиснет, если у секретарши, работающей в ворде за этим же компом и слушая музыку, вдруг зависнет принтер, чего тут еще-то дискутировать...

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


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

16 hours ago, _3m said:

Для меня тоже загадка как в дровах ftdi пересылка 1 байта занимает от 15мс независимо от битрейта но оно есть.

Это загадка только для тех кто аппноты от ftdi не читает.

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


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

В 22.05.2023 в 16:38, jcxz сказал:

Это вот это "2 одинаковые платы"?

ну я же говорю, что не читает. домотоал до следующей картинки, а текст не прочитал. 

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


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

19 часов назад, mantech сказал:

Вот приведите пожалуйста пример - я сделал переходник усб-485, подключил к нему промышленное RTU устройство и оно, блин не работает!!!

есть шкаф, в котором с десяток устройств объедены шиной RS-485. Для обмена используется протокол Modbus. Девайсы Промышленные девайсы в шкафу с "честным"  Modbus. Контролируется 3.5 и 1.5. Все девайсы - это слейвы. Подрубили промышленную ЭВМ к этой шине как мастера. битрейт 921600. по этой шине идет непрерывный контроль со стороны мастера. Пакеты не очень длинные, но и не короткие. Обмен непрерывный.

Периодически  рвется связь. мастер теряет ответы от слейва и принимает решение, что слейв рипнулся и делает соответствующие действия. Если снизить битрейт до 9600 - то обмен стабильный, но время опроса всей системы сильно увеличивалось и не удовлетворяло требованиям. 

Стали разбираться..... мастер при запросе, в пакете часто делал дырки более 1.5 символов. А иногда и более 3.5 символов. Прогеров мастера носом ткнули в осциллограммы шины  485. Прогеры стали кумекать.... на эвм был linux. они что то там намудрили... что-то в область realtime... стало лучше... дырок в 3.5 нет, а вот в 2 символа появлялись. редко, но появлялись. Долго они с этим боролись - и сдались. Нешмагла я, нешмагла. В итоге разрабов слейвов заставили убрать контроль 1.5. Перешли на нечестный Modbus.

 

Далее.... пожелали написать анализатор/снифер. Подрубился ноутом через usb-rs485 к шине - и в окошках весь обмен... кто, кому, когда, какие данные шлёт и по возможности визуализировать данные. Т.е. ПК выступал как слейв, который просто подслушивает. Так вот ПК не смог разделить пакеты. Делалось это через VCP. На ПК прога спрашивает "есть в порту непрочитанные данные?", далее "прочитать все данные". Вычитывает много байт... допустим 1500. Что это? где там пакеты? как их поделить? В массиве байт искались пакеты программно. В лог падали пакеты... несколько штук подряд у которых время приема было одинакового, т.е. время вызова функции read();

ps переходник usb-rs485 использовался MOXA, о котором недавно тут упоминали. 

Я это всё к тому, что тащить Modbus в ПК - это геморрой. Если Modbus тащится для того, чтобы "быть как все", т.е. что-бы в будущем было сопряжение с другими, то нужно его делать честным. Если он не честный, то могут быть проблемы с сопряжение др. устройств. Если др. устройства разрабатывает сосед по офису, то он может "вам пойти на встречу". А если это какая нить санкционочка - то .....

Modbus хорош для обмена между МК, но тащить его в ПК, даже в промышленный - это геммор. Даже на апаратном rs485 - это тоже гемор. 

В 22.05.2023 в 15:30, tonyk_av сказал:

Для наладки использовал MOXA-1150. На объектах платы от Advantech с аппаратным UART. Проблем с Модбас ни там, ни там не было.

Вполне вероятно. С большей вероятностью для наладки все будет работать. с маленьким битрейтом ваш ПК отправит запрос - минуту 10 мс будет ждать ответ, а не дождется то повторит запрос. Даже если в запросе/ответе были дырки и слейв не ответил. Ваш пк раз 50 повторит запрос, пользователь даже не заметит, что там что-то пошло не так. Прочитать и записать несколько регистров - почему бы нет. 

 

Я бы объединил две платы через UART. И объединил бы у uarta Rxd и TxD и соеденил бы одной линией (аля 1-Wire). Пк через USB. программный проброс команд с USB в 1-Wire. Протокол и на usb и на 1-Wire свой. 

Даже если подключаться к ПК через uart, то тоже все 3 девайса соединить одной 1-Wire. Какие проблемы? Ни каких колец не нужно

Если всё же RS, то ни как не 422, а 485. Чем плох 485? 

Протокол - свой. Даже если за основу Modbus, то нечестный. Да и зачем вам модбас? Зачем вам какой-то готовый freeПротокол? Свой протокол пишется быстрее, чем я этот пост. 

0-ой байт - адрес, 1-ый байт команда, 3....n байт данные, CRC, ВСЁ!!! Ну можно докинуть ещё один байт длинны. И чтоб было совсем приятно парсить массив с 10-ю пакетами, добавьте в начало пакета 2 байта синхрослова.  

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

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


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

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

Контролируется 3.5 и 1.5...
битрейт 921600...

Справедливости ради стоит заметить, что на таких скоростях правило 3.5 и 1.5 не применяется, вместо этого берутся фиксированные таймауты 750 мкс и 1.75 мс.

Цитата

0-ой байт - адрес, 1-ый байт команда, 3....n байт данные, CRC, ВСЁ!!! Ну можно докинуть ещё один байт длинны. И чтоб было совсем приятно парсить массив с 10-ю пакетами, добавьте в начало пакета 2 байта синхрослова.

Все равно нужен кодонезависимый фрейминг, а Ваш таковым не является. У RTU он кривущий таймаутный, но хотя бы есть. SLIP/COBS и дело сделано.

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


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

52 minutes ago, razrab83 said:

С большей вероятностью для наладки все будет работать. с маленьким битрейтом ваш ПК отправит запрос - минуту 10 мс будет ждать ответ, а не дождется то повторит запрос.

Обычно, битрейт был 115200. И мастер, и слэйв ведет учёт запросов, ответов на запросы, битых пакетов. Так вот, битых пакетов не было. Статистику обмена в устройствах делаю обязательно, ибо она помогает при наладке сети и ПО.

56 minutes ago, razrab83 said:

0-ой байт - адрес, 1-ый байт команда, 3....n байт данные, CRC, ВСЁ!!!

Добавить поле длины блока данных размером в 1 байт, и получается Модбас, который документирован, поддерживается всем и вся, потому девайс с ним легко подключить к любой АСУ.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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