Просмотр полной версии : ПР200 modbus Slave + Arduino + MAX485
Barmaleyyy
15.01.2025, 22:13
Здравствуйте. Есть неясность с опросом пр200. С ардуино чётко отправляется нужная команда, отличный уровень сигнала, в ответ неясно что приходит. Может быть так и должно быть, но как видно на фото, отправляемый сигнал хорош, а принимаемый не очень, причем это даже зависит от питания max485 5 или 3.3 вольта. Может микросхемы используемые не подходят. То что якобы отвечает пр200 логический анализатор разобрать не может. Кто сталкивался с подобным, и можно ли микросхему модбаса в ПРке заменить на max485?!! Когда же переводишь ПРку в режим мастера, и шлешь в шину, анализатор понимает что он шлет, вот и сдается мне что микросхемы не подходят друг другу. Фото днём приложу…
Здравствуйте. Есть неясность с опросом пр200. С ардуино чётко отправляется нужная команда, отличный уровень сигнала, в ответ неясно что приходит. Может быть так и должно быть, но как видно на фото, отправляемый сигнал хорош, а принимаемый не очень, причем это даже зависит от питания max485 5 или 3.3 вольта. Может микросхемы используемые не подходят. То что якобы отвечает пр200 логический анализатор разобрать не может. Кто сталкивался с подобным, и можно ли микросхему модбаса в ПРке заменить на max485?!! Когда же переводишь ПРку в режим мастера, и шлешь в шину, анализатор понимает что он шлет, вот и сдается мне что микросхемы не подходят друг другу. Фото днём приложу…
Там на плате 485 в ПР есть пара перемычек, управляющих подтягивающими резисторами линий - попробуйте их попереставлять
Barmaleyyy
16.01.2025, 09:12
Для перестановки в соответствии с режимом, переставлял, не помогает
блин, подключаюсь к разному оборудованию самым дешевым преобразователем USB-RS485 на чипе CH340. хоть бы раз проблема возникла... Скорее всего схемотехника вашего преобразователя на стороне Arduino чем-то не дотягивает до требуемого. А да, для Arduin-ок есть платки TTL-RS485 которыми надо управлять из программы, переключать прием и передачу. А есть платки с автоматическим определением приема-передачи.
Может ваш вариант относится к первому? и в вашей программе что-то неправильно сделано для переключения приема-передачи? отсюда и проблема?
Barmaleyyy
16.01.2025, 10:51
81345
81346
81347
81348
вот фотографии, 1 и 3 это при питании 5В MAX485 со стороны ардуино
2 и 4 это при питании 3.3В MAX485 со стороны ардуино
Barmaleyyy
16.01.2025, 10:57
блин, подключаюсь к разному оборудованию самым дешевым преобразователем USB-RS485 на чипе CH340. хоть бы раз проблема возникла... Скорее всего схемотехника вашего преобразователя на стороне Arduino чем-то не дотягивает до требуемого. А да, для Arduin-ок есть платки TTL-RS485 которыми надо управлять из программы, переключать прием и передачу. А есть платки с автоматическим определением приема-передачи.
Может ваш вариант относится к первому? и в вашей программе что-то неправильно сделано для переключения приема-передачи? отсюда и проблема?
если в анализаторе и осциллографе будет четкий сигнал ответа, равный сигналу запроса, думаю тогда можно судить с прошивками
А не пробовали по отдельности каждым из девайсов опрашивать/читать ПК с каким-нибудь преобразователем USB-RS485 и программами типа MbPoll / MbSlave?
Barmaleyyy
16.01.2025, 11:04
А не пробовали по отдельности каждым из девайсов опрашивать/читать ПК с каким-нибудь преобразователем USB-RS485 и программами типа MbPoll / MbSlave?
есть один преобразователь, но он не работает. видите ж передача четко идет, а ответ какой то кривой...
Для перестановки в соответствии с режимом, переставлял, не помогает
А просто отключить независимо от режима не пробовали?
Barmaleyyy
16.01.2025, 11:33
А просто отключить независимо от режима не пробовали?
не пробовал
81345
81346
81347
81348
вот фотографии, 1 и 3 это при питании 5В MAX485 со стороны ардуино
2 и 4 это при питании 3.3В MAX485 со стороны ардуино
У меня MAX485 не работает при питании 3.3v (по даташиту) - используется конкретно MAX3485 или SP3485.
По осциллограммам не понятно - есть переход через 0 или нет (меняется полярность сигнала или нет).
По даташиту полярность должна поменяться и составить не менее -0.4v для детекции логического "0".
Может позволите взглянуть на Вашу схему?
AlexandrGr
16.01.2025, 11:47
Подключите 485 к ПК и посмотрите в режиме терминала что отвечает ПР. А оно что то отвечает. Расписывать биты с картинки мне лень. И похоже в ответе 2 стоповых бита. Хотя это не должно влиять.
Barmaleyyy
16.01.2025, 12:14
Подключите 485 к ПК и посмотрите в режиме терминала что отвечает ПР. А оно что то отвечает. Расписывать биты с картинки мне лень. И похоже в ответе 2 стоповых бита. Хотя это не должно влиять.
там видно что ответ идет с нужного адреса и зеркалит переданную команду
Т.е. ПР принимает и отвечает, а вот Arduino ответа уже не видит! Логично?! Схему в студию.
Barmaleyyy
16.01.2025, 12:19
У меня MAX485 не работает при питании 3.3v (по даташиту) - используется конкретно MAX3485 или SP3485.
По осциллограммам не понятно - есть переход через 0 или нет (меняется полярность сигнала или нет).
По даташиту полярность должна поменяться и составить не менее -0.4v для детекции логического "0".
Может позволите взглянуть на Вашу схему?
вот, переводил ПРку в режим мастера, отправляю данные без ардуины, анализатор также видит только один из сигналов и расшифровывает его правильно, либо прямой, либо инверсный, но только один! вот и вопрос...
У Вас за MAX'ом стоит Arduino'вский вход RX, а также у MAX'а 2 входа RE и DE. Как это все обвязано?
Похоже у Вас MAX все время в режиме передачи, он не слушает линию после посылки.
Barmaleyyy
16.01.2025, 19:17
У Вас за MAX'ом стоит Arduino'вский вход RX, а также у MAX'а 2 входа RE и DE. Как это все обвязано?
Похоже у Вас MAX все время в режиме передачи, он не слушает линию после посылки.
та мне особо и не надо чтоб ардуино что то там принимала, важно чтобы ПРка отвечала на запрос, она и отвечает, но как то непонятно, на фото выше видно это...
Кому "важно"? Её ответ никто не принимает. Если max485 продолжает передавать, то его другой передающий не переплюнет. Надо на DE подать 0, чтобы MAX оставил RS485-ю линию в покое.
AlexandrGr
16.01.2025, 20:30
та мне особо и не надо чтоб ардуино что то там принимала, важно чтобы ПРка отвечала на запрос, она и отвечает, но как то непонятно, на фото выше видно это...
А что вам видно на фото. И что вы хотите?
Barmaleyyy
16.01.2025, 22:28
А что вам видно на фото. И что вы хотите?
Физический сигнал запроса и ответа очень различаются, конкретно это меня и волнует. Скорее всего модули не подходят друг другу, вот поэтому ищу ответа на этот вопрос здесь. По факту что запрос, что ответ в анализаторе я вижу правильные. ПРка понимает что говорит ардуино, а ардуино не понимает что отвечает ПРка. Вижу это так если две ардуино или две ПРки соединить друг с другом, все работать будет исправно. Как понять какой из них правильный физический сигнал?!! Никогда не думал этот интерфейс в более менее серьезных устройствах, а конкретно модули созданы по каким-то принятым стандартам, нежели модуль для ардуино хотя с него мне сигнал больше нравится.
ну а подключиться через ПК к ПР и так же посмотреть анализатором? Вот вы тут рассуждаете уже сколько? дешманский USB-RS485 в комп и подключиться к ПР. Заработает, вашу поделку в мусорку. Вместе с Ардуино. Не заработает, думать.
а такие штуки как USB-RS485 должны в каждом ящике стола валяться пачками, тем более при цене в 80-100р за штуку
https://market.yandex.ru/product--espada-kontroller-usb-rs485-ur485-41373/71078172?sku=102789534534&uniqueId=58119328&do-waremd5=ohokCYkUZzZv9rAI1JRiMg
Российские магазины конечно ахреневшие, но если надо быстро, по другому никак
Barmaleyyy
16.01.2025, 22:33
Кому "важно"? Её ответ никто не принимает. Если max485 продолжает передавать, то его другой передающий не переплюнет. Надо на DE подать 0, чтобы MAX оставил RS485-ю линию в покое.
Да там 500мс между запросами, ответ с ПРки приходит через ~10мс после запроса , следующий запрос идет примерно через ~450мс, я понимаю как это должно быть… в другом дело…
Barmaleyyy
16.01.2025, 22:46
ну а подключиться через ПК к ПР и так же посмотреть анализатором? Вот вы тут рассуждаете уже сколько? дешманский USB-RS485 в комп и подключиться к ПР. Заработает, вашу поделку в мусорку. Вместе с Ардуино. Не заработает, думать.
а такие штуки как USB-RS485 должны в каждом ящике стола валяться пачками, тем более при цене в 80-100р за штуку
На фото, физический сигнал почему может быть разным? Там везде слева запрос, справа ответ, ответ на запрос верный, по какой такой причине модуль от Овна работает хуже чем модуль от китайца или наоборот? Поймите.
На модуле от китайца на мой взгляд сигнал лучше и ПРка его понимает чётко, обратно сигнал не воспринимается. Вот тут вопрос наверное больше к разработчикам этого модуля. Если разработчик читает это и знает в чем тут дело, то я тоже хочу понять!!!
In_Da_Cher_A
17.01.2025, 06:43
Вот тут вопрос наверное больше к разработчикам этого модуля. Если разработчик читает это и знает в чем тут дело, то я тоже хочу понять!!!вы серьёзно думаете, что работники ОВЕН сидят и читают каждый день писанину на форуме?
там на заглавной странице сайта адрес саппорт@овен.ру - вот туда пишите свои проблемы и вопросы
Да там 500мс между запросами, ответ с ПРки приходит через ~10мс после запроса , следующий запрос идет примерно через ~450мс, я понимаю как это должно быть… в другом дело…
Правильно! Так эти 500мс MAX должен быть в состоянии приема.
Вот обвязка MAX c Arduino - уже 10 лет работает с ПР-кой:
81371
После каждого переданного "0" схема отпускает линию используя в качестве "1" смещение самой линии.
DE - запрещает передачу, RE - включает встроенный диф-усилитель, чтобы детектировать состояние линии.
Анализатор поставьте на выход RO? убедитесь, что MAX видит передачу от ПР-ки.
Смещение на линию:
https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Rs485-bias-termination1.svg/220px-Rs485-bias-termination1.svg.png
Из https://ru.wikipedia.org/wiki/RS-485
Обратите внимание этот модуль:
81372
Джамперами J2 и J3 создается смещение, если модуль будет мастером.
А сам контроллер управляет направлением передачи.
Поэтому, чтобы получить ответ от ведомого - требуется:
1. Наличие смещения на линии.
2. Выключить передатчик у мастера.
3. Включить прием у мастера, чтобы состояние линии увидел микроконтроллер.
Если мастер остается в режиме передачи, то передача ПР-ки будет не на всю амплитуду (как у Вас).
Barmaleyyy
19.01.2025, 11:25
Правильно! Так эти 500мс MAX должен быть в состоянии приема.
Вот обвязка MAX c Arduino - уже 10 лет работает с ПР-кой:
81371
После каждого переданного "0" схема отпускает линию используя в качестве "1" смещение самой линии.
DE - запрещает передачу, RE - включает встроенный диф-усилитель, чтобы детектировать состояние линии.
Анализатор поставьте на выход RO? убедитесь, что MAX видит передачу от ПР-ки.
Смещение на линию:
https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Rs485-bias-termination1.svg/220px-Rs485-bias-termination1.svg.png
Из https://ru.wikipedia.org/wiki/RS-485
Обратите внимание этот модуль:
81372
Джамперами J2 и J3 создается смещение, если модуль будет мастером.
А сам контроллер управляет направлением передачи.
Поэтому, чтобы получить ответ от ведомого - требуется:
1. Наличие смещения на линии.
2. Выключить передатчик у мастера.
3. Включить прием у мастера, чтобы состояние линии увидел микроконтроллер.
Если мастер остается в режиме передачи, то передача ПР-ки будет не на всю амплитуду (как у Вас).
Большое спасибо . Доведу до нужного режима Ардуино-мастер
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot