Страница 1 из 3

Modbus помогите советом

Добавлено: 23 сен 2016, 22:41
confiden
Здравствуйте. нужна помощь.
не могу осуществить двухсторонний обмен. С мастера отправляется значение АЦП в слейв, а вот одновременно получить значение температуры со слейва в мастер никак. В чем дело? подскажиете

Modbus помогите советом

Добавлено: 23 сен 2016, 23:28
Tehnics
У Вас в настройках слейва и мастера скорость 19200, а настройки скорости в платах 9600.

Modbus помогите советом

Добавлено: 23 сен 2016, 23:39
confiden
Сейчас сменил настройки портов и привел их в соответствие. Полагаю что при настройке модбаса, скорость выставленная в блоке идет в приоритете. Результата нет. Мастер не получает от слэйва данные о температуре , но при этом передает значение АЦП. прилагаю измененные файлы  Flprog.
Что то я делаю не так, но не понимаю что.
Нужны советы опытных

Modbus помогите советом

Добавлено: 24 сен 2016, 09:37
Sancho
confiden, Вам жизненно необходимо слать Float, или всё-таки умножить переменную на 10 или 100, преобразовать в INT и отправить одним регистром. В мастере восстановить не проблема.

Modbus помогите советом

Добавлено: 24 сен 2016, 09:52
confiden
Да нет можно и int переменную. Я уже перепробовал все что возможно. Интересно что если с мастера не слать код ацп. То я могу получать температуру со слэйва. У меня не получается именно двухсторонний обмен. Толи я что забываю сделать , толи баг программы

Modbus помогите советом

Добавлено: 24 сен 2016, 09:58
Sancho
confiden, Да, ещё. Вы как-то странно, излишне много рисуете всяких блоков передачи данных в порт. На мой взгляд.
Попробуйте так.
У меня, к сожалению, Ваш код мастера не открывается.

Modbus помогите советом

Добавлено: 24 сен 2016, 10:55
confiden
на основе вашего примера собрал мастер и слайв устройство. результат тот же.код ацп из мастера уходит , а в ответ температура со слайва не возвращается. Оба файла снова приложу. Я полагаю что есть какая от вещь которая сходу мне не ясна

Modbus помогите советом

Добавлено: 24 сен 2016, 11:30
Sancho
Сори, обновлюсь до 1.15...

Добавлено (24.09.2016, 11:30)
---------------------------------------------
На слэйве всё отображается?

Modbus помогите советом

Добавлено: 24 сен 2016, 11:50
confiden
Да на слайве отражается код ацп мастера. Что интересно . Если убрать из мастера функцию передавать ацп и оставить только возможность забирать у слэйва данные о температуре- то тоже все нормально. И int и float отлично передаётся . Но одновременно отправить и принять ступор

Добавлено (24.09.2016, 11:50)
---------------------------------------------
Возникает ощущение что адаптер 485 не производит переключение приём передача. Может есть какие то ограничения по Пину используемому для переключения приём передача? Не ясен мне этот вопрос

Modbus помогите советом

Добавлено: 24 сен 2016, 11:52
Sancho
Слэйв не успевает между запросами мастера. Нужно разнести запросы чтения и записи в мастере по циклам. Сейчас подумаю..

Modbus помогите советом

Добавлено: 24 сен 2016, 12:04
Sancho
Попробуй вот так

Добавлено (24.09.2016, 12:04)
---------------------------------------------
Пин не причём. Если есть обмен - значит пин работает.

Modbus помогите советом

Добавлено: 24 сен 2016, 12:52
confiden
Я сейчас не могу глянуть проект. Но честно говоря не представляю как разнести по циклам. Полагаю блок должен формировать паузы при переключении

Modbus помогите советом

Добавлено: 24 сен 2016, 13:27
Sancho
Не спешим с циклами. Попробуешь ver2 - посмотрим...

Modbus помогите советом

Добавлено: 24 сен 2016, 21:05
confiden
Попробовал загрузил данный код. Результат тот же самый.
Полагаю при компиляции проекта нет разницы.
Хотя честно говоря не проверял.
Что то не так все.
Есть что то еще видимо что не дает нормально в данном случае функционировать

Добавлено (24.09.2016, 21:05)
---------------------------------------------
Парни помогите еще кто нибудь каким советом. Может кто попробует смоделировать, ну не идет никак из головы данная проблема

Modbus помогите советом

Добавлено: 25 сен 2016, 08:05
Rovki
Мастер не должен посылать запросы слейву чаще чем слейв ответит на первый запрос ,причем если измеритель медленный ,то нет смысла чаще считывать данные ..

Modbus помогите советом

Добавлено: 25 сен 2016, 09:30
confiden
Ну это вобщем понятно у меня тоже были мысли что слэйв просто не успевает дать ответ как идёт новый запрос. Пробовал увеличить время синхронизация сажам в десять раз. Это не решает проблему не коем образом.

Добавлено (25.09.2016, 09:26)
---------------------------------------------
Может кто то может собрать на столе и провести эксперимент на этот счёт .

Добавлено (25.09.2016, 09:30)
---------------------------------------------
Может кто то может собрать на столе и провести эксперимент на этот счёт .

Modbus помогите советом

Добавлено: 25 сен 2016, 13:29
Слимпер
confiden, Код вроде нормальный, у меня подобный образом, пять устройств в сети сидят уже год нормально работает.
Опешите подробно, аппаратную часть подключения, может там где ошибка.
Какие адаптеры, как подключены, расстояние между платами, провод и т.д.
Если можете, нарисуйте схему.

Modbus помогите советом

Добавлено: 25 сен 2016, 22:33
confiden
Слимпер, нарисовал я сейчас схему свою. Все собрано на столе и работает . Но только возможен обмен в одну сторону. 

Добавлено (25.09.2016, 19:26)
---------------------------------------------
я могу получать например данные из слейва о температуре. но только в том случае если мастер не отсылает значение АЦП , а всего лишь производит опрос регистра

Добавлено (25.09.2016, 22:33)
---------------------------------------------
полагаю данную тему можно закрывать . Так как проблема исключительно аппаратная. При отключение провод RE от адаптера RS485. контроллер мастер получил значение температуры от слэйв. При подлючение данного провода получить не удавалось. После замены преобразователя ,обмен данными начал работать в обе стороны.Проверены все элементы на плате адаптера. Вывод глюк микросхемы MAX485. Хотя она была получена в антистатическом пакете. Но как видимо бывает всякое.
Всем большое спасибо за отклик и помощь

Modbus помогите советом

Добавлено: 26 сен 2016, 05:43
Слимпер
confiden, Поздравляю, что разобрались.
Единственно, еще вчера хотел спросить, но форум глючил, выдавал временно недоступно.
А почему на схеме не нарисовано питание модулей TTL-RS485?
И еще, если вы используете готовые китайские модули, и их в сети больше 2 штук, там надо выпаивать терминальные резисторы на всех платах кроме перовой и последней в линии.

Modbus помогите советом

Добавлено: 26 сен 2016, 08:20
confiden
Слимпер, Да конечно же питание есть. Как то вылетело просто из головы  нарисовать.
Насчет терминальных резисторов Это все ясно и понятно.
Но вот хотел сказать что сколько мы не соединяли на работе блоки по modbus все без резисторов
работало отлично, хотя по стандарту они нужны.

У меня возник теперь вот такой вопрос может ответит кто возможность и способ как создать . В моем случае я могу сделать свое мастер устройство (RS485) , одновременно Slave в стандарте Modbus TCP . Хочется увести попробовать на верхний уровень.

И вот еще какой вопрос  . Например по продукции Овен . Модуль ввода аналоговый МВА-8.
Насколько я понимаю можно организовать обмен между данными блоками и ардуино.
Таблица регистров всегда имеется в шестандцатиричном коде.
Достаточно но ли просто перевести в десятичный и проводить опрос? Или есть иное что то?

Добавлено (26.09.2016, 08:20)
---------------------------------------------
Слимпер, Да конечно же питание есть. Как то вылетело просто из головы  нарисовать.
Насчет терминальных резисторов Это все ясно и понятно.
Но вот хотел сказать что сколько мы не соединяли на работе блоки по modbus все без резисторов
работало отлично, хотя по стандарту они нужны.

У меня возник теперь вот такой вопрос может ответит кто возможность и способ как создать . В моем случае я могу сделать свое мастер устройство (RS485) , одновременно Slave в стандарте Modbus TCP . Хочется увести попробовать на верхний уровень.

И вот еще какой вопрос  . Например по продукции Овен . Модуль ввода аналоговый МВА-8.
Насколько я понимаю можно организовать обмен между данными блоками и ардуино.
Таблица регистров всегда имеется в шестандцатиричном коде.
Достаточно но ли просто перевести в десятичный и проводить опрос? Или есть иное что то?