ModBus TCP/IP

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05 апр 2016, 23:30
Откуда: Санкт-Петербург
Имя: Илья

ModBus TCP/IP

Сообщение starshoy81 »

[ref]garant[/ref], имхо, не взлетит, ресурсов крайне мало в ардуине для такого рода задач. Не зря выносят обработку сетевых протоколов на отдельные платы. Вариант использовать мост TCP-RTU для этого тоже нужен атмега 2560, так как 328 не вытягивает большого количества тегов из-за малого объёма памяти.
Аватара пользователя
romechka
Рядовой
Сообщения: 72
Зарегистрирован: 22 авг 2016, 07:28
Откуда: Sukhum
Имя: Роман

ModBus TCP/IP

Сообщение romechka »

Добрый Уважаемые гуру данного форума!
Подскажите кто сталкивался или в курсе данной проблемы!
Готовлю проект по удаленному мониторингу объекта. Обмен данными происходит по протоколу modbus TCP.
В качестве мастера использую мега+w5100+дисплей 2004+ энкодер.
меню собранно по принципу "красивое меню" с данного форума.
Как только начинаю подключать подключать теги,данные приходят, но резко пропадает отзывчивость энкодера, и меню не возможно управлять.
по отдельности все работает нормально. Скетч занимает 20% памяти меги.
Что это? нехватка оперативной памяти? или что другое?
ecoins
Полковник
Сообщения: 4016
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 168 раз

ModBus TCP/IP

Сообщение ecoins »

Точно дисплей тормозит - вернее его библиотека. Может еще какие-то библиотеки в которых используется оператор delay() (например DS1820 - 1,2 сек, DHT11, DHT22, HC-SR04).
Вывод одной строки Lcd на скорости шины i2c 100кгц занимает около 30мс, четырех строк длиной 20 символов 122мс.
Вывод одной строки Lcd на скорости шины i2c 400кгц занимает около 12мс, четырех строк длиной 20 символов 49мс.
Вывод одной строки Lcd на скорости шины i2c 600кгц занимает около 10мс, четырех строк длиной 20 символов 39мс.

По умолчанию библиотека Wire.h устанавливает скорость 100кГц.

Есть другие библиотеки для Arduino и адаптированные под FLProg, но при их использовании нужно использовать дополнительный метод, обеспечивающий параллельно выполнение задач.
Это не сложно и такая библиотека с блоком под FLProg тоже есть.
Последний раз редактировалось ecoins 19 авг 2018, 09:59, всего редактировалось 2 раза.
Аватара пользователя
romechka
Рядовой
Сообщения: 72
Зарегистрирован: 22 авг 2016, 07:28
Откуда: Sukhum
Имя: Роман

ModBus TCP/IP

Сообщение romechka »

ecoins писал(а): 19 авг 2018, 07:23Точно дисплей тормозит - вернее его библиотека.
На самом мастере датчиков никаких нет, только дисплей и энкодер. тормозить начинает именно тогда, когда подключаю хоть один тег modbus TCP.
Касаемо библиотеке LCD, использую блок LCD Русский Автор Слимпер
ecoins
Полковник
Сообщения: 4016
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 168 раз

ModBus TCP/IP

Сообщение ecoins »

Вот эта библиотека и тормозит. Так как я описал выше.
Можете сами проверить. Сделайте блок пользовательский micros() - на выходе блока значение функции micros();
Запомните результат перед и после вывода на Lcd, вычислите разницу и посмотрите это значение (вывести можно на терминал или на тот же LCD).
Аватара пользователя
romechka
Рядовой
Сообщения: 72
Зарегистрирован: 22 авг 2016, 07:28
Откуда: Sukhum
Имя: Роман

ModBus TCP/IP

Сообщение romechka »

ecoins писал(а): 19 авг 2018, 07:23
По умолчанию библиотека Wire.h устанавливает скорость 100кГц.
Дисплей подключен на прямую, без i2c расширителя
ecoins писал(а): 19 авг 2018, 07:23
Есть другие библиотеки для Arduino и адаптированные под FLProg, но при их использовании нужно использовать дополнительный метод, обеспечивающий параллельно выполнение задач.
Это не сложно и такая библиотека с блоком под FLProg тоже есть.
А можете тыкнуть пальцем или ткнуть носом, а то поиск по форуму не помогает мне...

Пока воткнул дополнительно к меги-уно с подключенный w5100?, т.с. разделил задачи, Уно только получает данные с модбас, а мега отображает на экране и все остальное...
ecoins
Полковник
Сообщения: 4016
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 168 раз

ModBus TCP/IP

Сообщение ecoins »

Чтобы передать один байт на Lcd по 4-х битной шины нужно выполнить четыре транзакции.
Так и написана библиотека. А между транзакциями стоит все тот же оператор delay().
Еще раз рекомендую найти временной тормоз - можно как написал выше, можно через логический анализатор.
Ответить

Вернуться в «Спросить у знатоков»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость